class MarkdownWriter extends MarkdownWriterBase<MarkdownWriter, Node, NodeFormatterContext> {
    public MarkdownWriter() {
        this(null, 0);
    }

    public MarkdownWriter(int formatOptions) {
        this(null, formatOptions);
    }

    public MarkdownWriter(@Nullable Appendable appendable, int formatOptions) {
        super(appendable, formatOptions);
    }

    @NotNull
    @Override
    public MarkdownWriter getEmptyAppendable() {
        return new MarkdownWriter(appendable, appendable.getOptions());
    }

    @Override
    public @NotNull BasedSequence lastBlockQuoteChildPrefix(BasedSequence prefix) {<FILL_FUNCTION_BODY>}

    public @NotNull MarkdownWriter appendNonTranslating(@NotNull CharSequence csq) {
        return appendNonTranslating(null, csq, null, null);
    }

    public @NotNull MarkdownWriter appendNonTranslating(@Nullable CharSequence prefix, @NotNull CharSequence csq) {
        return appendNonTranslating(prefix, csq, null, null);
    }

    public @NotNull MarkdownWriter appendNonTranslating(@Nullable CharSequence prefix, @NotNull CharSequence csq, @Nullable CharSequence suffix) {
        return appendNonTranslating(prefix, csq, suffix, null);
    }

    public @NotNull MarkdownWriter appendNonTranslating(@Nullable CharSequence prefix, @NotNull CharSequence csq, @Nullable CharSequence suffix, @Nullable CharSequence suffix2) {
        if (context.isTransformingText()) {
            append(context.transformNonTranslating(prefix, csq, suffix, suffix2));
        } else {
            append(csq);
        }
        return this;
    }

    public @NotNull MarkdownWriter appendTranslating(@NotNull CharSequence csq) {
        return appendTranslating(null, csq, null, null);
    }

    public @NotNull MarkdownWriter appendTranslating(@Nullable CharSequence prefix, @NotNull CharSequence csq) {
        return appendTranslating(prefix, csq, null, null);
    }

    public @NotNull MarkdownWriter appendTranslating(@Nullable CharSequence prefix, @NotNull CharSequence csq, @Nullable CharSequence suffix) {
        return appendTranslating(prefix, csq, suffix, null);
    }

    public @NotNull MarkdownWriter appendTranslating(@Nullable CharSequence prefix, @NotNull CharSequence csq, @Nullable CharSequence suffix, @Nullable CharSequence suffix2) {
        if (context.isTransformingText()) {
            append(context.transformTranslating(prefix, csq, suffix, suffix2));
        } else {
            if (prefix != null) append(prefix);
            append(csq);
            if (suffix != null) append(suffix);
            if (suffix2 != null) append(suffix2);
        }
        return this;
    }
}

        Node node = context.getCurrentNode();
        while (node != null && node.getNextAnyNot(BlankLine.class) == null) {
            Node parent = node.getParent();
            if (parent == null || parent instanceof Document) break;
            if (parent instanceof BlockQuoteLike) {
                int pos = prefix.lastIndexOfAny(context.getBlockQuoteLikePrefixPredicate());
                if (pos >= 0) {
                    prefix = prefix.getBuilder().append(prefix.subSequence(0, pos)).append(' ').append(prefix.subSequence(pos + 1)).toSequence();
//                } else {
//                    // NOTE: occurs if continuation block prefix is remove
                }
            }
            node = parent;
        }
        return prefix;
    
<methods>public void <init>() ,public void <init>(int) ,public void <init>(@Nullable Appendable, int) ,public @NotNull MarkdownWriter addIndentOnFirstEOL(@NotNull Runnable) ,public @NotNull MarkdownWriter addPrefix(@NotNull CharSequence) ,public @NotNull MarkdownWriter addPrefix(@NotNull CharSequence, boolean) ,public @NotNull MarkdownWriter append(char) ,public @NotNull MarkdownWriter append(@NotNull CharSequence) ,public @NotNull MarkdownWriter append(@NotNull CharSequence, int, int) ,public @NotNull MarkdownWriter append(@NotNull LineAppendable, int, int, boolean) ,public @NotNull MarkdownWriter append(char, int) ,public T appendTo(@NotNull T, boolean, int, int, int, int) throws java.io.IOException,public @NotNull MarkdownWriter blankLine() ,public @NotNull MarkdownWriter blankLine(int) ,public @NotNull MarkdownWriter blankLineIf(boolean) ,public @NotNull MarkdownWriter changeOptions(int, int) ,public @NotNull MarkdownWriter closePreFormatted() ,public int column() ,public boolean endsWithEOL() ,public int getAfterEolPrefixDelta() ,public @NotNull BasedSequence getBeforeEolPrefix() ,public @NotNull ISequenceBuilder<?,?> getBuilder() ,public com.vladsch.flexmark.formatter.NodeFormatterContext getContext() ,public @NotNull BasedSequence getIndentPrefix() ,public @NotNull BasedSequence getLine(int) ,public int getLineCount() ,public int getLineCountWithPending() ,public @NotNull LineInfo getLineInfo(int) ,public @NotNull Iterable<BasedSequence> getLines(int, int, int, boolean) ,public @NotNull Iterable<LineInfo> getLinesInfo(int, int, int) ,public @NotNull BitFieldSet<LineAppendable.Options> getOptionSet() ,public int getOptions() ,public int getPendingEOL() ,public int getPendingSpace() ,public @NotNull BasedSequence getPrefix() ,public int getTrailingBlankLines(int) ,public @NotNull MarkdownWriter indent() ,public void insertLine(int, @NotNull CharSequence, @NotNull CharSequence) ,public boolean isPendingSpace() ,public boolean isPreFormatted() ,public @NotNull Iterator<LineInfo> iterator() ,public abstract @NotNull BasedSequence lastBlockQuoteChildPrefix(com.vladsch.flexmark.util.sequence.BasedSequence) ,public @NotNull MarkdownWriter line() ,public @NotNull MarkdownWriter lineIf(boolean) ,public @NotNull MarkdownWriter lineOnFirstText(boolean) ,public @NotNull MarkdownWriter lineWithTrailingSpaces(int) ,public int offset() ,public int offsetWithPending() ,public @NotNull MarkdownWriter openPreFormatted(boolean) ,public @NotNull MarkdownWriter popOptions() ,public @NotNull MarkdownWriter popPrefix() ,public @NotNull MarkdownWriter popPrefix(boolean) ,public @NotNull MarkdownWriter pushOptions() ,public @NotNull MarkdownWriter pushPrefix() ,public @NotNull MarkdownWriter removeExtraBlankLines(int, int, int, int) ,public @NotNull MarkdownWriter removeIndentOnFirstEOL(@NotNull Runnable) ,public @NotNull MarkdownWriter removeLines(int, int) ,public void setContext(com.vladsch.flexmark.formatter.NodeFormatterContext) ,public @NotNull MarkdownWriter setIndentPrefix(@Nullable CharSequence) ,public void setLine(int, @NotNull CharSequence, @NotNull CharSequence) ,public @NotNull MarkdownWriter setOptions(int) ,public @NotNull MarkdownWriter setPrefix(@NotNull CharSequence) ,public @NotNull MarkdownWriter setPrefix(@Nullable CharSequence, boolean) ,public void setPrefixLength(int, int) ,public @NotNull MarkdownWriter tailBlankLine() ,public @NotNull MarkdownWriter tailBlankLine(int) ,public @NotNull CharSequence toSequence(int, int, boolean) ,public java.lang.String toString() ,public @NotNull String toString(int, int, boolean) ,public @NotNull MarkdownWriter unIndent() ,public @NotNull MarkdownWriter unIndentNoEol() <variables>protected final non-sealed com.vladsch.flexmark.util.sequence.LineAppendableImpl appendable,protected com.vladsch.flexmark.formatter.NodeFormatterContext context