[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[6823] parsetexi update
From: |
Gavin D. Smith |
Subject: |
[6823] parsetexi update |
Date: |
Tue, 01 Dec 2015 23:18:35 +0000 |
Revision: 6823
http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=6823
Author: gavin
Date: 2015-12-01 23:18:34 +0000 (Tue, 01 Dec 2015)
Log Message:
-----------
parsetexi update
Modified Paths:
--------------
trunk/parsetexi/Parsetexi/lib/Parsetexi.pm
trunk/parsetexi/api.c
trunk/parsetexi/end_line.c
trunk/parsetexi/handle_commands.c
trunk/parsetexi/labels.c
Modified: trunk/parsetexi/Parsetexi/lib/Parsetexi.pm
===================================================================
--- trunk/parsetexi/Parsetexi/lib/Parsetexi.pm 2015-12-01 16:53:23 UTC (rev
6822)
+++ trunk/parsetexi/Parsetexi/lib/Parsetexi.pm 2015-12-01 23:18:34 UTC (rev
6823)
@@ -205,6 +205,7 @@
}
# 'level' is set in Parser.pm, but not under 'extra'.
+ # currently this isn't needed as level is set in api.c instead.
if (defined ($elt->{'extra'}) and defined $elt->{'extra'}{'level'}) {
$elt->{'level'} = $elt->{'extra'}{'level'};
}
Modified: trunk/parsetexi/api.c
===================================================================
--- trunk/parsetexi/api.c 2015-12-01 16:53:23 UTC (rev 6822)
+++ trunk/parsetexi/api.c 2015-12-01 23:18:34 UTC (rev 6823)
@@ -206,7 +206,9 @@
/* TODO: Same optimizations as for 'type'. */
}
- if (e->contents.number > 0)
+ if (e->contents.number > 0
+ || e->type == ET_text_root // FIXME special case
+ || e->cmd == CM_node) // FIXME special case
{
AV *av;
int i;
@@ -339,7 +341,14 @@
case extra_string:
{ /* A simple string. */
char *value = (char *) f;
- STORE(newSVpv (value, 0));
+ if (strcmp (key, "level"))
+ STORE(newSVpv (value, 0));
+ else
+ {
+ // FIXME: don't use level as a separate key
+ hv_store (e->hv, key, strlen (key),
+ newSVpv(value, 0), 0);
+ }
break;
}
case extra_misc_args:
Modified: trunk/parsetexi/end_line.c
===================================================================
--- trunk/parsetexi/end_line.c 2015-12-01 16:53:23 UTC (rev 6822)
+++ trunk/parsetexi/end_line.c 2015-12-01 23:18:34 UTC (rev 6823)
@@ -931,7 +931,7 @@
ELEMENT *menu_comment = new_element (ET_menu_comment);
add_to_element_contents (current, menu_comment);
current = menu_comment;
- debug ("MENU COMMENT OPEN");
+ debug ("MENU_COMMENT OPEN");
push_context (ct_preformatted);
}
current = begin_preformatted (current);
@@ -1176,17 +1176,29 @@
//abort (); // 3335
}
else
- {
+ { // 3295
// FIXME: end_elt correct?
add_extra_key_element (end_elt, "command", closed_command);
add_extra_key_element (closed_command, "end_command", end_elt);
close_command_cleanup (closed_command);
+
// 3301 INLINE_INSERTCOPYING
+
add_to_element_contents (closed_command, end_elt); // 3321
+
// 3324 ET_menu_comment
- if (close_preformatted_command (end_id))
- current = begin_preformatted (current);
+ if (command_flags(closed_command) & CF_menu)
+ {
+ ELEMENT *e;
+ debug ("CLOSE menu but still in menu context");
+ e = new_element (ET_menu_comment);
+ add_to_element_contents (current, e);
+ current = e;
+ push_context (ct_preformatted);
+ }
}
+ if (close_preformatted_command (end_id))
+ current = begin_preformatted (current);
}
else
{
@@ -1293,7 +1305,38 @@
/* Add empty_line to higher-level element. */
add_to_element_contents (current, e);
}
- //else if () // in menu_entry_description
+ else if (current->type == ET_preformatted
+ && current->parent->type == ET_menu_entry_description)
+ {
+ ELEMENT *empty_line, *e;
+ empty_line = pop_element_from_contents (current);
+ if (current->contents.number == 0)
+ {
+ current = current->parent;
+ pop_element_from_contents (current);
+ }
+ else
+ current = current->parent;
+
+ pop_context (); //ct_preformatted
+
+ current = current->parent->parent;
+ e = new_element (ET_menu_comment);
+ add_to_element_contents (current, e);
+
+ current = e;
+ e = new_element (ET_preformatted);
+ add_to_element_contents (current, e);
+
+ current = e;
+ e = new_element (ET_after_description_line);
+ text_append (&e->text, empty_line->text.text);
+ destroy_element (empty_line);
+ add_to_element_contents (current, e);
+
+ push_context (ct_preformatted);
+ debug ("MENU: END DESCRIPTION, OPEN COMMENT");
+ }
else if (in_paragraph_context (current_context ()))
{
current = end_paragraph (current);
@@ -1305,7 +1348,7 @@
else if (current->type == ET_menu_entry_name
|| current->type == ET_menu_entry_node)
{
- ELEMENT *end_comment;
+ ELEMENT *end_comment = 0;
int empty_menu_entry_node = 0;
if (current->type == ET_menu_entry_node)
@@ -1335,6 +1378,96 @@
/* Abort the menu entry if there is no destination node given. */
if (empty_menu_entry_node || current->type == ET_menu_entry_name)
{
+ ELEMENT *menu, *menu_entry, *description_or_menu_comment = 0;
+ debug ("FINALLY NOT MENU ENTRY");
+ menu = current->parent->parent;
+ menu_entry = pop_element_from_contents (menu);
+ if (menu->contents.number > 0
+ && last_contents_child(menu)->type == ET_menu_entry)
+ { // 2697
+ ELEMENT *entry, *description = 0;
+ int j;
+
+ entry = last_contents_child(menu);
+ for (j = entry->args.number - 1; j >= 0; j--)
+ {
+ ELEMENT *e = args_child_by_index (entry, j);
+ if (e->type == ET_menu_entry_description)
+ {
+ description = e;
+ break;
+ }
+ }
+ if (description)
+ description_or_menu_comment = description;
+ else
+ { // 2707
+ /* Normally this cannot happen. */
+ abort ();
+ }
+ }
+ else if (menu->contents.number > 0
+ && last_contents_child(menu)->type == ET_menu_comment)
+ { // 2716
+ description_or_menu_comment = last_contents_child(menu);
+ }
+ if (description_or_menu_comment)
+ {
+ current = description_or_menu_comment;
+ if (current->contents.number > 0
+ && last_contents_child(current)->type == ET_preformatted)
+ current = last_contents_child(current);
+ else // 2725
+ {
+ /* This should not happen */
+ //abort ();
+ ELEMENT *e;
+ e = new_element (ET_preformatted);
+ add_to_element_contents (current, e);
+ current = e;
+ }
+ push_context (ct_preformatted);
+ }
+ else // 2735
+ {
+ ELEMENT *e;
+ e = new_element (ET_menu_comment);
+ add_to_element_contents (menu, e);
+ current = e;
+ e = new_element (ET_preformatted);
+ add_to_element_contents (current, e);
+ current = e;
+ push_context (ct_preformatted);
+ debug ("THEN MENU_COMMENT OPEN");
+ }
+ {
+ int i, j;
+ for (i = 0; i < menu_entry->args.number; i++)
+ {
+ ELEMENT *arg = args_child_by_index(menu_entry, i);
+ if (arg->text.end > 0)
+ current = merge_text (current, arg->text.text);
+ else
+ {
+ ELEMENT *e;
+ for (j = 0; j < arg->contents.number; j++)
+ {
+ e = contents_child_by_index (arg, j);
+ if (e->text.end > 0)
+ {
+ current = merge_text (current, e->text.text);
+ destroy_element (e);
+ }
+ else
+ {
+ add_to_element_contents (current, e);
+ }
+ }
+ }
+ destroy_element (arg);
+ }
+ destroy_element (menu_entry);
+ }
}
else // 2768
{
Modified: trunk/parsetexi/handle_commands.c
===================================================================
--- trunk/parsetexi/handle_commands.c 2015-12-01 16:53:23 UTC (rev 6822)
+++ trunk/parsetexi/handle_commands.c 2015-12-01 23:18:34 UTC (rev 6823)
@@ -401,12 +401,8 @@
/* 4586 - author */
/* 4612 - dircategory */
if (cmd == CM_dircategory && current_node)
- {
- /* warning - @dircategory after first node. */
- abort ();
- }
+ line_warn ("@dircategory after first node");
- /* 4617 - current to the first argument (ELEMENT *arg). */
current = last_args_child (current); /* arg */
/* add 'line' to context_stack (Parser.pm:141). This will be the
Modified: trunk/parsetexi/labels.c
===================================================================
--- trunk/parsetexi/labels.c 2015-12-01 16:53:23 UTC (rev 6822)
+++ trunk/parsetexi/labels.c 2015-12-01 23:18:34 UTC (rev 6823)
@@ -25,8 +25,12 @@
size_t labels_number = 0;
size_t labels_space = 0;
+/* Register a label, that is something that may be the target of a reference
+ and must be unique in the document. Corresponds to @node, @anchor and
+ @float second arg. */
void register_label (ELEMENT *current, ELEMENT *label)
{
+ char *normalized;
if (labels_number == labels_space)
{
labels_space += 1;
@@ -36,6 +40,10 @@
abort ();
}
- labels_list[labels_number].label = convert_to_normalized (label);
+ normalized = convert_to_normalized (label);
+ labels_list[labels_number].label = normalized;
labels_list[labels_number++].target = current;
+
+ // 2504
+ add_extra_string (current, "normalized", normalized);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [6823] parsetexi update,
Gavin D. Smith <=