]> granicus.if.org Git - multimarkdown/commitdiff
FIXED: Fix edge case with superscripts
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Tue, 14 Mar 2017 22:44:54 +0000 (18:44 -0400)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Tue, 14 Mar 2017 22:44:54 +0000 (18:44 -0400)
Sources/libMultiMarkdown/mmd.c

index 35a61845bfa47e5b6d228f0bb49342f81ca85557..295dd581f4b90b20af38988bd70f0c510f460be3 100644 (file)
@@ -1316,12 +1316,17 @@ void mmd_assign_ambidextrous_tokens_in_block(mmd_engine * e, token * block, cons
                                                t->can_close = 0;
 
                                                // Shift next token right and move those characters as child node
-                                               if ((t->next != NULL) && ((t->next->type == TEXT_PLAIN) || (t->next->type == TEXT_NUMBER_POSS_LIST))) {
-                                                       t->next->start += t->len - 1;
-                                                       t->next->len -= t->len - 1;
+                                               // It's possible that one (or more?) tokens are entirely subsumed.
+                                               while (t->next && t->next->start + t->next->len < offset) {
+                                                       tokens_prune(t->next, t->next);
+                                               }
 
-                                                       t->child = token_new(TEXT_PLAIN, t->start + 1, t->len - 1);
+                                               if ((t->next != NULL) && ((t->next->type == TEXT_PLAIN) || (t->next->type == TEXT_NUMBER_POSS_LIST))) {
+                                                       t->next->len = t->next->start + t->next->len - offset;
+                                                       t->next->start = offset;
                                                }
+
+                                               t->child = token_new(TEXT_PLAIN, t->start + 1, t->len - 1);
                                        }
                                }