texinfo-commits
[Top][All Lists]
Advanced

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




reply via email to

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