diff --git a/markdown-processor/src/main/java/com/yydcdut/markdown/live/CodeBlockLive.java b/markdown-processor/src/main/java/com/yydcdut/markdown/live/CodeBlockLive.java index 0830f83..29060d2 100644 --- a/markdown-processor/src/main/java/com/yydcdut/markdown/live/CodeBlockLive.java +++ b/markdown-processor/src/main/java/com/yydcdut/markdown/live/CodeBlockLive.java @@ -66,14 +66,14 @@ public void onTextChanged(CharSequence s, int start, int before, int after) { if (after == 0) { return; } - String addString = s.subSequence(start, (start + after) > s.length() ? s.length() : (start + after)).toString(); + String addString = s.subSequence(Utils.safePosition(start, s), Utils.safePosition(start + after, s)).toString(); String beforeString = null; String afterString = null; if (start + 1 <= s.length()) { - afterString = s.subSequence(start, start + 1).toString(); + afterString = s.subSequence(Utils.safePosition(start, s), Utils.safePosition(start + 1, s)).toString(); } if (start > 0) { - beforeString = s.subSequence(start - 1, start).toString(); + beforeString = s.subSequence(Utils.safePosition(start - 1, s), Utils.safePosition(start, s)).toString(); } //``` --> `1``(``1`)(```1)(1```) if (SyntaxUtils.isNeedFormat(SyntaxKey.KEY_CODE_BLOCK_SINGLE, addString, beforeString, afterString)) { @@ -81,6 +81,7 @@ public void onTextChanged(CharSequence s, int start, int before, int after) { } } + private void format(Editable editable, int start) { Utils.removeSpans(editable, start, MDCodeBlockSpan.class); Syntax syntax = EditFactory.create().getCodeBlockSyntax(mMarkdownConfiguration); diff --git a/markdown-processor/src/main/java/com/yydcdut/markdown/utils/Utils.java b/markdown-processor/src/main/java/com/yydcdut/markdown/utils/Utils.java index 828c69c..988868b 100644 --- a/markdown-processor/src/main/java/com/yydcdut/markdown/utils/Utils.java +++ b/markdown-processor/src/main/java/com/yydcdut/markdown/utils/Utils.java @@ -321,4 +321,14 @@ public static char getChar(char[] array, int index) { return array[index]; } + /** + * get position safely + * + * @param position the position + * @param s the CharSequence + * @return the safe position + */ + public static int safePosition(int position, CharSequence s) { + return position > s.length() ? s.length() : (position < 0 ? 0 : position); + } }