mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 21:35:10 +00:00
[ADD/WIP] Basic XEP-0393 support.
Still needs lots of work. Did I fail to mention I _hate_ HTML?
This commit is contained in:
parent
94cba7acf0
commit
771c3271ad
10 changed files with 473 additions and 9 deletions
|
|
@ -99,7 +99,7 @@ XMLDecode(Stream *stream, bool autofree)
|
|||
{
|
||||
continue;
|
||||
}
|
||||
XMLFreeElement(e);
|
||||
//XMLFreeElement(e);
|
||||
}
|
||||
ArrayFree(stack);
|
||||
XMLFreeLexer(lexer);
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue