texinfo-commits
[Top][All Lists]
Advanced

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]