[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[6126] parsetexi include directories
From: |
Gavin D. Smith |
Subject: |
[6126] parsetexi include directories |
Date: |
Sat, 14 Feb 2015 14:23:58 +0000 |
Revision: 6126
http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=6126
Author: gavin
Date: 2015-02-14 14:23:57 +0000 (Sat, 14 Feb 2015)
Log Message:
-----------
parsetexi include directories
Modified Paths:
--------------
trunk/parsetexi/ChangeLog
trunk/parsetexi/Parsetexi/Parsetexi.xs
trunk/parsetexi/Parsetexi/lib/Parsetexi.pm
trunk/parsetexi/api.h
trunk/parsetexi/input.c
trunk/parsetexi/input.h
trunk/parsetexi/main.c
trunk/parsetexi/parser.c
trunk/parsetexi/parser.h
trunk/parsetexi/test-files/email.texi
Added Paths:
-----------
trunk/parsetexi/test-files/include-1.texi
trunk/parsetexi/test-files/include-2.texi
Modified: trunk/parsetexi/ChangeLog
===================================================================
--- trunk/parsetexi/ChangeLog 2015-02-13 20:45:56 UTC (rev 6125)
+++ trunk/parsetexi/ChangeLog 2015-02-14 14:23:57 UTC (rev 6126)
@@ -1,3 +1,11 @@
+2015-02-14 Gavin Smith <address@hidden>
+
+ * input.c, Parsetexi/Parsetexi.xs (add_include_directory): New
+ function.
+ * Parsetexi/lib/Parsetexi.pm (parser): Call it.
+ * input.c (input_push_file): Look through list of include
+ directories.
+
2015-02-13 Gavin Smith <address@hidden>
* parser.c (abort_empty_line) <ET_empty_line>: Clear type of
Modified: trunk/parsetexi/Parsetexi/Parsetexi.xs
===================================================================
--- trunk/parsetexi/Parsetexi/Parsetexi.xs 2015-02-13 20:45:56 UTC (rev
6125)
+++ trunk/parsetexi/Parsetexi/Parsetexi.xs 2015-02-14 14:23:57 UTC (rev
6126)
@@ -57,3 +57,7 @@
contents_child_by_index (e, index)
ELEMENT *e
int index
+
+void
+add_include_directory (filename)
+ char *filename
Modified: trunk/parsetexi/Parsetexi/lib/Parsetexi.pm
===================================================================
--- trunk/parsetexi/Parsetexi/lib/Parsetexi.pm 2015-02-13 20:45:56 UTC (rev
6125)
+++ trunk/parsetexi/Parsetexi/lib/Parsetexi.pm 2015-02-14 14:23:57 UTC (rev
6126)
@@ -86,6 +86,8 @@
# Stub for Texinfo::Parser::parser (line 574)
sub parser (;$$)
{
+ my $conf = shift;
+
my %parser_blanks = (
'labels' => {},
'extra' => {},
@@ -115,6 +117,21 @@
$parser->{'gettext'} = $parser_default_configuration{'gettext'};
$parser->{'pgettext'} = $parser_default_configuration{'pgettext'};
+ if (defined($conf)) {
+ foreach my $key (keys (%$conf)) {
+ if ($key eq 'include_directories') {
+ warn "Passed include_directories\n";
+ foreach my $d (@{$conf->{'include_directories'}}) {
+ warn "got dir $d\n";
+ add_include_directory ($d);
+ }
+
+ } else {
+ warn "ignoring parser configuration value \"$key\"\n";
+ }
+ }
+ }
+
bless $parser;
$parser->Texinfo::Report::new;
@@ -163,30 +180,6 @@
}
}
-# Set the 'menu_entry' extra key on each menu entry. This was the
-## return value of _parse_node_manual (line 2257, Parser.pm).
-#sub _add_menu_entry_node_keys ($) {
-# my $menu = shift;
-# foreach my $entry (@{$menu->{'contents'}}) {
-# next if !$entry->{'type'} or $entry->{'type'} ne 'menu_entry';
-# foreach my $part (@{$entry->{'args'}}) {
-# if ($part->{'type'} eq 'menu_entry_node') {
-# #$entry->{'extra'}->{'menu_entry_node'}->{'manual_content'} = ...;
-#
-# # In Texinfo::Parser::_parse_node_manual, a copy was taken of
-# # the contents, and leading and trailing whitespace elements
-# # removed with _trim_spaces_comment_from_content.
-# $entry->{'extra'}->{'menu_entry_node'}->{'node_content'}
-# = $part->{'contents'};
-#
-# # TODO: Actually get normalized node name of target.
-# $entry->{'extra'}->{'menu_entry_node'}->{'normalized'}
-# = $part->{'contents'}[0]{'text'};
-# }
-# }
-# }
-#}
-
# Look for a menu in the node, saving in the 'menus' array reference
# of the node element
# This array was built on line 4800 of Parser.pm.
@@ -210,8 +203,6 @@
foreach my $child (@{$contents}) {
if ($child->{'cmdname'} and $child->{'cmdname'} eq 'menu') {
push @{$node->{'menus'}}, $child;
- # Disable - do this in the C code now.
- #_add_menu_entry_node_keys ($child);
}
}
}
@@ -268,11 +259,11 @@
$tree_stream = dump_tree_to_string_3 ();
#print "tree stream is $tree_stream\n";
eval $tree_stream;
+ print "Got data.\n";
} else {
- # Note we are calling a separate executable instead of using the code
- # compliled into Parsetexi.pm as a library. We should add functions
- # to Parsetexi.pm to get the tree without doing this.
+ # This calls a separate executable instead of using the code
+ # compliled into Parsetexi.pm as a library.
$tree_stream = qx(./parsetexi $file_name 2>/dev/null);
print "Reading tree...\n";
Modified: trunk/parsetexi/api.h
===================================================================
--- trunk/parsetexi/api.h 2015-02-13 20:45:56 UTC (rev 6125)
+++ trunk/parsetexi/api.h 2015-02-14 14:23:57 UTC (rev 6126)
@@ -12,3 +12,6 @@
char *dump_tree_to_string_3 (void);
char *dump_root_element_1 (void);
char *dump_root_element_2 (void);
+
+/* In input.c */
+void add_include_directory (char *filename);
Modified: trunk/parsetexi/input.c
===================================================================
--- trunk/parsetexi/input.c 2015-02-13 20:45:56 UTC (rev 6125)
+++ trunk/parsetexi/input.c 2015-02-14 14:23:57 UTC (rev 6126)
@@ -23,6 +23,7 @@
#include "tree_types.h"
#include "input.h"
#include "text.h"
+#include "api.h"
enum input_type { IN_file, IN_text };
@@ -192,14 +193,47 @@
a macro expansion, or was pushed back when reading the file preamble. */
}
+
+static char **include_dirs;
+static size_t include_dirs_number;
+static size_t include_dirs_space;
+
void
+add_include_directory (char *filename)
+{
+ if (include_dirs_number == include_dirs_space)
+ {
+ include_dirs = realloc (include_dirs,
+ sizeof (char *) * (include_dirs_space += 5));
+ }
+ include_dirs[include_dirs_number++] = filename;
+}
+
+/* Try to open a file called FILENAME, looking for it in the list of include
+ directories. */
+void
input_push_file (char *filename)
{
FILE *stream;
+ int i;
+
save_line_nr ();
- stream = fopen (filename, "r");
+ for (i = 0; i < include_dirs_number; i++)
+ {
+ /* TODO: The Perl code (in Common.pm, 'locate_include_file') handles a
+ volume in a path (like "A:"), possibly more general treatment with
+ File::Spec module. */
+ /* Also checks if filename is absolute. */
+ char *fullpath;
+ asprintf (&fullpath, "%s/%s", include_dirs[i], filename);
+ stream = fopen (fullpath, "r");
+ free (fullpath);
+ if (stream)
+ break;
+ }
+
if (!stream)
{
fprintf (stderr, "Could not open %s\n", filename);
Modified: trunk/parsetexi/input.h
===================================================================
--- trunk/parsetexi/input.h 2015-02-13 20:45:56 UTC (rev 6125)
+++ trunk/parsetexi/input.h 2015-02-14 14:23:57 UTC (rev 6126)
@@ -3,7 +3,7 @@
char *new_line (void);
char *next_text (void);
-void input_push_file (char *line);
-void input_push_text (char *filename);
+void input_push_text (char *line);
+void input_push_file (char *filename);
extern LINE_NR line_nr;
Modified: trunk/parsetexi/main.c
===================================================================
--- trunk/parsetexi/main.c 2015-02-13 20:45:56 UTC (rev 6125)
+++ trunk/parsetexi/main.c 2015-02-14 14:23:57 UTC (rev 6126)
@@ -30,6 +30,7 @@
exit (1);
}
init_index_commands ();
+ add_include_directory (".");
parse_texi_file (argv[1]);
dump_tree_to_perl (Root);
Modified: trunk/parsetexi/parser.c
===================================================================
--- trunk/parsetexi/parser.c 2015-02-13 20:45:56 UTC (rev 6125)
+++ trunk/parsetexi/parser.c 2015-02-14 14:23:57 UTC (rev 6126)
@@ -129,12 +129,31 @@
/* parse_texi_file */
/* 835 */
void
-parse_texi_file (char *filename)
+parse_texi_file (const char *filename_in)
{
+ char *p, *q;
char *linep, *line = 0;
ELEMENT *root = new_element (ET_text_root);
ELEMENT *preamble = 0;
+ char *filename = strdup (filename_in);
+ /* Strip off a leading directory path, by looking for the last
+ '/' in filename. */
+ p = 0;
+ q = strchr (filename, '/');
+ while (q)
+ {
+ p = q;
+ q = strchr (q + 1, '/');
+ }
+
+ if (p)
+ {
+ *p = '\0';
+ add_include_directory (filename);
+ filename = p + 1;
+ }
+
input_push_file (filename);
/* Check for preamble. */
Modified: trunk/parsetexi/parser.h
===================================================================
--- trunk/parsetexi/parser.h 2015-02-13 20:45:56 UTC (rev 6125)
+++ trunk/parsetexi/parser.h 2015-02-14 14:23:57 UTC (rev 6126)
@@ -32,7 +32,7 @@
void push_conditional_stack (enum command_id cond);
enum command_id pop_conditional_stack (void);
extern size_t conditional_number;
-void parse_texi_file (char *filename);
+void parse_texi_file (const char *filename);
int abort_empty_line (ELEMENT **current_inout, char *additional);
ELEMENT *end_paragraph (ELEMENT *current);
void isolate_last_space (ELEMENT *current, enum element_type type);
Modified: trunk/parsetexi/test-files/email.texi
===================================================================
--- trunk/parsetexi/test-files/email.texi 2015-02-13 20:45:56 UTC (rev
6125)
+++ trunk/parsetexi/test-files/email.texi 2015-02-14 14:23:57 UTC (rev
6126)
@@ -1 +1 @@
address@hidden, same place}
address@hidden bug-texinfo , same place }
Added: trunk/parsetexi/test-files/include-1.texi
===================================================================
--- trunk/parsetexi/test-files/include-1.texi (rev 0)
+++ trunk/parsetexi/test-files/include-1.texi 2015-02-14 14:23:57 UTC (rev
6126)
@@ -0,0 +1,5 @@
address@hidden Top
+
+top
+
address@hidden include-2.texi
Added: trunk/parsetexi/test-files/include-2.texi
===================================================================
--- trunk/parsetexi/test-files/include-2.texi (rev 0)
+++ trunk/parsetexi/test-files/include-2.texi 2015-02-14 14:23:57 UTC (rev
6126)
@@ -0,0 +1,3 @@
address@hidden Second
+
+second
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [6126] parsetexi include directories,
Gavin D. Smith <=