Sample, add heading handler
This commit is contained in:
		
							parent
							
								
									3ef41b1b81
								
							
						
					
					
						commit
						f47124a2ac
					
				@ -64,7 +64,8 @@ public class EditorActivity extends ActivityWithMenuOptions {
 | 
			
		||||
                .add("multipleEditSpans", this::multiple_edit_spans)
 | 
			
		||||
                .add("multipleEditSpansPlugin", this::multiple_edit_spans_plugin)
 | 
			
		||||
                .add("pluginRequire", this::plugin_require)
 | 
			
		||||
                .add("pluginNoDefaults", this::plugin_no_defaults);
 | 
			
		||||
                .add("pluginNoDefaults", this::plugin_no_defaults)
 | 
			
		||||
                .add("heading", this::heading);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@ -317,6 +318,16 @@ public class EditorActivity extends ActivityWithMenuOptions {
 | 
			
		||||
                editor, Executors.newSingleThreadExecutor(), editText));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void heading() {
 | 
			
		||||
        final Markwon markwon = Markwon.create(this);
 | 
			
		||||
        final MarkwonEditor editor = MarkwonEditor.builder(markwon)
 | 
			
		||||
                .useEditHandler(new HeadingEditHandler())
 | 
			
		||||
                .build();
 | 
			
		||||
 | 
			
		||||
        editText.addTextChangedListener(MarkwonEditorTextWatcher.withPreRender(
 | 
			
		||||
                editor, Executors.newSingleThreadExecutor(), editText));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void initBottomBar() {
 | 
			
		||||
        // all except block-quote wraps if have selection, or inserts at current cursor position
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,78 @@
 | 
			
		||||
package io.noties.markwon.sample.editor;
 | 
			
		||||
 | 
			
		||||
import android.text.Editable;
 | 
			
		||||
import android.text.Spanned;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import io.noties.markwon.Markwon;
 | 
			
		||||
import io.noties.markwon.core.MarkwonTheme;
 | 
			
		||||
import io.noties.markwon.core.spans.HeadingSpan;
 | 
			
		||||
import io.noties.markwon.editor.EditHandler;
 | 
			
		||||
import io.noties.markwon.editor.PersistedSpans;
 | 
			
		||||
 | 
			
		||||
public class HeadingEditHandler implements EditHandler<HeadingSpan> {
 | 
			
		||||
 | 
			
		||||
    private MarkwonTheme theme;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void init(@NonNull Markwon markwon) {
 | 
			
		||||
        this.theme = markwon.configuration().theme();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void configurePersistedSpans(@NonNull PersistedSpans.Builder builder) {
 | 
			
		||||
        builder
 | 
			
		||||
                .persistSpan(Head1.class, () -> new Head1(theme))
 | 
			
		||||
                .persistSpan(Head2.class, () -> new Head2(theme));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void handleMarkdownSpan(
 | 
			
		||||
            @NonNull PersistedSpans persistedSpans,
 | 
			
		||||
            @NonNull Editable editable,
 | 
			
		||||
            @NonNull String input,
 | 
			
		||||
            @NonNull HeadingSpan span,
 | 
			
		||||
            int spanStart,
 | 
			
		||||
            int spanTextLength
 | 
			
		||||
    ) {
 | 
			
		||||
        final Class<?> type;
 | 
			
		||||
        switch (span.getLevel()) {
 | 
			
		||||
            case 1: type = Head1.class; break;
 | 
			
		||||
            case 2: type = Head2.class; break;
 | 
			
		||||
            default:
 | 
			
		||||
                type = null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (type != null) {
 | 
			
		||||
            final int index = input.indexOf('\n', spanStart + spanTextLength);
 | 
			
		||||
            final int end = index < 0
 | 
			
		||||
                    ? input.length()
 | 
			
		||||
                    : index;
 | 
			
		||||
            editable.setSpan(
 | 
			
		||||
                    persistedSpans.get(type),
 | 
			
		||||
                    spanStart,
 | 
			
		||||
                    end,
 | 
			
		||||
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NonNull
 | 
			
		||||
    @Override
 | 
			
		||||
    public Class<HeadingSpan> markdownSpanType() {
 | 
			
		||||
        return HeadingSpan.class;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static class Head1 extends HeadingSpan {
 | 
			
		||||
        Head1(@NonNull MarkwonTheme theme) {
 | 
			
		||||
            super(theme, 1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static class Head2 extends HeadingSpan {
 | 
			
		||||
        Head2(@NonNull MarkwonTheme theme) {
 | 
			
		||||
            super(theme, 2);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user