xml_GNode*
xml_pdoc_c_doc_old (xml_GNode* node)
{
if (! node) return node;
g_assert (node->name && strstr (node->name, "comment"));
g_assert (node->text && node->text->str[node->off] == '/');
if (node->off + 4 > node->end) return node;
___ gchar* txt = node->text->str+node->off;
___ gssize len = node->end - node->off;
___ gchar* end = memchr (txt, '\n', len);
if (! end) { if (txt[1]=='/') end = txt+len; else end = txt+len-2; } |
if (txt+3 > end) goto nofirstline;
if (g_ascii_isspace(txt[3]) && txt[1] == txt[2])
{
xml_node_attribute_add (node, "doc", "");
xml_tree_add3 (node, "doc", txt+3, end);
} |
else if (g_ascii_isspace(txt[3]) && strchr ("!$#%=:", txt[3]))
{
xml_node_attribute_add_value (node, "docs", g_strndup (&txt[3], 1));
xml_tree_add3 (node, "docs", txt+3, end);
} | else
{
xml_node_attribute_add (node, "info", "");
xml_tree_add3 (node, "info", txt+2, end);
} |
nofirstline:
if (end+2 >= txt+len) return node;
# if 0
xml_path_pcre_add (node, 0,
"?" "(\\n\\s*[*]\\s)[^\\n]*(\\1[^\\n])*", "para", 0);
# elif 0
xml_path_pcre_add_with (node,0,
"\\n(\\s*[*])\\s[^\\n]*(?:\\n\\1(?=\\s)[^\\n]*)*",
add1, (gpointer) "para", 0);
# else
___ xml_GNode *paranode = 0, *codenode = 0;
___ xml_GNode *brkA, *brkE;
brkA = node->children; if (! brkA) goto nopara;
if (! xml_node_hasname_eq_(brkA, "br"))
brkA = xml_node_next_with_name (node->children, "br");
if (! brkA) goto nopara;
while ((brkE = xml_node_next_with_name (brkA, "br")))
{
g_assert (brkA != brkE);
if (0) g_printerr ("[%s:%i]", brkE->name, brkE->off);
if (ispara (brkA->text->str, brkA->end, brkE->off))
{
xml_node_save_text_to_attribute (
xml_tree_add3 (node, "J", brkA->text->str + brkA->end,
strchr (brkA->text->str + brkA->end, '*')+1),
"text", 0);
if (! paranode) paranode = brkA;
if (codenode)
{ xml_node_group_inner_new (codenode, brkA, "code"); codenode=0; } |
brkA = brkE; continue;
} | else{
g_assert (paranode != brkA);
if (! codenode) codenode = brkA;
if (paranode)
{ xml_node_group_inner_new (paranode, brkA, "para"); paranode=0; } |
brkA = brkE; continue;
} |
} |
____;
if (codenode && codenode->next) xml_node_group_inner_new (
codenode, xml_node_next_or_last (codenode, "br"), "code");
if (paranode && paranode->next) xml_node_group_inner_new (
paranode, xml_node_next_or_last (paranode, "br"), "para");
____;
nopara:
# endif
return node;
____;____;____;
} |
|