[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[5962] parsetexi update
From: |
Gavin D. Smith |
Subject: |
[5962] parsetexi update |
Date: |
Sun, 14 Dec 2014 02:45:35 +0000 |
Revision: 5962
http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=5962
Author: gavin
Date: 2014-12-14 02:45:35 +0000 (Sun, 14 Dec 2014)
Log Message:
-----------
parsetexi update
Modified Paths:
--------------
trunk/parsetexi/ChangeLog
trunk/parsetexi/end_line.c
trunk/parsetexi/extra.c
trunk/parsetexi/handle_commands.c
trunk/parsetexi/parser.c
trunk/parsetexi/parser.h
Modified: trunk/parsetexi/ChangeLog
===================================================================
--- trunk/parsetexi/ChangeLog 2014-12-14 01:06:21 UTC (rev 5961)
+++ trunk/parsetexi/ChangeLog 2014-12-14 02:45:35 UTC (rev 5962)
@@ -1,5 +1,14 @@
2014-12-14 Gavin Smith <address@hidden>
+ * parser.c (current_node, current_section): New variables.
+ * end_line.c (end_line) <@node>: Set current_node.
+ <root commands>: Set 'associated_node' and 'associated_section'
+ keys, and set current_section.
+
+ * extra.c (lookup_extra_key): New function.
+
+2014-12-14 Gavin Smith <address@hidden>
+
* tree_types.h (ELEMENT): Add fields to save information about
'extra' keys on an element.
* extra.c: New file.
Modified: trunk/parsetexi/end_line.c
===================================================================
--- trunk/parsetexi/end_line.c 2014-12-14 01:06:21 UTC (rev 5961)
+++ trunk/parsetexi/end_line.c 2014-12-14 02:45:35 UTC (rev 5962)
@@ -287,6 +287,8 @@
/* This sets 'node_content' and 'normalized' on the node, among
other things (which were already set in parse_node_manual). */
//register_label (current, current->args.list[0]);
+
+ current_node = current;
}
else if (current->cmd == CM_listoffloats) /* 3248 */
{
@@ -334,9 +336,15 @@
}
/* 3346 included file */
- // setfilename
+
+ /* 3350 */
+ if (cmd_id == CM_setfilename && (current_node || current_section))
+ {
+ /* warning */
+ abort ();
+ }
/* 3355 columnfractions */
- if (cmd_id == CM_columnfractions)
+ else if (cmd_id == CM_columnfractions)
{
ELEMENT *before_item;
// check if in multitable
@@ -356,7 +364,24 @@
while (last_contents_child (current))
destroy_element (pop_element_from_contents (current));
- /* do stuff with associated_section extra key. */
+ /* Set 'associated_section' extra key for a node. */
+ if (cmd_id != CM_node && cmd_id != CM_part)
+ {
+ if (current_node)
+ {
+ if (!lookup_extra_key (current_node, "associated_section"))
+ {
+ add_extra_key_element
+ (current_node, "associated_section", current);
+ add_extra_key_element
+ (current, "associated_node", current_node);
+ }
+ }
+
+ // "current parts" - 3394
+
+ current_section = current;
+ }
} /* 3416 */
}
Modified: trunk/parsetexi/extra.c
===================================================================
--- trunk/parsetexi/extra.c 2014-12-14 01:06:21 UTC (rev 5961)
+++ trunk/parsetexi/extra.c 2014-12-14 02:45:35 UTC (rev 5962)
@@ -1,3 +1,5 @@
+#include <string.h>
+
#include "parser.h"
static void
@@ -34,10 +36,22 @@
}
/* Add an extra key that is a reference to the text field of another
- element/ */
+ element. */
void
add_extra_key_text (ELEMENT *e, char *key, ELEMENT *value)
{
add_extra_key (e, key, value);
e->extra[e->extra_number - 1].type = extra_element_text;
}
+
+KEY_PAIR *
+lookup_extra_key (ELEMENT *e, char *key)
+{
+ int i;
+ for (i = 0; i < e->extra_number; i++)
+ {
+ if (!strcmp (e->extra[i].key, key))
+ return &e->extra[i];
+ }
+ return 0;
+}
Modified: trunk/parsetexi/handle_commands.c
===================================================================
--- trunk/parsetexi/handle_commands.c 2014-12-14 01:06:21 UTC (rev 5961)
+++ trunk/parsetexi/handle_commands.c 2014-12-14 02:45:35 UTC (rev 5962)
@@ -256,6 +256,11 @@
/* 4584 - node */
/* 4586 - author */
/* 4612 - dircategory */
+ if (cmd_id == CM_dircategory && current_node)
+ {
+ /* warning - @dircategory after first node. */
+ abort ();
+ }
/* 4617 - current to the first argument (ELEMENT *arg). */
current = last_args_child (current); /* arg */
Modified: trunk/parsetexi/parser.c
===================================================================
--- trunk/parsetexi/parser.c 2014-12-14 01:06:21 UTC (rev 5961)
+++ trunk/parsetexi/parser.c 2014-12-14 02:45:35 UTC (rev 5962)
@@ -65,7 +65,14 @@
*ptr = p;
return ret;
}
+
+/* Current node and section. */
+
+ELEMENT *current_node = 0;
+ELEMENT *current_section = 0;
+
+
/* Conditional stack. */
enum command_id *conditional_stack;
Modified: trunk/parsetexi/parser.h
===================================================================
--- trunk/parsetexi/parser.h 2014-12-14 01:06:21 UTC (rev 5961)
+++ trunk/parsetexi/parser.h 2014-12-14 02:45:35 UTC (rev 5962)
@@ -44,6 +44,9 @@
extern const char *whitespace_chars, *whitespace_chars_except_newline;
+extern ELEMENT *current_node;
+extern ELEMENT *current_section;
+
/* In macro.c */
void new_macro (char *name, ELEMENT *macro);
ELEMENT *parse_macro_command_line (enum command_id, char **line_inout,
@@ -62,3 +65,4 @@
void add_extra_key_element (ELEMENT *e, char *key, ELEMENT *value);
void add_extra_key_contents (ELEMENT *e, char *key, ELEMENT *value);
void add_extra_key_text (ELEMENT *e, char *key, ELEMENT *value);
+KEY_PAIR *lookup_extra_key (ELEMENT *e, char *key);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [5962] parsetexi update,
Gavin D. Smith <=