texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[7192] parsetexi update


From: gavinsmith0123
Subject: [7192] parsetexi update
Date: Sat, 28 May 2016 15:35:53 +0000 (UTC)

Revision: 7192
          http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=7192
Author:   gavin
Date:     2016-05-28 15:35:53 +0000 (Sat, 28 May 2016)
Log Message:
-----------
parsetexi update

Modified Paths:
--------------
    trunk/tp/parsetexi/Parsetexi.pm
    trunk/tp/parsetexi/Parsetexi.xs
    trunk/tp/parsetexi/api.c
    trunk/tp/parsetexi/handle_commands.c
    trunk/tp/parsetexi/labels.c
    trunk/tp/parsetexi/labels.h
    trunk/tp/parsetexi/separator.c
    trunk/tp/parsetexi/tree_types.h

Modified: trunk/tp/parsetexi/Parsetexi.pm
===================================================================
--- trunk/tp/parsetexi/Parsetexi.pm     2016-05-28 15:30:28 UTC (rev 7191)
+++ trunk/tp/parsetexi/Parsetexi.pm     2016-05-28 15:35:53 UTC (rev 7192)
@@ -110,12 +110,12 @@
     'merged_indices' => {},
     'nodes' => [],
     'floats' => {},
-
-    # These aren't implemented yet.
     'internal_references' => [],
 
     # Not used but present in case we pass the object into 
     # Texinfo::Parser.
+    # FIXME check if we can remove these, because we never want to use
+    # Texinfo::Parser if the XS module is in use.
     'conditionals_stack' => [],
     'expanded_formats_stack' => [],
     'context_stack' => ['_root'],
@@ -288,7 +288,7 @@
 
   #print "Getting tree...\n";
 
-  my ($TREE, $LABELS, $FLOATS,
+  my ($TREE, $LABELS, $INTL_XREFS, $FLOATS,
       $INDEX_NAMES, $ERRORS, $GLOBAL_INFO, $GLOBAL_INFO2);
   parse_file ($file_name);
   $TREE = build_texinfo_tree ();
@@ -355,6 +355,7 @@
   $self->{'info'}->{'input_file_name'} = $file_name;
 
   $self->{'labels'} = $LABELS;
+  $self->{'internal_references'} = $INTL_XREFS;
   $self->{'floats'} = $FLOATS;
 
   _get_errors ($self);
@@ -407,9 +408,14 @@
       }
     }
 
+    # TODO: This code is duplicated from parse_texi_file
+
     my $LABELS = build_label_list ();
     $self->{'labels'} = $LABELS;
 
+    my $INTL_XREFS = build_internal_xref_list ();
+    $self->{'internal_references'} = $INTL_XREFS;
+
     my $FLOATS = build_float_list ();
     $self->{'floats'} = $FLOATS;
 

Modified: trunk/tp/parsetexi/Parsetexi.xs
===================================================================
--- trunk/tp/parsetexi/Parsetexi.xs     2016-05-28 15:30:28 UTC (rev 7191)
+++ trunk/tp/parsetexi/Parsetexi.xs     2016-05-28 15:35:53 UTC (rev 7192)
@@ -13,6 +13,7 @@
 
 HV *build_texinfo_tree (void);
 HV *build_label_list (void);
+SV *build_internal_xref_list (void);
 HV *build_float_list (void);
 HV *build_index_data (void);
 HV *build_global_info (void);
@@ -104,6 +105,9 @@
 HV *
 build_label_list ()
 
+SV *
+build_internal_xref_list ()
+
 HV *
 build_float_list ()
 

Modified: trunk/tp/parsetexi/api.c
===================================================================
--- trunk/tp/parsetexi/api.c    2016-05-28 15:30:28 UTC (rev 7191)
+++ trunk/tp/parsetexi/api.c    2016-05-28 15:35:53 UTC (rev 7192)
@@ -55,6 +55,8 @@
   reset_floats ();
   clear_expanded_formats ();
   wipe_global_info ();
+  reset_internal_xrefs ();
+  reset_labels ();
 
   current_node = current_section = 0;
 }
@@ -579,6 +581,26 @@
   return label_hash;
 }
 
+SV *
+build_internal_xref_list (void)
+{
+  AV *list_av;
+  SV *sv;
+  int i;
+
+  dTHX;
+
+  list_av = newAV ();
+
+  for (i = 0; i < internal_xref_number; i++)
+    {
+      sv = newRV_inc (internal_xref_list[i]->hv);
+      av_push (list_av, sv);
+    }
+
+  return newRV_inc ((SV *) list_av);
+}
+
 /* Return hash for list of @float's that appeared in the file. */
 HV *
 build_float_list (void)
@@ -804,6 +826,9 @@
   if (global_info.input_encoding_name)
     hv_store (hv, "input_encoding_name", strlen ("input_encoding_name"),
               newSVpv (global_info.input_encoding_name, 0), 0);
+  if (global_info.novalidate)
+    hv_store (hv, "novalidate", strlen ("novalidate"),
+              newSVpv ("1", 0), 0);
   return hv;
 }
 

Modified: trunk/tp/parsetexi/handle_commands.c
===================================================================
--- trunk/tp/parsetexi/handle_commands.c        2016-05-28 15:30:28 UTC (rev 
7191)
+++ trunk/tp/parsetexi/handle_commands.c        2016-05-28 15:35:53 UTC (rev 
7192)
@@ -296,9 +296,16 @@
             }
         }
 
-      /* if (!ignore_global_commands)
+      if (0 || cmd == CM_raisesections)
         {
-        } */
+        }
+      else if (0 || cmd == CM_raisesections)
+        {
+        }
+      else if (cmd == CM_novalidate)
+        {
+          global_info.novalidate = 1;
+        }
 
       mark_and_warn_invalid (cmd, invalid_parent, misc);
       register_global_command (cmd, misc); // 4423

Modified: trunk/tp/parsetexi/labels.c
===================================================================
--- trunk/tp/parsetexi/labels.c 2016-05-28 15:30:28 UTC (rev 7191)
+++ trunk/tp/parsetexi/labels.c 2016-05-28 15:35:53 UTC (rev 7192)
@@ -52,3 +52,33 @@
   add_extra_string (current, "normalized", normalized);
   add_extra_contents (current, "node_content", label->node_content);
 }
+
+void
+reset_labels (void)
+{
+  labels_number = 0;
+}
+
+
+
+ELEMENT **internal_xref_list = 0;
+size_t internal_xref_number = 0;
+size_t internal_xref_space = 0;
+
+void
+remember_internal_xref (ELEMENT *element)
+{
+  if (internal_xref_number == internal_xref_space)
+    {
+      internal_xref_list = realloc (internal_xref_list,
+                             (internal_xref_space += 2)
+                             * sizeof (*internal_xref_list));
+    }
+  internal_xref_list[internal_xref_number++] = element;
+}
+
+void
+reset_internal_xrefs (void)
+{
+  internal_xref_number = 0;
+}

Modified: trunk/tp/parsetexi/labels.h
===================================================================
--- trunk/tp/parsetexi/labels.h 2016-05-28 15:30:28 UTC (rev 7191)
+++ trunk/tp/parsetexi/labels.h 2016-05-28 15:35:53 UTC (rev 7192)
@@ -31,3 +31,12 @@
 extern LABEL *labels_list;
 extern size_t labels_number;
 void register_label (ELEMENT *current, NODE_SPEC_EXTRA *label);
+void reset_labels (void);
+
+
+extern ELEMENT **internal_xref_list;
+extern size_t internal_xref_number;
+extern size_t internal_xref_space;
+
+void remember_internal_xref (ELEMENT *element);
+void reset_internal_xrefs (void);

Modified: trunk/tp/parsetexi/separator.c
===================================================================
--- trunk/tp/parsetexi/separator.c      2016-05-28 15:30:28 UTC (rev 7191)
+++ trunk/tp/parsetexi/separator.c      2016-05-28 15:35:53 UTC (rev 7192)
@@ -324,7 +324,12 @@
                   nse = parse_node_manual (args_child_by_index (ref, 0));
                   if (nse)
                     add_extra_node_spec (ref, "node_argument", nse);
-                  // TODO 5078 global internal_references array
+                  if (closed_command != CM_inforef
+                      && ref->args.number <= 3
+                      && !nse->manual_content)
+                    {
+                      remember_internal_xref (ref);
+                    }
                 }
               // TODO 5085 check node name not empty after normalization
             }

Modified: trunk/tp/parsetexi/tree_types.h
===================================================================
--- trunk/tp/parsetexi/tree_types.h     2016-05-28 15:30:28 UTC (rev 7191)
+++ trunk/tp/parsetexi/tree_types.h     2016-05-28 15:35:53 UTC (rev 7192)
@@ -110,6 +110,7 @@
 typedef struct GLOBAL_INFO {
     char *input_file_name;
     char *input_encoding_name;
+    int novalidate;
 
     /* Elements that should be unique. */
     // 288 and Common.pm:164




reply via email to

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