[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [7192] parsetexi update,
gavinsmith0123 <=