clear terminal backlog in ++prep

This commit is contained in:
Philip C Monk 2014-12-05 16:09:46 -05:00
parent c77dfba7dc
commit cef42f4d21
6 changed files with 244 additions and 194 deletions

View File

@ -251,6 +251,7 @@ J_F_OFILES_UT=\
j/f/ut_wrap.o
J_G_OFILES=\
j/g/dawn.o \
j/g/sqar.o
J_OFILES=\

View File

@ -515,6 +515,7 @@
# define c3__htcn c3_s4('h','t','c','n')
# define c3__htls c3_s4('h','t','l','s')
# define c3__html c3_s4('h','t','m','l')
# define c3__htmt c3_s4('h','t','m','t')
# define c3__http c3_s4('h','t','t','p')
# define c3__hume c3_s4('h','u','m','e')
# define c3__hunk c3_s4('h','u','n','k')

View File

@ -199,4 +199,5 @@
/** Tier 7.
**/
u3_noun u3wg_dawn(u3_noun);
u3_noun u3wg_sqar(u3_noun);

228
j/g/dawn.c Normal file
View File

@ -0,0 +1,228 @@
/* j/g/dawn.c
**
** This file is in the public domain.
*/
#include "all.h"
#include <cmark.h>
#include <node.h>
u3_noun node_to_noun(cmark_node * nod);
u3_noun list_elems_to_noun(cmark_node * nod)
{
u3_noun elems = u3_nul;
cmark_node * child;
for ( child = nod->last_child; child; child = child->prev ) {
elems = u3nc(node_to_noun(child),elems);
}
return elems;
}
u3_noun document_to_noun(cmark_node * nod)
{
return list_elems_to_noun(nod);
}
u3_noun block_quote_to_noun(cmark_node * nod)
{
return u3nc(u3nc(c3__bloq,u3_nul),list_elems_to_noun(nod));
}
u3_noun list_to_noun(cmark_node * nod)
{
return
u3nc(
u3nt(
c3__list,
__(nod->as.list.tight),
(nod->as.list.list_type == CMARK_BULLET_LIST)
? nod->as.list.bullet_char /* XX convert? */
: u3nc(nod->as.list.start,
(nod->as.list.delimiter == CMARK_PERIOD_DELIM)
? '.'
: ')')),
list_elems_to_noun(nod));
}
u3_noun list_item_to_noun(cmark_node * nod)
{
return u3nc(u3nc(c3__item,u3_nul),list_elems_to_noun(nod));
}
u3_noun code_block_to_noun(cmark_node * nod)
{
u3_atom str = u3i_string(nod->string_content.ptr); /* XX u3i_bytes */
u3_noun res =
u3nt(
c3__code,
nod->as.code.fenced
? u3nq(
u3_nul,
nod->as.code.fence_char,
nod->as.code.fence_length,
u3i_tape(nod->as.code.info.ptr)
)
: u3_nul,
u3qe_lore(str));
u3z(str);
return res;
}
u3_noun html_to_noun(cmark_node * nod)
{
u3_atom str = u3i_string(nod->string_content.ptr); /* XX u3i_bytes */
u3_noun res = u3nc(c3__html, u3qe_lore(str));
u3z(str);
return res;
}
u3_noun paragraph_to_noun(cmark_node * nod)
{
return u3nc(c3__para, list_elems_to_noun(nod));
}
u3_noun header_to_noun(cmark_node * nod)
{
/* see also nod->as.header.setext */
return u3nt(c3__head, nod->as.header.level, list_elems_to_noun(nod));
}
u3_noun hrule_to_noun(cmark_node * nod)
{
return u3nc(c3__hrul, u3_nul);
}
u3_noun reference_def_to_noun(cmark_node * nod)
{
return u3nc(c3__defn, u3_nul);
}
u3_noun text_to_noun(cmark_node * nod)
{
return u3nc(u3_blip, u3i_tape(cmark_chunk_to_cstr(&nod->as.literal)));
}
u3_noun softbreak_to_noun(cmark_node * nod) // XXX
{
return u3nt(0, 10, 0);
}
u3_noun linebreak_to_noun(cmark_node * nod)
{
return u3nc(c3__line, u3_nul);
}
u3_noun inline_code_to_noun(cmark_node * nod)
{
return u3nc(c3__code, u3i_tape(cmark_chunk_to_cstr(&nod->as.literal)));
}
u3_noun inline_html_to_noun(cmark_node * nod) // XXX
{
return u3nc(c3__htmt, u3i_string(cmark_chunk_to_cstr(&nod->as.literal)));
}
u3_noun emph_to_noun(cmark_node * nod)
{
return u3nc(u3nc(c3__emph, c3n), list_elems_to_noun(nod));
}
u3_noun strong_to_noun(cmark_node * nod)
{
return u3nc(u3nc(c3__emph, c3y), list_elems_to_noun(nod));
}
u3_noun link_to_noun(cmark_node * nod)
{
return
u3nc(
u3nt(
c3__link,
nod->as.link.url
? u3i_tape(nod->as.link.url)
: u3_nul,
nod->as.link.title
? u3nc(u3_nul, u3i_tape(nod->as.link.title))
: u3_nul),
list_elems_to_noun(nod));
}
u3_noun image_to_noun(cmark_node * nod)
{
return
u3nc(
u3nt(
c3__blot,
u3i_tape(nod->as.link.url),
nod->as.link.title
? u3nc(u3_nul, u3i_tape(nod->as.link.title))
: u3_nul),
list_elems_to_noun(nod));
}
u3_noun node_to_noun(cmark_node * nod)
{
if (!nod) {
fprintf(stderr, "markdown null node");
return u3m_bail(c3__fail);
}
switch ( nod->type ) {
/* Block */
case CMARK_NODE_DOCUMENT: return document_to_noun(nod);
case CMARK_NODE_BLOCK_QUOTE: return block_quote_to_noun(nod);
case CMARK_NODE_LIST: return list_to_noun(nod);
case CMARK_NODE_LIST_ITEM: return list_item_to_noun(nod);
case CMARK_NODE_CODE_BLOCK: return code_block_to_noun(nod);
case CMARK_NODE_HTML: return html_to_noun(nod);
case CMARK_NODE_PARAGRAPH: return paragraph_to_noun(nod);
case CMARK_NODE_HEADER: return header_to_noun(nod);
case CMARK_NODE_HRULE: return hrule_to_noun(nod);
case CMARK_NODE_REFERENCE_DEF: return reference_def_to_noun(nod);
/* Inline */
case CMARK_NODE_TEXT: return text_to_noun(nod);
case CMARK_NODE_SOFTBREAK: return softbreak_to_noun(nod);
case CMARK_NODE_LINEBREAK: return linebreak_to_noun(nod);
case CMARK_NODE_INLINE_CODE: return inline_code_to_noun(nod);
case CMARK_NODE_INLINE_HTML: return inline_html_to_noun(nod);
case CMARK_NODE_EMPH: return emph_to_noun(nod);
case CMARK_NODE_STRONG: return strong_to_noun(nod);
case CMARK_NODE_LINK: return link_to_noun(nod);
case CMARK_NODE_IMAGE: return image_to_noun(nod);
default: fprintf(stderr, "bad markdown parsing");
return u3m_bail(c3__fail);
}
}
/* functions
*/
u3_noun
u3qg_dawn(u3_atom a)
{
c3_c *tex = u3r_string(a);
fprintf(stderr,"parsing\r\n");
/* XX better strlen */
cmark_node * doc = cmark_parse_document(tex, strlen(tex));
fprintf(stderr,"parsed\r\n");
fprintf(stderr,"nouning\r\n");
u3_noun res = document_to_noun(doc);
fprintf(stderr,"nouned\r\n");
// free out, tex?
return res;
}
u3_noun
u3wg_dawn(u3_noun cor)
{
u3_noun a;
if ( (u3_none == (a = u3r_at(u3x_sam, cor))) ||
(c3n == u3ud(a)) )
{
return u3m_bail(c3__exit);
} else {
return u3qg_dawn(a);
}
}

View File

@ -3,209 +3,21 @@
** This file is in the public domain.
*/
#include "all.h"
#include <cmark.h>
#include <node.h>
u3_noun node_to_noun(cmark_node * nod);
u3_noun list_elems_to_noun(cmark_node * nod)
{
u3_noun elems = u3_nul;
cmark_node * child;
for ( child = nod->last_child; child; child = child->prev ) {
elems = u3nc(node_to_noun(child),elems);
}
return elems;
}
u3_noun document_to_noun(cmark_node * nod)
{
return list_elems_to_noun(nod);
}
u3_noun block_quote_to_noun(cmark_node * nod)
{
return u3nc(u3nc(c3__bloq,u3_nul),list_elems_to_noun(nod));
}
u3_noun list_to_noun(cmark_node * nod)
{
return
u3nc(
u3nt(
c3__list,
__(nod->as.list.tight),
(nod->as.list.list_type == CMARK_BULLET_LIST)
? nod->as.list.bullet_char /* XX convert? */
: u3nc(nod->as.list.start,
(nod->as.list.delimiter == CMARK_PERIOD_DELIM)
? '.'
: ')')),
list_elems_to_noun(nod));
}
u3_noun list_item_to_noun(cmark_node * nod)
{
return u3nc(u3nc(c3__item,u3_nul),list_elems_to_noun(nod));
}
u3_noun code_block_to_noun(cmark_node * nod)
{
u3_atom str = u3i_string(nod->string_content.ptr); /* XX u3i_bytes */
u3_noun res =
u3nt(
c3__code,
nod->as.code.fenced
? u3nq(
u3_nul,
nod->as.code.fence_char,
nod->as.code.fence_length,
u3i_tape(nod->as.code.info.ptr)
)
: u3_nul,
u3qe_lore(str));
u3z(str);
return res;
}
u3_noun html_to_noun(cmark_node * nod)
{
u3_atom str = u3i_string(nod->string_content.ptr); /* XX u3i_bytes */
u3_noun res = u3nc(c3__html, u3qe_lore(str));
u3z(str);
return res;
}
u3_noun paragraph_to_noun(cmark_node * nod)
{
return u3nc(c3__para, list_elems_to_noun(nod));
}
u3_noun header_to_noun(cmark_node * nod)
{
/* see also nod->as.header.setext */
return u3nt(c3__head, nod->as.header.level, list_elems_to_noun(nod));
}
u3_noun hrule_to_noun(cmark_node * nod)
{
return u3nc(c3__hrul, u3_nul);
}
u3_noun reference_def_to_noun(cmark_node * nod)
{
return u3nc(c3__defn, u3_nul);
}
u3_noun text_to_noun(cmark_node * nod)
{
return u3nc(u3_blip, u3i_tape(cmark_chunk_to_cstr(&nod->as.literal)));
}
u3_noun softbreak_to_noun(cmark_node * nod) // XXX
{
return u3nt(0, 10, 0);
}
u3_noun linebreak_to_noun(cmark_node * nod)
{
return u3nc(c3__line, u3_nul);
}
u3_noun inline_code_to_noun(cmark_node * nod)
{
return u3nc(c3__code, u3i_tape(cmark_chunk_to_cstr(&nod->as.literal)));
}
u3_noun inline_html_to_noun(cmark_node * nod) // XXX
{
return text_to_noun(nod);
}
u3_noun emph_to_noun(cmark_node * nod)
{
return u3nc(u3nc(c3__emph, c3n), list_elems_to_noun(nod));
}
u3_noun strong_to_noun(cmark_node * nod)
{
return u3nc(u3nc(c3__emph, c3y), list_elems_to_noun(nod));
}
u3_noun link_to_noun(cmark_node * nod)
{
return
u3nc(
u3nt(
c3__link,
u3i_tape(nod->as.link.url),
nod->as.link.title
? u3nc(u3_nul, u3i_tape(nod->as.link.title))
: u3_nul),
list_elems_to_noun(nod));
}
u3_noun image_to_noun(cmark_node * nod)
{
return
u3nc(
u3nt(
c3__blot,
u3i_tape(nod->as.link.url),
nod->as.link.title
? u3nc(u3_nul, u3i_tape(nod->as.link.title))
: u3_nul),
list_elems_to_noun(nod));
}
u3_noun node_to_noun(cmark_node * nod)
{
if (!nod) {
fprintf(stderr, "markdown null node");
return u3m_bail(c3__fail);
}
switch ( nod->type ) {
/* Block */
case CMARK_NODE_DOCUMENT: return document_to_noun(nod);
case CMARK_NODE_BLOCK_QUOTE: return block_quote_to_noun(nod);
case CMARK_NODE_LIST: return list_to_noun(nod);
case CMARK_NODE_LIST_ITEM: return list_item_to_noun(nod);
case CMARK_NODE_CODE_BLOCK: return code_block_to_noun(nod);
case CMARK_NODE_HTML: return html_to_noun(nod);
case CMARK_NODE_PARAGRAPH: return paragraph_to_noun(nod);
case CMARK_NODE_HEADER: return header_to_noun(nod);
case CMARK_NODE_HRULE: return hrule_to_noun(nod);
case CMARK_NODE_REFERENCE_DEF: return reference_def_to_noun(nod);
/* Inline */
case CMARK_NODE_TEXT: return text_to_noun(nod);
case CMARK_NODE_SOFTBREAK: return softbreak_to_noun(nod);
case CMARK_NODE_LINEBREAK: return linebreak_to_noun(nod);
case CMARK_NODE_INLINE_CODE: return inline_code_to_noun(nod);
case CMARK_NODE_INLINE_HTML: return inline_html_to_noun(nod);
case CMARK_NODE_EMPH: return emph_to_noun(nod);
case CMARK_NODE_STRONG: return strong_to_noun(nod);
case CMARK_NODE_LINK: return link_to_noun(nod);
case CMARK_NODE_IMAGE: return image_to_noun(nod);
default: fprintf(stderr, "bad markdown parsing");
return u3m_bail(c3__fail);
}
}
/* functions
*/
u3_noun
u3qg_sqar(u3_atom a)
{
c3_c *tex = u3r_string(a);
mpz_t a_mp;
/* XX better strlen */
cmark_node * doc = cmark_parse_document(tex, strlen(tex));
fprintf(stderr, "C squared %d!\r\n", a);
u3_noun res = document_to_noun(doc);
// free out, tex?
return res;
u3r_mp(a_mp, a);
mpz_mul(a_mp, a_mp, a_mp);
return u3i_mp(a_mp);
}
u3_noun
u3wg_sqar(u3_noun cor)

View File

@ -339,6 +339,12 @@ static u3j_core _util_d[] =
{}
};
static u3j_harm _utyl_dawn_a[] = {{".2", u3wg_dawn, c3y}, {}};
static u3j_core _utyl_d[] =
{ { "dawn", _utyl_dawn_a },
{}
};
#if 0
static u3j_core _zuse_d[] =
{ { "util", 0, _util_d },
@ -348,6 +354,7 @@ static u3j_core _zuse_d[] =
static u3j_core _arvo_d[] =
{ { "util", 0, _util_d },
{ "utyl", 0, _utyl_d },
{}
};