[ADD/WIP] Basic XEP-0393 support.

Still needs lots of work. Did I fail to mention I _hate_ HTML?
This commit is contained in:
LDA 2024-06-24 18:26:08 +02:00
commit 771c3271ad
10 changed files with 473 additions and 9 deletions

View file

@ -99,7 +99,7 @@ XMLDecode(Stream *stream, bool autofree)
{
continue;
}
XMLFreeElement(e);
//XMLFreeElement(e);
}
ArrayFree(stack);
XMLFreeLexer(lexer);

View file

@ -138,6 +138,7 @@ XMLCrank(XMLexer *lexer)
return NULL;
}
event = XMLCreateRelax(lexer);
//Log(LOG_INFO, "A %d", lexer->state);
switch (lexer->state)
{
@ -213,13 +214,16 @@ XMLCrank(XMLexer *lexer)
break;
case XML_STATE_ATTR:
attrname = XMLParseName(lexer);
//Log(LOG_INFO, "A %d %s", lexer->state, attrname);
if (!attrname)
{
/* TODO: Throw error */
}
XMLPushElement(lexer, attrname);
//Log(LOG_INFO, "Reading props...");
props = XMLReadProps(lexer);
//Log(LOG_INFO, "Read props!");
XMLSkipSpace(lexer);
if (XMLookahead(lexer, "/>", true))
@ -516,6 +520,7 @@ XMLReadProps(XMLexer *lexer)
/* A lack of name is totally excepted */
break;
}
//Log(LOG_INFO, "K=%s...", name);
value = StrDuplicate("");
if (XMLookahead(lexer, "=", true))
@ -719,18 +724,23 @@ XMLParseAttQuote(XMLexer *lexer)
while ((c = XMLGetc(lexer)))
{
//Log(LOG_INFO, "E1=%c", c);
if (c == '&')
{
char *code = NULL;
int c2;
int p2 = XMLInitialiseBuffer(lexer);
while ((c2 = XMLGetc(lexer)))
while ((c2 = XMLGetc(lexer)) && c2 != EOF)
{
if (c2 == ';')
{
break;
}
}
if (c2 != ';')
{
XMLReset(lexer, p2);
}
}
else if (!IsNormalQ(c))
{
@ -759,18 +769,23 @@ XMLParseAttDouble(XMLexer *lexer)
while ((c = XMLGetc(lexer)))
{
//Log(LOG_INFO, "E2=%c", c);
if (c == '&')
{
char *code = NULL;
int c2;
int p2 = XMLInitialiseBuffer(lexer);
while ((c2 = XMLGetc(lexer)))
while ((c2 = XMLGetc(lexer)) && c2 != EOF)
{
if (c2 == ';')
{
break;
}
}
if (c2 != ';')
{
XMLReset(lexer, p2);
}
continue;
}
else if (!IsNormalD(c))