mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 19:55:10 +00:00
[ADD/MOD/WIP] Mess with lander, try to get quotes
Still WIP-tier for the latter.
This commit is contained in:
parent
1103425912
commit
41a0ae20ea
3 changed files with 188 additions and 98 deletions
|
|
@ -98,10 +98,10 @@ CreateStaticView(char *str)
|
|||
return view;
|
||||
}
|
||||
static bool
|
||||
IdentifySpan(char span_tag, StrView in, StrView *view)
|
||||
IdentifySpans(char span_tag, char end_tag, StrView in, StrView *view)
|
||||
{
|
||||
size_t length;
|
||||
bool found = false;
|
||||
bool found = false, equal, flag;
|
||||
char prev = '\0';
|
||||
if (in.start >= in.end)
|
||||
{
|
||||
|
|
@ -112,7 +112,10 @@ IdentifySpan(char span_tag, StrView in, StrView *view)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (*in.start != span_tag || isspace(*(in.start + 1)))
|
||||
equal = span_tag == end_tag;
|
||||
|
||||
flag = equal && isspace(*(in.start + 1));
|
||||
if (*in.start != span_tag || flag)
|
||||
{
|
||||
/* The opening styling directive MUST NOT be followed
|
||||
* by a whitespace character */
|
||||
|
|
@ -123,7 +126,7 @@ IdentifySpan(char span_tag, StrView in, StrView *view)
|
|||
|
||||
for (length = 0; ViewLength(in) > 0; length++, in.start++)
|
||||
{
|
||||
if (*in.start == span_tag)
|
||||
if (*in.start == end_tag)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
|
|
@ -131,7 +134,7 @@ IdentifySpan(char span_tag, StrView in, StrView *view)
|
|||
|
||||
prev = *in.start;
|
||||
}
|
||||
if (!found || !length || (prev && isspace(prev)))
|
||||
if (!found || !length || (prev && equal && isspace(prev)))
|
||||
{
|
||||
/* the closing styling directive MUST NOT be preceeded
|
||||
* by a whitespace character. */
|
||||
|
|
@ -141,6 +144,7 @@ IdentifySpan(char span_tag, StrView in, StrView *view)
|
|||
view->end = in.start;
|
||||
return true;
|
||||
}
|
||||
#define IdentifySpan(span_tag, in, view) IdentifySpans(span_tag, span_tag, in, view)
|
||||
|
||||
|
||||
static void
|
||||
|
|
@ -155,12 +159,14 @@ XEP393Decode(StrView view, XEP393Element *root)
|
|||
textview.end = subview.start;
|
||||
for (; subview.start < subview.end; subview.start++)
|
||||
{
|
||||
bool sol = false;
|
||||
StrView span_view;
|
||||
managed = false;
|
||||
curr = *subview.start;
|
||||
if (prev == '\0' || prev == '\n')
|
||||
{
|
||||
/* TODO: Start of line, start parsing blocks. */
|
||||
sol = true;
|
||||
}
|
||||
#define Spanify(xep_symbol) \
|
||||
managed = true; \
|
||||
|
|
@ -195,6 +201,11 @@ XEP393Decode(StrView view, XEP393Element *root)
|
|||
{
|
||||
Spanify(XEP393_MONO);
|
||||
}
|
||||
else if (sol && IdentifySpans('>', '\n', subview, &span_view))
|
||||
{
|
||||
/* TODO: This doesnt work with more than one line of quotes. */
|
||||
Spanify(XEP393_QUOT);
|
||||
}
|
||||
else if (curr == '\n')
|
||||
{
|
||||
/* TODO: Remove this */
|
||||
|
|
@ -259,6 +270,10 @@ ShoveXML(XEP393Element *element, XMLElement *xmlparent)
|
|||
case XEP393_NL:
|
||||
XMLAddChild(xmlparent, XMLCreateTag("br"));
|
||||
break;
|
||||
case XEP393_QUOT:
|
||||
head = XMLCreateTag("blockquote");
|
||||
XMLAddChild(xmlparent, head);
|
||||
break;
|
||||
case XEP393_EMPH:
|
||||
head = XMLCreateTag("strong");
|
||||
XMLAddChild(xmlparent, head);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue