diff --git a/markwon-editor/src/main/java/io/noties/markwon/editor/handler/HeadingEditHandler.java b/markwon-editor/src/main/java/io/noties/markwon/editor/handler/HeadingEditHandler.java index 2af54951..7ca4ab0e 100644 --- a/markwon-editor/src/main/java/io/noties/markwon/editor/handler/HeadingEditHandler.java +++ b/markwon-editor/src/main/java/io/noties/markwon/editor/handler/HeadingEditHandler.java @@ -2,7 +2,6 @@ package it.niedermann.android.markdown.markwon.handler; import android.text.Editable; import android.text.Spanned; -import android.util.Log; import androidx.annotation.NonNull; @@ -14,14 +13,6 @@ import io.noties.markwon.editor.PersistedSpans; public class HeadingEditHandler implements EditHandler { - private static final String[] MARKERS = new String[]{ - "#", - "##", - "###", - "####", - "#####", - "######", - }; private MarkwonTheme theme; @@ -32,12 +23,12 @@ public class HeadingEditHandler implements EditHandler { @Override public void configurePersistedSpans(@NonNull PersistedSpans.Builder builder) { - builder.persistSpan(Heading1Span.class, () -> new Heading1Span(theme)); - builder.persistSpan(Heading2Span.class, () -> new Heading2Span(theme)); - builder.persistSpan(Heading3Span.class, () -> new Heading3Span(theme)); - builder.persistSpan(Heading4Span.class, () -> new Heading4Span(theme)); - builder.persistSpan(Heading5Span.class, () -> new Heading5Span(theme)); - builder.persistSpan(Heading6Span.class, () -> new Heading6Span(theme)); + builder.persistSpan(Heading1Span.class, new Runnable() { new Heading1Span(theme)}); + builder.persistSpan(Heading2Span.class, new Runnable() { new Heading2Span(theme)}); + builder.persistSpan(Heading3Span.class, new Runnable() { new Heading3Span(theme)}); + builder.persistSpan(Heading4Span.class, new Runnable() { new Heading4Span(theme)}); + builder.persistSpan(Heading5Span.class, new Runnable() { new Heading5Span(theme)}); + builder.persistSpan(Heading6Span.class, new Runnable() { new Heading6Span(theme)}); } @Override @@ -73,9 +64,8 @@ public class HeadingEditHandler implements EditHandler { return; } - int newStart = getNewSpanStart(input, spanStart, newSpan.getLevel()); - int newEnd = input.indexOf("\n", newStart); - Log.w("deck", "found heading lv "+span.getLevel()+": \""+input.substring(newStart, newEnd)+"\""); + int newStart = getNewSpanStart(input, spanStart); + int newEnd = findEnd(input, newStart, newSpan.getLevel()); editable.setSpan( newSpan, @@ -85,11 +75,19 @@ public class HeadingEditHandler implements EditHandler { ); } - private int getNewSpanStart(String input, int spanStart, int level) { - String marker = MARKERS[level-1]; - if (input.substring(spanStart, spanStart + level).equals(marker)) { - return spanStart; + private int findEnd(String input, int searchFrom, int spanLevel) { + int end = searchFrom + spanLevel; + int strLength = input.length(); + while (end < strLength-1) { + end++; + if (input.charAt(end) == '\n') { + break; + } } + return end+1; + } + + private int getNewSpanStart(String input, int spanStart) { int start = spanStart;