texinfo-commits
[Top][All Lists]
Advanced

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

[8182] parsetexi update


From: gavinsmith0123
Subject: [8182] parsetexi update
Date: Fri, 21 Sep 2018 05:58:59 -0400 (EDT)

Revision: 8182
          http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=8182
Author:   gavin
Date:     2018-09-21 05:58:58 -0400 (Fri, 21 Sep 2018)
Log Message:
-----------
parsetexi update

Modified Paths:
--------------
    trunk/tp/Texinfo/XS/parsetexi/extra.c
    trunk/tp/Texinfo/XS/parsetexi/handle_commands.c
    trunk/tp/Texinfo/XS/parsetexi/parser.c
    trunk/tp/Texinfo/XS/parsetexi/parser.h
    trunk/tp/Texinfo/XS/parsetexi/separator.c

Modified: trunk/tp/Texinfo/XS/parsetexi/extra.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/extra.c       2018-09-19 19:43:06 UTC (rev 
8181)
+++ trunk/tp/Texinfo/XS/parsetexi/extra.c       2018-09-21 09:58:58 UTC (rev 
8182)
@@ -45,6 +45,18 @@
   e->extra[i].type = type;
 }
 
+void
+delete_extra (ELEMENT *e, char *key)
+{
+  KEY_PAIR *k = lookup_extra (e, key);
+  if (k)
+    {
+      k->key = "";
+      k->value = 0; /* should really free this */
+      k->type = extra_deleted;
+    }
+}
+
 /* Add an extra key that is a reference to another element (for example, 
    'associated_section' on a node command element. */
 void

Modified: trunk/tp/Texinfo/XS/parsetexi/handle_commands.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/handle_commands.c     2018-09-19 19:43:06 UTC 
(rev 8181)
+++ trunk/tp/Texinfo/XS/parsetexi/handle_commands.c     2018-09-21 09:58:58 UTC 
(rev 8182)
@@ -344,7 +344,6 @@
         {
           char *arg = 0;
           ELEMENT *misc_line_args;
-          ELEMENT *spaces_after_command;
           ELEMENT *e;
 
           if (cmd == CM_set)
@@ -370,13 +369,8 @@
           add_to_element_args (misc, misc_line_args);
           add_extra_misc_args (misc, "misc_args", args);
 
-          spaces_after_command = new_element (ET_empty_spaces_after_command);
-          text_append_n (&spaces_after_command->text, " ", 1);
-          add_extra_element (misc, "spaces_after_command",
-                             spaces_after_command);
+          add_extra_string_dup (misc, "spaces_before_argument", " ");
 
-          add_to_element_contents (misc_line_args, spaces_after_command);
-
           e = new_element (ET_NONE);
           text_append (&e->text, arg);
           add_to_element_contents (misc_line_args, e);

Modified: trunk/tp/Texinfo/XS/parsetexi/parser.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/parser.c      2018-09-19 19:43:06 UTC (rev 
8181)
+++ trunk/tp/Texinfo/XS/parsetexi/parser.c      2018-09-21 09:58:58 UTC (rev 
8182)
@@ -423,48 +423,14 @@
           || last_child->type == ET_empty_spaces_after_close_brace))
     {
       ELEMENT *owning_element = 0, *e;
-      KEY_PAIR *owning_keypair = 0, *k;
-          
-      e = current;
-      if (current)
-        {
-          k = lookup_extra (current, "spaces_before_argument_elt");
-          if (k && k->value == last_contents_child (current))
-            goto owning_element_found;
-        }
+      KEY_PAIR *k;
 
-      e = current->parent;
-      if (current->parent)
+      k = lookup_extra (last_child, "command");
+      if (k)
         {
-          k = lookup_extra (current->parent, 
-                                "spaces_before_argument_elt");
-          if (k && k->value == last_contents_child (current))
-            goto owning_element_found;
+          owning_element = (ELEMENT *) k->value;
         }
 
-      e = current;
-      if (current)
-        {
-          k = lookup_extra (current, "spaces_after_command");
-          if (k && k->value == last_contents_child (current))
-            goto owning_element_found;
-        }
-
-      e = current->parent;
-      if (current->parent)
-        {
-          k = lookup_extra (current->parent, "spaces_after_command");
-          if (k && k->value == last_contents_child (current))
-            goto owning_element_found;
-        }
-
-      if (0)
-        {
-owning_element_found:
-          owning_element = e;
-          owning_keypair = k;
-        }
-
       debug ("ABORT EMPTY %s additional text |%s| "
              "current |%s|",
              element_type_name(last_child),
@@ -478,39 +444,35 @@
           e = pop_element_from_contents (current);
           destroy_element (e);
           /* TODO: Maybe we could avoid adding it in the first place? */
-
-          if (owning_keypair)
+          if (owning_element)
             {
-              owning_keypair->key = "";
-              owning_keypair->value = 0;
-              owning_keypair->type = extra_deleted;
+              delete_extra (owning_element, "spaces_before_argument_elt");
+              delete_extra (owning_element, "spaces_after_command_elt");
             }
         }
-      else if (last_child->type == ET_empty_line) //2132
+      else if (last_child->type == ET_empty_line)
         {
           last_child->type = begin_paragraph_p (current)
                              ? ET_empty_spaces_before_paragraph : ET_NONE;
         }
-      else if (last_child->type == ET_empty_line_after_command)
+      else if (last_child->type == ET_empty_line_after_command
+               || last_child->type == ET_empty_spaces_before_argument)
         {
-          last_child->type = ET_empty_spaces_after_command;
-        }
-      else if (last_child->type == ET_empty_spaces_before_argument)
-        {
-          /* Remove element from main tree. */
-          ELEMENT *e = pop_element_from_contents (current);
-          
-          if (owning_keypair)
+          if (owning_element)
             {
-              /* Replace element reference with a simple string. */
+              /* Remove element from main tree. */
+              ELEMENT *e = pop_element_from_contents (current);
               add_extra_string_dup (owning_element, "spaces_before_argument",
-                                    owning_keypair->value->text.text);
-
-              owning_keypair->key = "";
-              owning_keypair->value = 0;
-              owning_keypair->type = extra_deleted;
+                                    e->text.text);
+              destroy_element (e);
+              delete_extra (owning_element, "spaces_before_argument_elt");
+              delete_extra (owning_element, "spaces_after_command_elt");
             }
-          destroy_element (e);
+          else
+            {
+              last_child->type = ET_empty_spaces_after_command;
+              abort ();
+            }
         }
       retval = 1;
     }
@@ -622,7 +584,7 @@
   if (last_contents_child(current)->cmd == CM_c
       || last_contents_child(current)->cmd == CM_comment)
     {
-      add_extra_element_oot (current->parent, "spaces_after_argument",
+      add_extra_element_oot (current->parent, "comment_at_end",
                              pop_element_from_contents (current));
     }
 
@@ -702,7 +664,8 @@
 
   if (command)
     {
-      add_extra_element (command, "spaces_after_command", e);
+      add_extra_element (command, "spaces_after_command_elt", e);
+      add_extra_element (e, "command", command);
     }
 
   *line_inout = line;

Modified: trunk/tp/Texinfo/XS/parsetexi/parser.h
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/parser.h      2018-09-19 19:43:06 UTC (rev 
8181)
+++ trunk/tp/Texinfo/XS/parsetexi/parser.h      2018-09-21 09:58:58 UTC (rev 
8182)
@@ -113,6 +113,7 @@
 void add_extra_string (ELEMENT *e, char *key, char *value);
 void add_extra_string_dup (ELEMENT *e, char *key, char *value);
 KEY_PAIR *lookup_extra (ELEMENT *e, char *key);
+void delete_extra (ELEMENT *e, char *key);
 
 /* In menus.c */
 int handle_menu (ELEMENT **current_inout, char **line_inout);

Modified: trunk/tp/Texinfo/XS/parsetexi/separator.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/separator.c   2018-09-19 19:43:06 UTC (rev 
8181)
+++ trunk/tp/Texinfo/XS/parsetexi/separator.c   2018-09-21 09:58:58 UTC (rev 
8182)
@@ -170,6 +170,7 @@
             add_to_element_contents (current, e);
             add_extra_element (current->parent,
                                    "spaces_before_argument_elt", e);
+            add_extra_element (e, "command", current);
             line += n;
           }
           current->type = ET_brace_command_context;
@@ -190,6 +191,7 @@
               text_append (&e->text, "");
               add_to_element_contents (current, e);
               add_extra_element (current, "spaces_before_argument_elt", e);
+              add_extra_element (e, "command", current);
 
               if (command == CM_inlineraw)
                 push_context (ct_inlineraw);
@@ -217,6 +219,7 @@
       add_to_element_contents (current, e);
       debug ("BRACKETED in def/multitable");
       add_extra_element (current, "spaces_before_argument_elt", e);
+      add_extra_element (e, "command", current);
     }
   else if (current->type == ET_rawpreformatted)
     {
@@ -814,6 +817,7 @@
   text_append (&e->text, ""); /* See comment in parser.c:merge_text */
   add_to_element_contents (current, e);
   add_extra_element (current, "spaces_before_argument_elt", e);
+  add_extra_element (e, "command", current);
   
 funexit:
   *line_inout = line;




reply via email to

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