[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
branch master updated: * tp/Texinfo/Common.pm (%default_main_program_com
From: |
Patrice Dumas |
Subject: |
branch master updated: * tp/Texinfo/Common.pm (%default_main_program_command_line_options), tp/Texinfo/Config.pm (GNUT_set_main_program_default, Texinfo::MainConfig, new, get_conf, set_conf), texi2any.pl: add a scope with functions that mimics parser or converter with get_conf() and set_conf() methods, have access to Texinfo::Config informations. This allows to set a $main_configuration object in main program that is passed to functions that need information. Used in tests too, simply setting a hash reference a [...] |
Date: |
Fri, 03 Sep 2021 12:59:45 -0400 |
This is an automated email from the git hooks/post-receive script.
pertusus pushed a commit to branch master
in repository texinfo.
The following commit(s) were added to refs/heads/master by this push:
new 85c66a7 * tp/Texinfo/Common.pm
(%default_main_program_command_line_options), tp/Texinfo/Config.pm
(GNUT_set_main_program_default, Texinfo::MainConfig, new, get_conf, set_conf),
texi2any.pl: add a scope with functions that mimics parser or converter with
get_conf() and set_conf() methods, have access to Texinfo::Config informations.
This allows to set a $main_configuration object in main program that is passed
to functions that need information. Used in tests too, simply setting [...]
85c66a7 is described below
commit 85c66a7d11e62b64dbe391b5f77bd2631d3c9542
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Fri Sep 3 18:59:35 2021 +0200
* tp/Texinfo/Common.pm (%default_main_program_command_line_options),
tp/Texinfo/Config.pm (GNUT_set_main_program_default,
Texinfo::MainConfig, new, get_conf, set_conf), texi2any.pl: add
a scope with functions that mimics parser or converter with
get_conf() and set_conf() methods, have access to Texinfo::Config
informations. This allows to set a $main_configuration object in
main program that is passed to functions that need information.
Used in tests too, simply setting a hash reference and not accessing
Texinfo::Config informations.
handle FORMAT_MENU and CHECK_NORMAL_MENU_STRUCTURE more like a
normal main program option.
* tp/Texinfo/Common.pm (%default_structure_customization_values),
tp/Texinfo/XS/parsetexi/Parsetexi.pm, tp/Texinfo/ParserNonXS.pm:
remove %default_structure_customization_values.
* tp/Texinfo/Common.pm (set_output_encodings),
tp/Texinfo/Convert/Converter.pm (converter), texi2any.pl: add
set_output_encodings(), based on Texinfo::Converter::Convert
to call on main program configuration for
Texinfo::Common::output_files_open_out().
---
ChangeLog | 25 +++++++
tp/Texinfo/Common.pm | 43 ++++++++----
tp/Texinfo/Config.pm | 67 ++++++++++++++++++
tp/Texinfo/Convert/Converter.pm | 13 +---
tp/Texinfo/ParserNonXS.pm | 1 -
tp/Texinfo/XS/parsetexi/Parsetexi.pm | 3 +-
tp/t/test_utils.pl | 71 +++++++++++--------
tp/texi2any.pl | 131 ++++++++++++++++++++---------------
8 files changed, 241 insertions(+), 113 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e1dbb50..13ded9f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2021-09-03 Patrice Dumas <pertusus@free.fr>
+
+ * tp/Texinfo/Common.pm (%default_main_program_command_line_options),
+ tp/Texinfo/Config.pm (GNUT_set_main_program_default,
+ Texinfo::MainConfig, new, get_conf, set_conf), texi2any.pl: add
+ a scope with functions that mimics parser or converter with
+ get_conf() and set_conf() methods, have access to Texinfo::Config
+ informations. This allows to set a $main_configuration object in
+ main program that is passed to functions that need information.
+ Used in tests too, simply setting a hash reference and not accessing
+ Texinfo::Config informations.
+ handle FORMAT_MENU and CHECK_NORMAL_MENU_STRUCTURE more like a
+ normal main program option.
+
+
+ * tp/Texinfo/Common.pm (%default_structure_customization_values),
+ tp/Texinfo/XS/parsetexi/Parsetexi.pm, tp/Texinfo/ParserNonXS.pm:
+ remove %default_structure_customization_values.
+
+ * tp/Texinfo/Common.pm (set_output_encodings),
+ tp/Texinfo/Convert/Converter.pm (converter), texi2any.pl: add
+ set_output_encodings(), based on Texinfo::Converter::Convert
+ to call on main program configuration for
+ Texinfo::Common::output_files_open_out().
+
2021-09-02 Patrice Dumas <pertusus@free.fr>
* tp/Texinfo/Convert/Converter.pm (converter): set
diff --git a/tp/Texinfo/Common.pm b/tp/Texinfo/Common.pm
index d0d0334..70c9156 100644
--- a/tp/Texinfo/Common.pm
+++ b/tp/Texinfo/Common.pm
@@ -28,6 +28,7 @@ use 5.006;
# to determine the null file
use Config;
use File::Spec;
+use Encode;
use Texinfo::Documentlanguages;
# used in functions, but Texinfo::Convert::Texinfo uses
@@ -140,17 +141,6 @@ our %default_parser_customization_values =
(%default_parser_common_customization
%default_parser_specific_customization);
-# Customization variables set in the parser for other modules, and the
-# default values.
-our %default_structure_customization_values = (
- # following are used in Texinfo::Structuring
- 'CHECK_NORMAL_MENU_STRUCTURE' => 0, # output warnings when node with
- # automatic direction does directions in menu are not consistent
- # with sectionning, and when node directions are not consistent
- # with menu directions. Used in complete_node_tree_with_menus()
-);
-
-
# @-commands that can be used multiple time in a document and default
# values. Associated with customization values too.
our %document_settable_multiple_at_commands = (
@@ -214,7 +204,6 @@ our %default_converter_command_line_options = (
'SPLIT' => undef, # --split
'HEADERS' => 1, # --headers. Used to set diverse
customization options
# in main program. Only directly used in
HTML converter
- 'FORMAT_MENU' => undef, # --headers. Modified by the format.
'NODE_FILES' => undef, # --node-files. Depend on SPLIT
'VERBOSE' => undef, # --verbose
'OUTFILE' => undef, # --output If non split and not ending
by /.
@@ -229,14 +218,18 @@ our %default_converter_command_line_options = (
# converter defaults.
);
-# only used in main program, defaults documented in manual
+# used in main program, defaults documented in manual
my %default_main_program_command_line_options = (
+ # only in main program
'MACRO_EXPAND' => undef, # --macro-expand
# used in HTML only, called from main program
'INTERNAL_LINKS' => undef, # --internal-links
'ERROR_LIMIT' => 100, # --error-limit
'FORCE' => undef, # --force
'NO_WARN' => undef, # --no-warn
+
+ # following also used in converters
+ 'FORMAT_MENU' => 'menu', # --headers. Modified by the format.
);
# used in main program, defaults documented in manual
@@ -247,6 +240,10 @@ my %default_main_program_customization = (
'TREE_TRANSFORMATIONS' => undef,
'DUMP_TREE' => undef,
'DUMP_TEXI' => undef,
+ 'CHECK_NORMAL_MENU_STRUCTURE' => 0, # output warnings when node with
+ # automatic direction does directions in menu are not consistent
+ # with sectionning, and when node directions are not consistent
+ # with menu directions.
);
# defaults for the main program. In general transmitted to converters as
defaults
@@ -282,7 +279,6 @@ our @variable_string_settables = (
'COPIABLE_ANCHORS',
'CHAPTER_HEADER_LEVEL',
'CHECK_HTMLXREF',
-'CHECK_NORMAL_MENU_STRUCTURE',
'CLOSE_QUOTE_SYMBOL',
'COMPLEX_FORMAT_IN_TABLE',
'CONTENTS_OUTPUT_LOCATION',
@@ -1328,6 +1324,25 @@ sub warn_unknown_split($) {
return @messages;
}
+# in Texinfo::Structuring?
+sub set_output_encodings($$)
+{
+ my $configuration_informations = shift;
+ my $parser_informations = shift;
+
+ $configuration_informations->set_conf('OUTPUT_ENCODING_NAME',
+ $parser_informations->{'input_encoding_name'})
+ if ($parser_informations->{'input_encoding_name'});
+ if (!$configuration_informations->get_conf('OUTPUT_PERL_ENCODING')
+ and $configuration_informations->get_conf('OUTPUT_ENCODING_NAME')) {
+ my $perl_encoding
+ =
Encode::resolve_alias($configuration_informations->get_conf('OUTPUT_ENCODING_NAME'));
+ if ($perl_encoding) {
+ $configuration_informations->set_conf('OUTPUT_PERL_ENCODING',
$perl_encoding);
+ }
+ }
+}
+
# This should do the job, or at least don't do wrong if $self
# is not defined, as could be the case if called from
# Texinfo::Convert::Text.
diff --git a/tp/Texinfo/Config.pm b/tp/Texinfo/Config.pm
index 0cd2582..dfb3cbb 100644
--- a/tp/Texinfo/Config.pm
+++ b/tp/Texinfo/Config.pm
@@ -157,6 +157,23 @@ sub GNUT_set_from_cmdline($$) {
return 1;
}
+# add default based, for instance, on the format.
+sub GNUT_set_main_program_default($$) {
+ my $var = shift;
+ my $value = shift;
+
+ ($var, $value) = _GNUT_map_obsolete_options($var, $value);
+ if (!defined($var)) {
+ return 1;
+ }
+
+ return 0 if (defined($cmdline_options->{$var})
+ or defined($init_files_options->{$var}));
+ $main_program_default_options->{$var} = $value;
+ return 1;
+}
+
+
# called both from main program and init files.
sub texinfo_add_to_option_list($$)
{
@@ -294,4 +311,54 @@ sub GNUT_get_types_conversion()
}
+package Texinfo::MainConfig;
+
+# the objective of this small package is to be in another
+# scope than init files, still have access to configuration
+# options, and setup blessed object that can call a
+# get_conf() and set_conf() method like parser or converter
+# that return the same as Texinfo::Config::texinfo_get_conf
+
+# this is used in tests too. In the tests nothing from
+# Texinfo::Config is used, and it is assumed that the
+# configuration is available as a hash reference key
+# value, which is the case if new is called with an hash
+# reference argument.
+
+my $additional_conf = {};
+
+sub new(;$)
+{
+ my $options = shift;
+ if (defined($options)) {
+ # creates a new object based on input hash reference
+ %$additional_conf = %$options;
+ bless $options;
+ } else {
+ # use Texinfo::Config
+ bless $cmdline_options;
+ }
+}
+
+sub get_conf($$)
+{
+ my $self = shift;
+ my $var = shift;
+
+ if (defined($additional_conf->{$var})) {
+ return $additional_conf->{$var};
+ }
+ return Texinfo::Config::texinfo_get_conf($var);
+}
+
+sub set_conf($$$)
+{
+ my $self = shift;
+ my $var = shift;
+ my $val = shift;
+ # overrides command line
+ $additional_conf->{$var} = $val;
+}
+
+
1;
diff --git a/tp/Texinfo/Convert/Converter.pm b/tp/Texinfo/Convert/Converter.pm
index 54b2b33..3cb3152 100644
--- a/tp/Texinfo/Convert/Converter.pm
+++ b/tp/Texinfo/Convert/Converter.pm
@@ -219,17 +219,8 @@ sub converter(;$)
}
}
- $converter->set_conf('OUTPUT_ENCODING_NAME',
- $converter->{'parser_info'}->{'input_encoding_name'})
- if ($converter->{'parser_info'}->{'input_encoding_name'});
- if (!$converter->get_conf('OUTPUT_PERL_ENCODING')
- and $converter->get_conf('OUTPUT_ENCODING_NAME')) {
- my $perl_encoding
- = Encode::resolve_alias($converter->get_conf('OUTPUT_ENCODING_NAME'));
- if ($perl_encoding) {
- $converter->set_conf('OUTPUT_PERL_ENCODING', $perl_encoding);
- }
- }
+ Texinfo::Common::set_output_encodings($converter,
+ $converter->{'parser_info'});
# turn the array to a hash for speed. Not sure it really matters for such
# a small array.
diff --git a/tp/Texinfo/ParserNonXS.pm b/tp/Texinfo/ParserNonXS.pm
index 6731f68..7e462f1 100644
--- a/tp/Texinfo/ParserNonXS.pm
+++ b/tp/Texinfo/ParserNonXS.pm
@@ -152,7 +152,6 @@ my %parser_state_configuration = (
my %parser_default_configuration = (
%parser_state_configuration,
%Texinfo::Common::default_parser_customization_values,
- %Texinfo::Common::default_structure_customization_values,
);
# the other possible keys for the parser state are:
diff --git a/tp/Texinfo/XS/parsetexi/Parsetexi.pm
b/tp/Texinfo/XS/parsetexi/Parsetexi.pm
index d8604fe..c42842a 100644
--- a/tp/Texinfo/XS/parsetexi/Parsetexi.pm
+++ b/tp/Texinfo/XS/parsetexi/Parsetexi.pm
@@ -123,8 +123,7 @@ sub parser (;$$)
set_accept_internalvalue();
} elsif ($key eq 'ENABLE_ENCODING'
or $key eq 'novalidate'
- or $key eq 'registrar'
- or
defined($Texinfo::Common::default_structure_customization_values{$key})) {
+ or $key eq 'registrar') {
# no action needed
} else {
warn "ignoring parser configuration value \"$key\"\n";
diff --git a/tp/t/test_utils.pl b/tp/t/test_utils.pl
index 97f9753..0b2ae41 100644
--- a/tp/t/test_utils.pl
+++ b/tp/t/test_utils.pl
@@ -516,7 +516,7 @@ sub filter_elements_keys {[grep
{!$avoided_keys_elements{$_}}
sub set_converter_option_defaults($$$)
{
my $converter_options = shift;
- my $parser_options = shift;
+ my $main_configuration = shift;
my $format = shift;
$converter_options = {} if (!defined($converter_options));
if (!defined($converter_options->{'EXPANDED_FORMATS'})) {
@@ -549,11 +549,11 @@ sub convert_to_plaintext($$$$$$;$)
my $format = shift;
my $tree = shift;
my $parser = shift;
- my $parser_options = shift;
+ my $main_configuration = shift;
my $converter_options = shift;
$converter_options
= set_converter_option_defaults($converter_options,
- $parser_options, $format);
+ $main_configuration, $format);
if (!defined($converter_options->{'OUTFILE'})
and defined($converter_options->{'SUBDIR'})) {
$converter_options->{'OUTFILE'}
@@ -584,12 +584,12 @@ sub convert_to_info($$$$$;$)
my $format = shift;
my $tree = shift;
my $parser = shift;
- my $parser_options = shift;
+ my $main_configuration = shift;
my $converter_options = shift;
# FIXME plaintext too?
$converter_options
= set_converter_option_defaults($converter_options,
- $parser_options, $format);
+ $main_configuration, $format);
my $converter =
Texinfo::Convert::Info->converter ({'DEBUG' => $self->{'DEBUG'},
@@ -610,11 +610,11 @@ sub convert_to_html($$$$$$;$)
my $format = shift;
my $tree = shift;
my $parser = shift;
- my $parser_options = shift;
+ my $main_configuration = shift;
my $converter_options = shift;
$converter_options
= set_converter_option_defaults($converter_options,
- $parser_options, 'html');
+ $main_configuration, 'html');
$converter_options->{'SPLIT'} = 0
if ($format eq 'html_text'
@@ -643,11 +643,11 @@ sub convert_to_xml($$$$$$;$)
my $format = shift;
my $tree = shift;
my $parser = shift;
- my $parser_options = shift;
+ my $main_configuration = shift;
my $converter_options = shift;
$converter_options
= set_converter_option_defaults($converter_options,
- $parser_options, 'xml');
+ $main_configuration, 'xml');
my $converter =
Texinfo::Convert::TexinfoXML->converter ({'DEBUG' => $self->{'DEBUG'},
@@ -675,11 +675,11 @@ sub convert_to_docbook($$$$$$;$)
my $format = shift;
my $tree = shift;
my $parser = shift;
- my $parser_options = shift;
+ my $main_configuration = shift;
my $converter_options = shift;
$converter_options
= set_converter_option_defaults($converter_options,
- $parser_options, 'docbook');
+ $main_configuration, 'docbook');
my $converter =
Texinfo::Convert::DocBook->converter ({'DEBUG' => $self->{'DEBUG'},
@@ -706,11 +706,11 @@ sub convert_to_latex($$$$$$;$)
my $format = shift;
my $tree = shift;
my $parser = shift;
- my $parser_options = shift;
+ my $main_configuration = shift;
my $converter_options = shift;
$converter_options
= set_converter_option_defaults($converter_options,
- $parser_options, 'latex');
+ $main_configuration, 'latex');
my $converter =
Texinfo::Convert::LaTeX->converter ({'DEBUG' => $self->{'DEBUG'},
@@ -797,6 +797,14 @@ sub test($$)
delete $parser_options->{'SIMPLE_MENU'};
}
+ # always set FORMAT_MENU to menu, which is the default for parser
+ my $added_main_configurations = {'FORMAT_MENU' => 'menu'};
+ if ($parser_options->{'CHECK_NORMAL_MENU_STRUCTURE'}) {
+ $added_main_configurations->{'CHECK_NORMAL_MENU_STRUCTURE'}
+ = $parser_options->{'CHECK_NORMAL_MENU_STRUCTURE'};
+ delete $parser_options->{'CHECK_NORMAL_MENU_STRUCTURE'};
+ }
+
my %todos;
if ($parser_options->{'todo'}) {
%todos = %{$parser_options->{'todo'}};
@@ -826,11 +834,13 @@ sub test($$)
}
delete $parser_options->{'init_files'};
}
-
- my $parser = Texinfo::Parser::parser({'INCLUDE_DIRECTORIES' => [
- $srcdir.'t/include/'],
+ my $completed_parser_options = {'INCLUDE_DIRECTORIES' =>
[$srcdir.'t/include/'],
'DEBUG' => $self->{'DEBUG'},
- %$parser_options});
+ %$parser_options};
+ my $main_configuration = Texinfo::MainConfig::new({
%$completed_parser_options,
+
%$added_main_configurations });
+
+ my $parser = Texinfo::Parser::parser($completed_parser_options);
# take the initial values to record only if there is something new
my $initial_index_names = $parser->indices_information();
@@ -850,7 +860,8 @@ sub test($$)
my $parser_informations = $parser->global_informations();
my ($labels, $targets_list, $nodes_list) = $parser->labels_information();
my $refs = $parser->internal_references_information();
- Texinfo::Structuring::associate_internal_references($registrar, $parser,
+ Texinfo::Structuring::associate_internal_references($registrar,
+ $main_configuration,
$parser_informations, $labels, $refs);
my $floats = $parser->floats_information();
@@ -859,29 +870,30 @@ sub test($$)
my $structure_informations = {};
my ($sectioning_root, $sections_list)
= Texinfo::Structuring::sectioning_structure($registrar,
- $parser, $result);
+ $main_configuration,
$result);
if ($sectioning_root) {
- Texinfo::Structuring::warn_non_empty_parts($registrar, $parser,
$global_commands);
+ Texinfo::Structuring::warn_non_empty_parts($registrar, $main_configuration,
+ $global_commands);
$structure_informations->{'sectioning_root'} = $sectioning_root;
$structure_informations->{'sections_list'} = $sections_list;
}
Texinfo::Structuring::number_floats($floats);
- Texinfo::Structuring::set_menus_node_directions($registrar, $parser,
+ Texinfo::Structuring::set_menus_node_directions($registrar,
$main_configuration,
$parser_informations, $global_commands, $nodes_list,
$labels);
- my $top_node = Texinfo::Structuring::nodes_tree($registrar, $parser,
+ my $top_node = Texinfo::Structuring::nodes_tree($registrar,
$main_configuration,
$parser_informations, $nodes_list,
$labels);
if (defined($top_node)) {
$structure_informations->{'top_node'} = $top_node;
}
if (defined($nodes_list)) {
- Texinfo::Structuring::complete_node_tree_with_menus($registrar, $parser,
- $nodes_list,
$top_node);
- Texinfo::Structuring::check_nodes_are_referenced($registrar, $parser,
- $nodes_list, $top_node,
- $labels, $refs);
+ Texinfo::Structuring::complete_node_tree_with_menus($registrar,
+ $main_configuration, $nodes_list, $top_node);
+ Texinfo::Structuring::check_nodes_are_referenced($registrar,
+ $main_configuration, $nodes_list,
+ $top_node, $labels, $refs);
}
my ($errors, $error_nrs) = $registrar->errors();
@@ -900,7 +912,8 @@ sub test($$)
my $sorted_index_entries;
if ($merged_index_entries) {
$sorted_index_entries
- = Texinfo::Structuring::sort_indices_by_letter($parser, $registrar,
$parser,
+ = Texinfo::Structuring::sort_indices_by_letter($parser, $registrar,
+ $main_configuration,
$merged_index_entries, $index_names);
}
if ($simple_menus) {
@@ -953,7 +966,7 @@ sub test($$)
($converted_errors{$format}, $converted{$format})
= &{$formats{$format}}($self, $test_name, $format_type,
$result, $parser,
- $parser_options, $format_converter_options);
+ $main_configuration,
$format_converter_options);
$converted_errors{$format} = undef if (!@{$converted_errors{$format}});
# output converted result and errors in files if $arg_output is set
diff --git a/tp/texi2any.pl b/tp/texi2any.pl
index 0f28273..5dcc5b8 100755
--- a/tp/texi2any.pl
+++ b/tp/texi2any.pl
@@ -331,6 +331,10 @@ sub set_from_cmdline($$) {
return &Texinfo::Config::GNUT_set_from_cmdline(@_);
}
+sub set_main_program_default($$) {
+ return &Texinfo::Config::GNUT_set_main_program_default(@_);
+}
+
sub get_conf($) {
return &Texinfo::Config::texinfo_get_conf(@_);
}
@@ -376,14 +380,17 @@ my @prepend_dirs = ();
#
# There is in addition $parser_options for parser related informations
# that are not set otherwise.
-# The configuration text values are later on copied over to the parser if
-# they are parser options, with format specific options also set with
-# less precedence.
+# The configuration values are later on copied over to the parser if
+# they are parser options.
my $parser_options = {'values' => {'txicommandconditionals' => 1}};
my $init_files_options = Texinfo::Config::GNUT_initialize_config(
$real_command_name, $main_program_default_options, $cmdline_options);
+# setup a configuration object which defines get_conf and gives the same as
+# get_conf() in main program
+my $main_configuration = Texinfo::MainConfig::new();
+
# read initialization files. Better to do that after
# Texinfo::Config::GNUT_initialize_config() in case loaded
# files replace default options.
@@ -929,7 +936,11 @@ sub process_config {
process_config($cmdline_options);
-# FIXME do this here or inside format-specific code?
+# The configuration API is setup such that the loading of init
+# files can be done here and not in format specific code. There is
+# only one format, HTML, with use of complex customization (besides setting
+# customization options), so maybe this would need to be revisited
+# if another format uses complex customization.
my $latex2html_file = 'latex2html.pm';
if (defined($cmdline_options->{'HTML_MATH'})
and $cmdline_options->{'HTML_MATH'} eq 'l2h') {
@@ -1033,29 +1044,44 @@ if (defined($formats_table{$format}->{'module'})) {
.'->converter(@_)};';
}
+# For now, FORMAT_MENU is the only variable that can be set from converter
defaults
+# for the main program structuring and for the parser.
+# This could be done for more variables if
+# converter default becomes relevant for more variables, either
+# for the parser or the main program.
+
+# Specific variable for 'FORMAT_MENU' to keep the converter information
+# even if the command line higher precedence option is set in case
+# command line is set_format_menu_from_cmdline_header.
+my $conversion_format_menu_default;
if (defined($formats_table{$format}->{'module'})) {
$converter_class = $formats_table{$format}->{'module'};
- # $cmdline_options is passed to have TEXI2HTML set for conversion to
- # HTML
+ # $cmdline_options is passed to have command line settings, here
+ # in practice TEXI2HTML set, for conversion to HTML to select
+ # possibly different customization variable values.
%converter_defaults = $converter_class->converter_defaults($cmdline_options);
-
- # set FORMAT_MENU to the output format default, if not nomenu. We do not
- # simply let it be set by taking %converter_defaults values if not already
set
- # below in case the default $converter_defaults{'FORMAT_MENU'} is nomenu, but
- # for the other cases we could simply unset
$converter_defaults{'FORMAT_MENU'}
- # and let the converter default value be
- if (defined(get_conf('FORMAT_MENU'))
- and get_conf('FORMAT_MENU') eq 'set_format_menu_from_cmdline_header') {
- if (defined($converter_defaults{'FORMAT_MENU'})
- and $converter_defaults{'FORMAT_MENU'} ne 'nomenu') {
- set_from_cmdline('FORMAT_MENU', $converter_defaults{'FORMAT_MENU'});
- } else {
- set_from_cmdline('FORMAT_MENU', 'menu');
- }
+ $conversion_format_menu_default = undef;
+ if (defined($converter_defaults{'FORMAT_MENU'})) {
+ # could be done for other customization options
+ set_main_program_default('FORMAT_MENU',
$converter_defaults{'FORMAT_MENU'});
+ # for FORMAT_MENU need in addition to have the value if
+ # command-line set to 'set_format_menu_from_cmdline_header'
+ $conversion_format_menu_default = $converter_defaults{'FORMAT_MENU'};
+ } else {
+ # this happens for the plaintexinfo format for which nothing
+ # is set.
}
-} else {
- if (defined(get_conf('FORMAT_MENU'))
- and get_conf('FORMAT_MENU') eq 'set_format_menu_from_cmdline_header') {
+}
+
+# special case for FORMAT_MENU of delayed setting based in
+# some case on converter
+if (defined(get_conf('FORMAT_MENU'))
+ and get_conf('FORMAT_MENU') eq 'set_format_menu_from_cmdline_header') {
+ # set FORMAT_MENU to the output format default, if not nomenu
+ if (defined($conversion_format_menu_default)
+ and $conversion_format_menu_default ne 'nomenu') {
+ set_from_cmdline('FORMAT_MENU', $conversion_format_menu_default);
+ } else {
set_from_cmdline('FORMAT_MENU', 'menu');
}
}
@@ -1063,25 +1089,14 @@ if (defined($formats_table{$format}->{'module'})) {
# using no warnings is wrong, but a way to avoid a spurious warning.
no warnings 'once';
my @parser_settable_options =
keys(%Texinfo::Common::default_parser_customization_values);
-push @parser_settable_options,
keys(%Texinfo::Common::default_structure_customization_values);
-# Copy some of the customization variables into the parser options.
-# Here customization options set on the command line and set by
-# the converter associated with the output format, command line
-# taking precedence.
+# Copy relevant customization variables into the parser options.
foreach my $parser_settable_option (@parser_settable_options) {
if (defined(get_conf($parser_settable_option))) {
$parser_options->{$parser_settable_option}
= get_conf($parser_settable_option);
- } elsif (defined($converter_class)
- and defined($converter_defaults{$parser_settable_option})) {
- $parser_options->{$parser_settable_option}
- = $converter_defaults{$parser_settable_option};
}
}
-#print STDERR "V ".join('|', sort(keys(%{$parser_options->{'values'}})))."\n";
-
-
# Main processing, process all the files given on the command line
my @input_files = @ARGV;
@@ -1127,6 +1142,7 @@ while(@input_files) {
@prepended_include_directories =
(@prepend_dirs, @prepended_include_directories);
+ # FIXME isn't that done for each output file?
unshift @{$parser_file_options->{'INCLUDE_DIRECTORIES'}},
@prepended_include_directories;
@@ -1168,6 +1184,9 @@ while(@input_files) {
Texinfo::Transformations::set_menus_to_simple_menu($nodes_list);
}
+ my $parser_informations = $parser->global_informations();
+ Texinfo::Common::set_output_encodings($main_configuration,
$parser_informations);
+
if (defined(get_conf('MACRO_EXPAND')) and $file_number == 0) {
require Texinfo::Convert::Texinfo;
my $texinfo_text = Texinfo::Convert::Texinfo::convert_to_texinfo($tree);
@@ -1175,7 +1194,7 @@ while(@input_files) {
my $macro_expand_file = get_conf('MACRO_EXPAND');
my $macro_expand_files_information = {};
my $macro_expand_fh = Texinfo::Common::output_files_open_out(
- $macro_expand_files_information, $parser, $macro_expand_file);
+ $macro_expand_files_information, $main_configuration,
$macro_expand_file);
my $error_macro_expand_file;
if (defined($macro_expand_fh)) {
print $macro_expand_fh $texinfo_text;
@@ -1232,8 +1251,8 @@ while(@input_files) {
}
my $refs = $parser->internal_references_information();
- my $parser_informations = $parser->global_informations();
- Texinfo::Structuring::associate_internal_references($registrar, $parser,
+ Texinfo::Structuring::associate_internal_references($registrar,
+ $main_configuration,
$parser_informations, $labels, $refs);
# filled with informations obtained through Texinfo::Structuring
# and usefull in converters.
@@ -1243,14 +1262,14 @@ while(@input_files) {
# every format needs the sectioning structure
my ($sectioning_root, $sections_list)
= Texinfo::Structuring::sectioning_structure($registrar,
- $parser, $tree);
+ $main_configuration, $tree);
my $global_commands = $parser->global_commands_information();
if ($sectioning_root) {
$structure_informations->{'sectioning_root'} = $sectioning_root;
$structure_informations->{'sections_list'} = $sections_list;
if (!$formats_table{$format}->{'no_warn_non_empty_parts'}) {
- Texinfo::Structuring::warn_non_empty_parts($registrar, $parser,
+ Texinfo::Structuring::warn_non_empty_parts($registrar,
$main_configuration,
$global_commands);
}
}
@@ -1271,28 +1290,28 @@ while(@input_files) {
my $top_node;
if ($formats_table{$format}->{'nodes_tree'}) {
- # it is not get_conf('FORMAT_MENU') but $parser_options as
- # $parser_options is set to the output default and then replaced.
- # with get_conf('FORMAT_MENU') if needed.
- # 'FORMAT_MENU' may not be defined in some special cases,
- # for instance if format is structure.
- if (not defined($parser_options->{'FORMAT_MENU'})
- or $parser_options->{'FORMAT_MENU'} eq 'menu') {
- Texinfo::Structuring::set_menus_node_directions($registrar, $parser,
- $parser_informations, $global_commands, $nodes_list, $labels);
+ # FIXME makes implicitely menu the default here. 'FORMAT_MENU'
+ # not being set here happens rarely, when there is a format, but the
+ # format does not define 'FORMAT_MENU' (case of plaintexinfo).
+ if (not defined(get_conf('FORMAT_MENU'))
+ or get_conf('FORMAT_MENU') eq 'menu') {
+ Texinfo::Structuring::set_menus_node_directions($registrar,
+ $main_configuration, $parser_informations, $global_commands,
+ $nodes_list, $labels);
}
- $top_node = Texinfo::Structuring::nodes_tree($registrar, $parser,
+ $top_node = Texinfo::Structuring::nodes_tree($registrar,
$main_configuration,
$parser_informations, $nodes_list, $labels);
if (defined($top_node)) {
$structure_informations->{'top_node'} = $top_node;
}
- if (not defined($parser_options->{'FORMAT_MENU'})
- or $parser_options->{'FORMAT_MENU'} eq 'menu') {
+ if (not defined(get_conf('FORMAT_MENU'))
+ or get_conf('FORMAT_MENU') eq 'menu') {
if (defined($nodes_list)) {
- Texinfo::Structuring::complete_node_tree_with_menus($registrar,
$parser,
- $nodes_list, $top_node);
- Texinfo::Structuring::check_nodes_are_referenced($registrar, $parser,
- $nodes_list, $top_node,
+
+ Texinfo::Structuring::complete_node_tree_with_menus($registrar,
+ $main_configuration, $nodes_list, $top_node);
+ Texinfo::Structuring::check_nodes_are_referenced($registrar,
+ $main_configuration, $nodes_list,
$top_node,
$labels, $refs);
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch master updated: * tp/Texinfo/Common.pm (%default_main_program_command_line_options), tp/Texinfo/Config.pm (GNUT_set_main_program_default, Texinfo::MainConfig, new, get_conf, set_conf), texi2any.pl: add a scope with functions that mimics parser or converter with get_conf() and set_conf() methods, have access to Texinfo::Config informations. This allows to set a $main_configuration object in main program that is passed to functions that need information. Used in tests too, simply setting a hash reference a [...],
Patrice Dumas <=