mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 21:15:11 +00:00
[MOD] Get rid of childrenless tags in XMLd text
This commit is contained in:
parent
3c5b9aac82
commit
74f3fbdccc
3 changed files with 51 additions and 0 deletions
|
|
@ -294,6 +294,7 @@ ShoveXML(XEP393Element *element, XMLElement *xmlparent)
|
||||||
{
|
{
|
||||||
XMLElement *head = xmlparent;
|
XMLElement *head = xmlparent;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
bool par = false;
|
||||||
if (!element || !xmlparent)
|
if (!element || !xmlparent)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|
@ -324,6 +325,7 @@ ShoveXML(XEP393Element *element, XMLElement *xmlparent)
|
||||||
case XEP393_LINE:
|
case XEP393_LINE:
|
||||||
head = XMLCreateTag("p");
|
head = XMLCreateTag("p");
|
||||||
XMLAddChild(xmlparent, head);
|
XMLAddChild(xmlparent, head);
|
||||||
|
par = true;
|
||||||
break;
|
break;
|
||||||
case XEP393_QUOT:
|
case XEP393_QUOT:
|
||||||
head = XMLCreateTag("blockquote");
|
head = XMLCreateTag("blockquote");
|
||||||
|
|
@ -360,6 +362,17 @@ ShoveXML(XEP393Element *element, XMLElement *xmlparent)
|
||||||
break;
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* NOTE: Hack to get rid of stranded <p/>-tags with no
|
||||||
|
* children. */
|
||||||
|
if (par && ArraySize(head->children) == 0)
|
||||||
|
{
|
||||||
|
ArrayDelete(
|
||||||
|
xmlparent->children,
|
||||||
|
ArraySize(xmlparent->children) - 1
|
||||||
|
);
|
||||||
|
XMLFreeElement(head);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <StringStream.h>
|
#include <StringStream.h>
|
||||||
|
|
|
||||||
|
|
@ -162,3 +162,40 @@ XMLookForTKV(XMLElement *parent, char *tag, char *k, char *v)
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
XMLElement *
|
||||||
|
XMLCopy(XMLElement *original)
|
||||||
|
{
|
||||||
|
XMLElement *ret = NULL;
|
||||||
|
if (!original)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = Malloc(sizeof(*ret));
|
||||||
|
ret->type = original->type;
|
||||||
|
|
||||||
|
ret->name = StrDuplicate(original->name);
|
||||||
|
ret->data = StrDuplicate(original->data);
|
||||||
|
|
||||||
|
if (original->children)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
ret->children = ArrayCreate();
|
||||||
|
|
||||||
|
for (i = 0; i < ArraySize(ret->children); i++)
|
||||||
|
{
|
||||||
|
ArrayAdd(ret->children, XMLCopy(ArrayGet(original->children, i)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (original->attrs)
|
||||||
|
{
|
||||||
|
char *name, *value;
|
||||||
|
ret->attrs = HashMapCreate();
|
||||||
|
while (HashMapIterate(original->attrs, &name, (void **) &value))
|
||||||
|
{
|
||||||
|
HashMapSet(ret->attrs, name, StrDuplicate(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ typedef struct XMLElement {
|
||||||
extern XMLElement * XMLCDecode(Stream *stream, bool autofree, bool html);
|
extern XMLElement * XMLCDecode(Stream *stream, bool autofree, bool html);
|
||||||
#define XMLDecode(stream, autofree) XMLCDecode(stream, autofree, false)
|
#define XMLDecode(stream, autofree) XMLCDecode(stream, autofree, false)
|
||||||
|
|
||||||
|
extern XMLElement * XMLCopy(XMLElement *original);
|
||||||
extern XMLElement * XMLCreateTag(char *name);
|
extern XMLElement * XMLCreateTag(char *name);
|
||||||
extern XMLElement * XMLCreateText(char *data);
|
extern XMLElement * XMLCreateText(char *data);
|
||||||
extern void XMLAddAttr(XMLElement *element, char *key, char *val);
|
extern void XMLAddAttr(XMLElement *element, char *key, char *val);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue