aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java52
1 files changed, 39 insertions, 13 deletions
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;
}
}
}