From 8d1dc09c54b2c678d5b6ac45b7296eff72167655 Mon Sep 17 00:00:00 2001 From: LDA Date: Thu, 1 Aug 2024 19:17:43 +0200 Subject: [PATCH] [FIX/WIP] Fix leak, add formatting chars on XML --- src/XEP-0393.c | 56 +++++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/src/XEP-0393.c b/src/XEP-0393.c index 0c6cabc..22875a3 100644 --- a/src/XEP-0393.c +++ b/src/XEP-0393.c @@ -183,7 +183,6 @@ ParseLine(XEP393Element *elem, StringRect line) size_t ch_idx, chars = StrViewChars(line, 0); size_t text_start = 0; size_t i; - bool managed = false; for (ch_idx = 0; ch_idx < chars; ch_idx++) { @@ -210,7 +209,6 @@ ParseLine(XEP393Element *elem, StringRect line) } \ line_item = CreateElementVessel(elem, XEP393_TEXT); \ line_item->text_data = gen; \ - managed = true; \ } \ \ span_item = CreateElementVessel(elem, sym); \ @@ -227,7 +225,6 @@ ParseLine(XEP393Element *elem, StringRect line) /* TODO: Can we troll and introduce | as a Parsee extension? */ } - if (!managed) { char *temp, *gen = NULL, chara[2] = { 0, '\0' }; for (i = text_start; i < chars; i++) @@ -307,27 +304,31 @@ ShoveXML(XEP393Element *element, XMLElement *xmlparent) case XEP393_ITALIC: head = XMLCreateTag("i"); XMLAddChild(xmlparent, head); + XMLAddChild(head, XMLCreateText("_")); + break; + case XEP393_MONO: + head = XMLCreateTag("code"); + XMLAddChild(xmlparent, head); + XMLAddChild(head, XMLCreateText("`")); + break; + case XEP393_SRKE: + head = XMLCreateTag("s"); + XMLAddChild(xmlparent, head); + XMLAddChild(head, XMLCreateText("~")); + break; + case XEP393_EMPH: + head = XMLCreateTag("strong"); + XMLAddChild(xmlparent, head); + XMLAddChild(head, XMLCreateText("*")); break; case XEP393_LINE: head = XMLCreateTag("p"); XMLAddChild(xmlparent, head); break; - case XEP393_SRKE: - head = XMLCreateTag("s"); - XMLAddChild(xmlparent, head); - break; case XEP393_QUOT: head = XMLCreateTag("blockquote"); XMLAddChild(xmlparent, head); break; - case XEP393_EMPH: - head = XMLCreateTag("strong"); - XMLAddChild(xmlparent, head); - break; - case XEP393_MONO: - head = XMLCreateTag("code"); - XMLAddChild(xmlparent, head); - break; default: break; } if (ArraySize(element->children) == 0 && @@ -340,16 +341,25 @@ ShoveXML(XEP393Element *element, XMLElement *xmlparent) for (i = 0; i < ArraySize(element->children); i++) { XEP393Element *sub = ArrayGet(element->children, i); - if (sub->type == XEP393_TEXT && !sub->text_data) - { - XMLFreeElement(ArrayDelete( - xmlparent->children, - ArraySize(xmlparent->children) - 1 - )); - continue; - } ShoveXML(sub, head); } + + switch (element->type) + { + case XEP393_ITALIC: + XMLAddChild(head, XMLCreateText("_")); + break; + case XEP393_MONO: + XMLAddChild(head, XMLCreateText("`")); + break; + case XEP393_SRKE: + XMLAddChild(head, XMLCreateText("~")); + break; + case XEP393_EMPH: + XMLAddChild(head, XMLCreateText("*")); + break; + default: break; + } } #include