From 8ca2efa24445f8f1533f37b3e21afd3ea6218ccf Mon Sep 17 00:00:00 2001 From: Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> Date: Fri, 8 Mar 2024 17:46:46 -0500 Subject: Superscript richtext_json. Still some issues though. --- .../markdown/RichTextJSONConverter.java | 52 ++++++++++++++++------ 1 file changed, 39 insertions(+), 13 deletions(-) (limited to 'app/src/main/java/ml/docilealligator/infinityforreddit') diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java index 13cec317..199e6f94 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java @@ -123,6 +123,32 @@ public class RichTextJSONConverter implements Visitor { return null; } + @Nullable + private JSONArray getChildFormatArray(Node node) { + int formatNum = 0; + while (node != null && node.getFirstChild() != null) { + String className = node.getClass().getName(); + if (formatMap.containsKey(className)) { + formatNum += formatMap.get(className); + node = node.getFirstChild(); + } + } + + if (node instanceof Text) { + int start = textSB.length(); + textSB.append(((Text) node).getLiteral()); + if (formatNum > 0) { + JSONArray format = new JSONArray(); + format.put(formatNum); + format.put(start); + format.put(((Text) node).getLiteral().length()); + return format; + } + } + + return null; + } + @Override public void visit(BlockQuote blockQuote) { @@ -326,20 +352,20 @@ public class RichTextJSONConverter implements Visitor { @Override public void visit(CustomNode customNode) { + /* + Superscript can still has inline spans, thus checking children's next node until the end. + Superscript must use ^(), not ^ right now. + */ + Node child = customNode.getFirstChild(); + while (child != null) { + JSONArray format = getFormatArray(customNode); + if (format != null) { + formats.add(format); + } - } - - public void visit(Strikethrough strikethrough) { - JSONArray format = getFormatArray(strikethrough); - if (format != null) { - formats.add(format); - } - } - - public void visit(Superscript superscript) { - JSONArray format = getFormatArray(superscript); - if (format != null) { - formats.add(format); + Node next = child.getNext(); + child.unlink(); + child = next; } } } -- cgit v1.2.3