texinfo-commits
[Top][All Lists]
Advanced

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

[5469] call scan_node_contents


From: Gavin D. Smith
Subject: [5469] call scan_node_contents
Date: Mon, 21 Apr 2014 23:09:46 +0000

Revision: 5469
          http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=5469
Author:   gavin
Date:     2014-04-21 23:09:45 +0000 (Mon, 21 Apr 2014)
Log Message:
-----------
call scan_node_contents

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/info/footnotes.c
    trunk/info/indices.c
    trunk/info/info-utils.c
    trunk/info/info-utils.h
    trunk/info/nodemenu.c
    trunk/info/nodes.c
    trunk/info/session.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog     2014-04-21 22:50:17 UTC (rev 5468)
+++ trunk/ChangeLog     2014-04-21 23:09:45 UTC (rev 5469)
@@ -1,5 +1,23 @@
 2014-04-21  Gavin Smith  <address@hidden>
 
+       * info/nodes.c (info_node_of_tag): Call scan_node_contents.
+
+       * info/footnotes.c (make_footnotes_node): Copy references from main
+       node to footnotes node.  Set filename field from main node.
+       * info/info-utils.c (info_copy_references): New function.
+       (info_copy_reference): Copy type field.
+       
+       * info/indices.c (info_index_apropos, create_virtindex_node)
+       * info/nodemenu.c (get_visited_nodes): Call scan_node_contents on new
+       node.
+       
+       * info/info-utils.c (internal_info_node_p): Remove code disabled by
+       preprocessor.
+       
+       * info/session.c (forget_window_and_nodes): Call info_free_references.
+
+2014-04-21  Gavin Smith  <address@hidden>
+
        * info/info-utils.c, info/variables.c (preprocess_nodes_p):
        New variable.
        * info/info-utils.c (rewrite_p, input_start, inptr, input_length)

Modified: trunk/info/footnotes.c
===================================================================
--- trunk/info/footnotes.c      2014-04-21 22:50:17 UTC (rev 5468)
+++ trunk/info/footnotes.c      2014-04-21 23:09:45 UTC (rev 5469)
@@ -138,7 +138,33 @@
     memcpy (result->contents + strlen (header),
             fn_node->contents + text_start, fn_node->nodelen - text_start);
 
+    result->flags |= N_IsInternal;
+
+   /* Copy and adjust references that appear in footnotes section. */
+    {
+      REFERENCE **ref = fn_node->references;
+
+      for (; *ref; ref++)
+        {
+          if ((*ref)->start > text_start)
+            break;
+        }
+
+      result->references = info_copy_references (ref);
+
+      for (ref = result->references; *ref; ref++)
+        {
+          (*ref)->start -= text_start - strlen (header);
+          (*ref)->end -= text_start - strlen (header);
+        }
+    }
+
+    node->parent = NULL;
     name_internal_node (result, footnote_nodename);
+
+    /* Needed in case the user follows a reference in the footnotes window. */
+    result->filename = fn_node->filename;
+
     free (header);
   }
 

Modified: trunk/info/indices.c
===================================================================
--- trunk/info/indices.c        2014-04-21 22:50:17 UTC (rev 5468)
+++ trunk/info/indices.c        2014-04-21 23:09:45 UTC (rev 5469)
@@ -739,6 +739,8 @@
         }
 
       apropos_node = message_buffer_to_node ();
+      scan_node_contents (0, &apropos_node);
+
       add_gcable_pointer (apropos_node->contents);
       name_internal_node (apropos_node, apropos_list_nodename);
 
@@ -834,6 +836,8 @@
   node->nodelen = strlen (text);
   node->body_start = strcspn(node->contents, "\n");
 
+  scan_node_contents (0, &node);
+
   return node;
 }
 

Modified: trunk/info/info-utils.c
===================================================================
--- trunk/info/info-utils.c     2014-04-21 22:50:17 UTC (rev 5468)
+++ trunk/info/info-utils.c     2014-04-21 23:09:45 UTC (rev 5469)
@@ -432,8 +432,6 @@
   return result;
 }
 
-
-
 /* Copy a reference structure.  Since we tend to free everything at
    every opportunity, we don't share any points, but copy everything into
    new memory.  */
@@ -447,12 +445,33 @@
   dest->start = src->start;
   dest->end = src->end;
   dest->line_number = 0;
+  dest->type = src->type;
   
   return dest;
 }
 
+/* Copy a list of references. */
+REFERENCE **
+info_copy_references (REFERENCE **ref1)
+{
+  int i;
+  REFERENCE **result;
+  int size;
 
-
+  /* Get the total size of the slots that we will need. */
+  for (i = 0; ref1[i]; i++);
+  size = i;
+
+  result = xmalloc ((1 + size) * sizeof (REFERENCE *));
+
+  /* Copy the contents over. */
+  for (i = 0; ref1[i]; i++)
+    result[i] = info_copy_reference (ref1[i]);
+  result[i] = NULL;
+
+  return result;
+}
+
 void
 info_reference_free (REFERENCE *ref)
 {
@@ -481,6 +500,7 @@
     }
 }
 
+
 /* Search for sequences of whitespace or newlines in STRING, replacing
    all such sequences with just a single space.  Remove whitespace from
    start and end of string. */
@@ -670,7 +690,7 @@
 
   convert_encoding_p = 0;
 
-   /* Node being processed does not come from an Info file. */
+  /* Node being processed does not come from an Info file. */
   if (!fb)
     return;
 
@@ -1725,16 +1745,7 @@
 int
 internal_info_node_p (NODE *node)
 {
-#if defined (NEVER)
-  if (node &&
-      (node->filename && !*node->filename) &&
-      !node->parent && node->nodename)
-    return 1;
-  else
-    return 0;
-#else
-  return (node != NULL) && ((node->flags & N_IsInternal) != 0);
-#endif /* !NEVER */
+  return (node != NULL) && (node->flags & N_IsInternal);
 }
 
 /* Make NODE appear to be one especially created by Info. */

Modified: trunk/info/info-utils.h
===================================================================
--- trunk/info/info-utils.h     2014-04-21 22:50:17 UTC (rev 5468)
+++ trunk/info/info-utils.h     2014-04-21 23:09:45 UTC (rev 5469)
@@ -94,6 +94,9 @@
 /* Copy an existing reference into new memory.  */
 extern REFERENCE *info_copy_reference (REFERENCE *src);
 
+/* Copy a list of existing references into new memory.  */
+extern REFERENCE **info_copy_references (REFERENCE **ref1);
+
 /* Free the data associated with a single REF */
 void info_reference_free (REFERENCE *ref);
 

Modified: trunk/info/nodemenu.c
===================================================================
--- trunk/info/nodemenu.c       2014-04-21 22:50:17 UTC (rev 5468)
+++ trunk/info/nodemenu.c       2014-04-21 23:09:45 UTC (rev 5469)
@@ -213,6 +213,9 @@
 
   node = message_buffer_to_node ();
   add_gcable_pointer (node->contents);
+
+  scan_node_contents (0, &node);
+
   return node;
 }
 

Modified: trunk/info/nodes.c
===================================================================
--- trunk/info/nodes.c  2014-04-21 22:50:17 UTC (rev 5468)
+++ trunk/info/nodes.c  2014-04-21 23:09:45 UTC (rev 5469)
@@ -1265,6 +1265,10 @@
       set_tag_nodelen (subfile, tag);
 
       node_set_body_start (tag);
+
+      /* Read locations of references in node and similar.  Strip
+         Info file syntax from node if preprocess_nodes=On. */
+      scan_node_contents (fb, tag_ptr);
     }
   else if (tag->nodelen == 0) /* anchor, return containing node */
     {

Modified: trunk/info/session.c
===================================================================
--- trunk/info/session.c        2014-04-21 22:50:17 UTC (rev 5468)
+++ trunk/info/session.c        2014-04-21 23:09:45 UTC (rev 5469)
@@ -463,7 +463,10 @@
              which does that. */
           for (i = 0; info_win->nodes[i]; i++)
             if (internal_info_node_p (info_win->nodes[i]))
-              free (info_win->nodes[i]);
+              {
+                info_free_references (info_win->nodes[i]->references);
+                free (info_win->nodes[i]);
+              }
           free (info_win->nodes);
 
           free (info_win->pagetops);




reply via email to

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