[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [5469] call scan_node_contents,
Gavin D. Smith <=