[ADD/MOD/WIP] Mess with lander, try to get quotes

Still WIP-tier for the latter.
This commit is contained in:
LDA 2024-07-25 21:44:23 +02:00
commit 41a0ae20ea
3 changed files with 188 additions and 98 deletions

View file

@ -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);