mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-14 00:35:11 +00:00
[ADD/WIP] Begin XMPPwerk
The fuck is a stanza? Presence? Why did Prosody not tell me I'm an idiot when I clearly made a MALFORMED XML document? This and much more, in the next commit!
This commit is contained in:
parent
f7eace20c7
commit
868f0e4d9c
7 changed files with 207 additions and 11 deletions
|
|
@ -4,7 +4,6 @@
|
|||
#include <Cytoplasm/Memory.h>
|
||||
#include <Cytoplasm/Array.h>
|
||||
#include <Cytoplasm/Str.h>
|
||||
#include <Cytoplasm/Log.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
|
@ -24,7 +23,8 @@ struct XMLexer {
|
|||
|
||||
XML_STATE_ATTR,
|
||||
XML_STATE_ATTRHEAD_PROP,
|
||||
XML_STATE_ATTRTAIL
|
||||
XML_STATE_ATTRTAIL,
|
||||
XML_STATE_PI
|
||||
} state;
|
||||
|
||||
struct {
|
||||
|
|
@ -161,6 +161,17 @@ XMLCrank(XMLexer *lexer)
|
|||
lexer->state = XML_STATE_ATTRTAIL;
|
||||
break;
|
||||
}
|
||||
else if (XMLookahead(lexer, "<?", true))
|
||||
{
|
||||
if (lexer->data.str)
|
||||
{
|
||||
XMLFreeEvent(event);
|
||||
event = XMLCreateData(lexer);
|
||||
}
|
||||
|
||||
lexer->state = XML_STATE_PI;
|
||||
break;
|
||||
}
|
||||
else if (XMLookahead(lexer, "<", true))
|
||||
{
|
||||
if (lexer->data.str)
|
||||
|
|
@ -189,6 +200,14 @@ XMLCrank(XMLexer *lexer)
|
|||
return NULL;
|
||||
}
|
||||
break;
|
||||
case XML_STATE_PI:
|
||||
if (XMLookahead(lexer, "?>", true))
|
||||
{
|
||||
lexer->state = XML_STATE_NONE;
|
||||
break;
|
||||
}
|
||||
XMLGetc(lexer);
|
||||
break;
|
||||
case XML_STATE_ATTR:
|
||||
attrname = XMLParseName(lexer);
|
||||
if (!attrname)
|
||||
|
|
@ -250,7 +269,6 @@ XMLFreeEvent(XMLEvent *event)
|
|||
void *val;
|
||||
while (HashMapIterate(event->attrs, &key, &val))
|
||||
{
|
||||
Log(LOG_INFO, "Trying to free %s", val);
|
||||
Free(val);
|
||||
}
|
||||
HashMapFree(event->attrs);
|
||||
|
|
@ -640,6 +658,8 @@ XMLParseAttQuote(XMLexer *lexer)
|
|||
|
||||
point = XMLInitialiseBuffer(lexer);
|
||||
|
||||
/* TODO: My Prosody is actually trolling me.
|
||||
* GIVE ME A FUCKING STREAM ID YOU RETARD. */
|
||||
while ((c = XMLGetc(lexer)))
|
||||
{
|
||||
if (!IsNormalQ(c))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue