parent
ca196ffc73
commit
fed8b01764
@ -0,0 +1,83 @@ |
||||
package com.keylesspalace.tusky.util; |
||||
|
||||
import androidx.annotation.IntDef; |
||||
import androidx.annotation.IntRange; |
||||
import androidx.annotation.NonNull; |
||||
import androidx.annotation.VisibleForTesting; |
||||
import android.text.Editable; |
||||
import android.text.Selection; |
||||
import android.text.Spannable; |
||||
import android.widget.EditText; |
||||
import me.thanel.markdownedit.SelectionUtils; |
||||
|
||||
public class BBCodeEdit { |
||||
private BBCodeEdit() { /* cannot be instantiated */ } |
||||
|
||||
public static void addBold(@NonNull Editable text) { |
||||
HTMLEdit.surroundSelectionWith(text, "[b]", "[/b]"); |
||||
} |
||||
|
||||
public static void addBold(@NonNull EditText editText) { |
||||
addBold(editText.getText()); |
||||
} |
||||
|
||||
public static void addItalic(@NonNull Editable text) { |
||||
HTMLEdit.surroundSelectionWith(text, "[i]", "[/i]"); |
||||
} |
||||
|
||||
public static void addItalic(@NonNull EditText editText) { |
||||
addItalic(editText.getText()); |
||||
} |
||||
|
||||
public static void addStrikeThrough(@NonNull Editable text) { |
||||
HTMLEdit.surroundSelectionWith(text, "[s]", "[/s]"); |
||||
} |
||||
|
||||
public static void addStrikeThrough(@NonNull EditText editText) { |
||||
addStrikeThrough(editText.getText()); |
||||
} |
||||
|
||||
public static void addLink(@NonNull Editable text) { |
||||
if (!SelectionUtils.hasSelection(text)) { |
||||
SelectionUtils.selectWordAroundCursor(text); |
||||
} |
||||
String selectedText = SelectionUtils.getSelectedText(text).toString().trim(); |
||||
|
||||
int selectionStart = SelectionUtils.getSelectionStart(text); |
||||
|
||||
String begin = "[url=url]"; |
||||
String end = "[/url]"; |
||||
String result = begin + selectedText + end; |
||||
SelectionUtils.replaceSelectedText(text, result); |
||||
|
||||
if (selectedText.length() == 0) { |
||||
Selection.setSelection(text, selectionStart + begin.length()); |
||||
} else { |
||||
selectionStart = selectionStart + 5; // [url=".length()
|
||||
Selection.setSelection(text, selectionStart, selectionStart + 3); |
||||
} |
||||
} |
||||
|
||||
public static void addLink(@NonNull EditText editText) { |
||||
addLink(editText.getText()); |
||||
} |
||||
|
||||
/** |
||||
* Inserts a markdown code block to the specified EditText at the currently selected position. |
||||
* |
||||
* @param text The {@link Editable} view to which to add markdown code block. |
||||
*/ |
||||
public static void addCode(@NonNull Editable text) { |
||||
HTMLEdit.surroundSelectionWith(text, "[code]", "[/code]"); |
||||
} |
||||
|
||||
/** |
||||
* Inserts a markdown code block to the specified EditText at the currently selected position. |
||||
* |
||||
* @param editText The {@link EditText} view to which to add markdown code block. |
||||
*/ |
||||
public static void addCode(@NonNull EditText editText) { |
||||
addCode(editText.getText()); |
||||
} |
||||
} |
||||
|
@ -0,0 +1,104 @@ |
||||
package com.keylesspalace.tusky.util; |
||||
|
||||
import androidx.annotation.IntDef; |
||||
import androidx.annotation.IntRange; |
||||
import androidx.annotation.NonNull; |
||||
import androidx.annotation.VisibleForTesting; |
||||
import android.text.Editable; |
||||
import android.text.Selection; |
||||
import android.text.Spannable; |
||||
import android.widget.EditText; |
||||
import me.thanel.markdownedit.SelectionUtils; |
||||
|
||||
public class HTMLEdit { |
||||
private HTMLEdit() { /* cannot be instantiated */ } |
||||
|
||||
public static void addBold(@NonNull Editable text) { |
||||
surroundSelectionWith(text, "<b>", "</b>"); |
||||
} |
||||
|
||||
public static void addBold(@NonNull EditText editText) { |
||||
addBold(editText.getText()); |
||||
} |
||||
|
||||
public static void addItalic(@NonNull Editable text) { |
||||
surroundSelectionWith(text, "<i>", "</i>"); |
||||
} |
||||
|
||||
public static void addItalic(@NonNull EditText editText) { |
||||
addItalic(editText.getText()); |
||||
} |
||||
|
||||
public static void addStrikeThrough(@NonNull Editable text) { |
||||
surroundSelectionWith(text, "<del>", "</del>"); |
||||
} |
||||
|
||||
public static void addStrikeThrough(@NonNull EditText editText) { |
||||
addStrikeThrough(editText.getText()); |
||||
} |
||||
|
||||
public static void addLink(@NonNull Editable text) { |
||||
if (!SelectionUtils.hasSelection(text)) { |
||||
SelectionUtils.selectWordAroundCursor(text); |
||||
} |
||||
String selectedText = SelectionUtils.getSelectedText(text).toString().trim(); |
||||
|
||||
int selectionStart = SelectionUtils.getSelectionStart(text); |
||||
|
||||
String begin = "<a href=\"url\">"; |
||||
String end = "</a>"; |
||||
String result = begin + selectedText + end; |
||||
SelectionUtils.replaceSelectedText(text, result); |
||||
|
||||
if (selectedText.length() == 0) { |
||||
Selection.setSelection(text, selectionStart + begin.length()); |
||||
} else { |
||||
selectionStart = selectionStart + 9; // <a href=".length()
|
||||
Selection.setSelection(text, selectionStart, selectionStart + 3); |
||||
} |
||||
} |
||||
|
||||
public static void addLink(@NonNull EditText editText) { |
||||
addLink(editText.getText()); |
||||
} |
||||
|
||||
/** |
||||
* Inserts a markdown code block to the specified EditText at the currently selected position. |
||||
* |
||||
* @param text The {@link Editable} view to which to add markdown code block. |
||||
*/ |
||||
public static void addCode(@NonNull Editable text) { |
||||
surroundSelectionWith(text, "<code>", "</code>"); |
||||
} |
||||
|
||||
/** |
||||
* Inserts a markdown code block to the specified EditText at the currently selected position. |
||||
* |
||||
* @param editText The {@link EditText} view to which to add markdown code block. |
||||
*/ |
||||
public static void addCode(@NonNull EditText editText) { |
||||
addCode(editText.getText()); |
||||
} |
||||
|
||||
public static void surroundSelectionWith(@NonNull Editable text, @NonNull String surroundText, @NonNull String surroundText2) { |
||||
if (!SelectionUtils.hasSelection(text)) { |
||||
SelectionUtils.selectWordAroundCursor(text); |
||||
} |
||||
CharSequence selectedText = SelectionUtils.getSelectedText(text); |
||||
int selectionStart = SelectionUtils.getSelectionStart(text); |
||||
|
||||
selectedText = selectedText.toString().trim(); |
||||
|
||||
StringBuilder result = new StringBuilder(); |
||||
result.append(surroundText).append(selectedText).append(surroundText2); |
||||
|
||||
int charactersToGoBack = 0; |
||||
if (selectedText.length() == 0) { |
||||
charactersToGoBack = surroundText2.length(); |
||||
} |
||||
|
||||
SelectionUtils.replaceSelectedText(text, result); |
||||
Selection.setSelection(text, selectionStart + result.length() - charactersToGoBack); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue