package com.vladsch.flexmark.ext.typographic;

import com.vladsch.flexmark.util.ast.DoNotAttributeDecorate;
import com.vladsch.flexmark.util.ast.Node;
import com.vladsch.flexmark.util.ast.TypographicText;
import com.vladsch.flexmark.util.sequence.BasedSequence;
import com.vladsch.flexmark.util.sequence.builder.ISequenceBuilder;
import org.jetbrains.annotations.NotNull;

import static com.vladsch.flexmark.util.misc.BitFieldSet.any;

/**
 * A TypographicSmarts node
 */
public class TypographicSmarts extends Node implements DoNotAttributeDecorate, TypographicText {
    private String typographicText;

    public TypographicSmarts() {
    }

    public TypographicSmarts(BasedSequence chars) {
        super(chars);
    }

    public TypographicSmarts(String typographicText) {
        this.typographicText = typographicText;
    }

    public TypographicSmarts(BasedSequence chars, String typographicText) {
        super(chars);
        this.typographicText = typographicText;
    }

    @Override
    public boolean collectText(ISequenceBuilder<? extends ISequenceBuilder<?, BasedSequence>, BasedSequence> out, int flags) {
        out.append(getChars());
        return false;
    }

    @Override
    public void getAstExtra(@NotNull StringBuilder out) {
        out.append(" typographic: ").append(typographicText).append(" ");
    }

    public String getTypographicText() {
        return typographicText;
    }

    public void setTypographicText(String typographicText) {
        this.typographicText = typographicText;
    }

    @NotNull
    @Override
    public BasedSequence[] getSegments() {
        return EMPTY_SEGMENTS;
    }

    @NotNull
    @Override
    protected String toStringAttributes() {
        return "text=" + getChars();
    }
}

@@ -255,16 +255,130 @@
 quence;%0A
+import com.vladsch.flexmark.util.sequence.Escaping;%0Aimport com.vladsch.flexmark.util.sequence.ReplacedTextMapper;%0A
 import c
@@ -1250,31 +1250,297 @@
     
-out.append(getChars());
+if (any(flags, F_NODE_TEXT)) %7B%0A            out.append(getChars());%0A        %7D else %7B%0A            ReplacedTextMapper textMapper = new ReplacedTextMapper(getChars());%0A            BasedSequence unescaped = Escaping.unescape(getChars(), textMapper);%0A            out.append(unescaped);%0A        %7D
 %0A   

handle unescaped and raw text collection in typographic smarts