diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/texinfo/texinfo/tp/Texinfo/Convert/TextContent.pm |
Initial commit
Diffstat (limited to 'macros/texinfo/texinfo/tp/Texinfo/Convert/TextContent.pm')
-rw-r--r-- | macros/texinfo/texinfo/tp/Texinfo/Convert/TextContent.pm | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/macros/texinfo/texinfo/tp/Texinfo/Convert/TextContent.pm b/macros/texinfo/texinfo/tp/Texinfo/Convert/TextContent.pm new file mode 100644 index 0000000000..2b4c8d44e6 --- /dev/null +++ b/macros/texinfo/texinfo/tp/Texinfo/Convert/TextContent.pm @@ -0,0 +1,165 @@ +# TextContent.pm: return the text contents stripped of commands +# +# Copyright 2012-2018 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, +# or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Original author: Patrice Dumas <pertusus@free.fr> + +package Texinfo::Convert::TextContent; + +use 5.00405; +use strict; + +use Texinfo::Convert::Converter; +use Texinfo::Convert::Text; +use Texinfo::Common; + +use vars qw($VERSION @ISA); +@ISA = qw(Texinfo::Convert::Converter); + +my %ignored_brace_commands; +# Handle better @errormsg? +foreach my $ignored_brace_command ('hyphenation', 'errormsg') { + $ignored_brace_commands{$ignored_brace_command} = 1; +} +my %ignored_block_commands; +foreach my $ignored_command ( + 'html', 'tex', 'xml', 'docbook', 'ignore', 'macro', 'rmacro') { + $ignored_block_commands{$ignored_command} = 1; +} + +my %ignored_types; +foreach my $type ('empty_line_after_command', 'preamble', + 'empty_spaces_after_command', + 'empty_spaces_before_paragraph', + 'empty_spaces_after_close_brace') { + $ignored_types{$type} = 1; +} + +my %defaults = ( + 'SHOW_MENU' => 1, + 'OUTFILE' => '-', +); + +sub converter_defaults($$) +{ + return %defaults; +} + +sub converter_initialize($) +{ + my $self = shift; + + %{$self->{'formatting_misc_commands'}} + = %Texinfo::Convert::Text::formatting_misc_commands; + + if ($self->get_conf('TEXTCONTENT_COMMENT')) { + $self->{'formatting_misc_commands'}->{'c'} = 1; + $self->{'formatting_misc_commands'}->{'comment'} = 1; + } +} + +sub convert_tree($$) +{ + my $self = shift; + my $root = shift; + + return $self->_convert($root); +} + +sub convert($$) +{ + my $self = shift; + my $root = shift; + + return $self->_convert($root); +} + +sub _convert($$); + +sub _convert($$) +{ + my $self = shift; + my $root = shift; + + return '' if (!($root->{'type'} and $root->{'type'} eq 'def_line') + and (($root->{'type'} and $ignored_types{$root->{'type'}}) + or ($root->{'cmdname'} + and ($ignored_brace_commands{$root->{'cmdname'}} + or ($ignored_block_commands{$root->{'cmdname'}} + and !(defined($self->{'expanded_formats_hash'}) + and $self->{'expanded_formats_hash'}->{$root->{'cmdname'}})) + or ($Texinfo::Common::inline_format_commands{$root->{'cmdname'}} + and (!$root->{'extra'}->{'format'} + or !$self->{'expanded_formats_hash'}->{$root->{'extra'}->{'format'}})) + or ($root->{'cmdname'} eq 'menu' and !$self->get_conf('SHOW_MENU')) + # here ignore most of the misc commands + or ($root->{'args'} and $root->{'args'}->[0] + and $root->{'args'}->[0]->{'type'} + and ($root->{'args'}->[0]->{'type'} eq 'line_arg' + or $root->{'args'}->[0]->{'type'} eq 'misc_arg') + and !$self->{'formatting_misc_commands'}->{$root->{'cmdname'}}))))); + if (defined($root->{'text'})) { + return $root->{'text'}; + } + if (defined($root->{'cmdname'})) { + if (exists($Texinfo::Common::no_brace_commands{$root->{'cmdname'}})) { + return $Texinfo::Common::no_brace_commands{$root->{'cmdname'}}; + } elsif ($root->{'cmdname'} eq 'today') { + my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) + = localtime(time); + $year += ($year < 70) ? 2000 : 1900; + return "$Texinfo::Common::MONTH_NAMES[$mon] $mday, $year"; + } elsif (defined($Texinfo::Convert::Text::text_brace_no_arg_commands{$root->{'cmdname'}})) { + return Texinfo::Convert::Text::brace_no_arg_command($root, undef); + } elsif ($Texinfo::Common::accent_commands{$root->{'cmdname'}}) { + my %options = Texinfo::Common::_convert_text_options($self); + my $result = Texinfo::Convert::Text::text_accents ($root, + $options{'enabled_encoding'}); + return $result; + } + } + my $result = ''; + if ($root->{'args'} + and (!$root->{'cmdname'} + or !$Texinfo::Common::block_item_commands{$root->{'cmdname'}})) { + my $args; + if ($root->{'cmdname'} + and $Texinfo::Common::inline_format_commands{$root->{'cmdname'}}) { + my @args = @{$root->{'args'}}; + shift @args; + $args = \@args; + } else { + $args = $root->{'args'}; + } + foreach my $arg (@{$args}) { + $result .= _convert ($self, $arg); + } + } + if ($root->{'contents'}) { + foreach my $content (@{$root->{'contents'}}) { + $result .= _convert ($self, $content); + } + } + $result = '{'.$result.'}' + if ($root->{'type'} and $root->{'type'} eq 'bracketed' + and (!$root->{'parent'}->{'type'} or + ($root->{'parent'}->{'type'} ne 'block_line_arg' + and $root->{'parent'}->{'type'} ne 'line_arg'))); + + return $result; +} + +1; |