diff options
Diffstat (limited to 'Build/source/utils/texi2html/examples/roff.init')
-rw-r--r-- | Build/source/utils/texi2html/examples/roff.init | 1165 |
1 files changed, 1165 insertions, 0 deletions
diff --git a/Build/source/utils/texi2html/examples/roff.init b/Build/source/utils/texi2html/examples/roff.init new file mode 100644 index 00000000000..221cb214cbf --- /dev/null +++ b/Build/source/utils/texi2html/examples/roff.init @@ -0,0 +1,1165 @@ +# -*-perl-*- + +main::load_init_file('', 'noheaders.init'); + +$SPLIT = 'none'; +@EXPAND = ('info'); +$USE_ISO = 0; +#$SHOW_MENU = 0; +$SMALL_RULE = ''; +$DEFAULT_RULE = ''; +$MIDDLE_RULE = ''; +$BIG_RULE = ''; +$NODE_FILE_EXTENSION = "roff"; +$EXTENSION = "roff"; +$MENU_SYMBOL = '*'; +$AVOID_MENU_REDUNDANCY = 0; + +$print_Top = \&T2H_ROFF_print_Top; +$print_misc = \&T2H_ROFF_print_misc; +$print_page_head = \&T2H_ROFF_print_page_head; +$print_page_foot = \&T2H_ROFF_print_page_foot; +$toc_body = \&T2H_ROFF_toc_body; +$titlepage = \&T2H_ROFF_titlepage; + +sub T2H_ROFF_print_page_head +{ + my $fh = shift; + print $fh <<EOT; +.nr _- 0 +.tr \\(is' +.tr \\(if` +.tr \\(pd" + +$AFTER_BODY_OPEN + +EOT + print $fh $Texi2HTML::THISDOC{'copying'} . "\n"; + print $fh "" . &$comment("Created on $Texi2HTML::THISDOC{today} by $Texi2HTML::THISDOC{program}\n"); + print $fh "" . &$comment($Texi2HTML::THISDOC{program_authors}); + print $fh ".ds St " . protect_spaces($Texi2HTML::THISDOC{'title'}) . "\n"; + print $fh '.oh \'\\\\*(St\'\'%\'' ."\n".'.eh \'%\'\'\\\\*(St\'' . "\n"; +} + +sub T2H_ROFF_print_page_foot +{ + my $fh = shift; + my $program_string = program_string(); + print $fh <<EOT; +.br +.pp +$program_string +EOT +} + +sub T2H_ROFF_print_Top($$) +{ + my $fh = shift; + my $has_top_heading = shift; + + my $buttons = \@MISC_BUTTONS; + &$print_head_navigation($fh, $buttons); + print $fh $Texi2HTML::TITLEPAGE; + main::print_lines($fh, $Texi2HTML::THIS_SECTION); +} + +sub T2H_ROFF_print_misc +{ + my $fh = shift; + &$print_misc_header($fh); + main::print_lines($fh); + &$print_misc_footer($fh); +} + +sub T2H_ROFF_titlepage () +{ + my $result = ''; + if (@{$Texi2HTML::THISDOC{'titles'}} + or @{$Texi2HTML::THISDOC{'subtitles'}} + or @{$Texi2HTML::THISDOC{'authors'}}) + { + foreach my $title (@{$Texi2HTML::THISDOC{'titles'}}) + { + $result .= ".sz +10\n.ce\n" . protect_spaces($title) . "\n.sz -10\n"; + } + foreach my $subtitle (@{$Texi2HTML::THISDOC{'subtitles'}}) + { + $result .= ".sz +4\n.ce\n" . protect_spaces($subtitle) . "\n.sz -4\n"; + } + $result .= ".sp 4\n" if ($result ne ''); + foreach my $author (@{$Texi2HTML::THISDOC{'authors'}}) + { + $result .= protect_spaces($author) . "\n.br\n"; + } + $result .= ".sp 2\n" if (@{$Texi2HTML::THISDOC{'authors'}}); + } + if (($result ne '') or ($Texi2HTML::TITLEPAGE ne '')) + { + $Texi2HTML::TITLEPAGE = ".tp\n" . $result . $Texi2HTML::TITLEPAGE . ".++ C\n"; + } +} + +######################################################################## +# Control of formatting: +# 1.) For some changes, it is often enough to change the value of +# some global map. It might necessitate building a little +# function along with the change in hash, if the change is the use +# of another function (in style_map). +# 2.) For other changes, reimplement one of the t2h_default_<fnc>* routines, +# give them another name, and assign them to the respective +# $<fnc> variable (below). + + +# +# This hash should have keys corresponding with the nonletter command accent +# whose following character is considered to be the argument +# This hash associates an accent macro to the ISO name for the accent if any. +# The customary use of this map is to find the ISO name appearing in html +# entity (like é) associated with a texinfo accent macro. +# +# The keys of the hash are +# ": umlaut +# ~: tilda accent +# ^: circumflex accent +# `: grave accent +# ': acute accent +# =: macron accent +%accent_map = ( + '"', ':', + '~', '~', + '^', '^', + '`', '`', + "'", "'", + '=', '', + ); + +# +# texinfo "simple things" (@foo) to HTML ones +# +%simple_map = ( +# "*", "\n.br\n", + ' ', '\ ', + "\t", "\\\t", + "\n", "\\\n", + # "­" or "­" could also be possible for @-, but it seems + # that some browser will consider this as an always visible hyphen mark + # which is not what we want (see http://www.cs.tut.fi/~jkorpela/shy.html) + '-', '', # hyphenation hint + '|', '', # used in formatting commands @evenfooting and friends + '/', '', + # spacing commands + ':', '', + '!', '!', + '?', '?', + '.', '\&.', + '@', '@', + '}', '}', + '{', '{', + ); + +# this map is used in preformatted text +%simple_map_pre = %simple_map; + +# +# texinfo "things" (@foo{}) to HTML ones +# +%things_map = ( + 'TeX' => 'TeX', + 'LaTeX' => 'LaTeX', + 'bullet' => '\(bu', + 'copyright' => '\(co', + 'registeredsymbol' => '\(rg', + 'dots' => '\&...', + 'enddots' => '\&....', + 'equiv' => '\(==', +# i18n + 'error' => 'error->', + 'expansion' => '\(->', + 'minus' => '\-', + 'point' => '*', + 'print' => '-|', + 'result' => '\(rh', + # set in code using the language + # 'today', &pretty_date, + 'aa' => '\(oa', + 'AA' => '\(oA', + 'ae' => '\(ae', + 'oe' => '\(oe', + 'AE' => '\(AE', + 'OE' => '\(OE', + 'o' => '\(/o', + 'O' => '\(/O', + 'ss' => '\(ss', + 'l' => '\(/l', + 'L' => '\(/L', + 'exclamdown' => '\(r!', + 'questiondown' => '\(r?', + 'pounds' => '\(Po', + 'ordm' => '\(Om', + 'ordf' => '\(Of', + 'euro' => '\(eu', + ); + +# This map is used in preformatted environments +%pre_map = %things_map; + +#%style_map = ( +# 'acronym', '', +# 'asis', '', +# 'b', ['\fB', '\fR'], +# 'cite', ['\fI', '\fR'], +# 'code', ['\fR\&\f(CW', '\fR'], +# 'command', ['\fR\&\f(CW', '\fR'], +# 'ctrl', ['\fR\&\f(CW', '\fR'], +# 'dfn', ['\fI', '\fR'], +# 'dmn', '', +# 'email', ['\fB', '\fR'], +# 'emph', ['\fI', '\fR'], +# 'env', ['\fR\&\f(CW', '\fR'], +# 'file', ['\fR\&\f(CW', '\fR', '"'], +# 'i', ['\fI', '\fR'], +# 'kbd', ['\fR\&\f(CW', '\fR'], +# 'key', ['\fR\&\f(CW', '\fR'], +# 'math', ['\fR\&\f(CW', '\fR'], +# 'option', ['\fR\&\f(CW', '\fR', '"'], +# 'r', ['\fR', ''], +# 'samp', ['\fR\&\f(CW', '\fR', '"'], +# 'sc', '&roff_sc', +# 'strong', ['\fB', '\fR'], +# 't', ['\fR\&\f(CW', '\fR'], +# 'uref', '&default_uref', +# 'url', '&default_url', +# 'var', ['\fI', '\fR'], +# 'verb', ['\fR\&\f(CW', '\fR'], +# 'titlefont', ["\n.sz +10\n.ce\n", "\n.sz -10\n"], +# 'w', '', +# 'H', '&roff_accent', +# 'dotaccent', '&roff_accent', +# 'ringaccent', '&roff_accent', +# 'tieaccent', '&roff_accent', +# 'u', '&roff_accent', +# 'ubaraccent', '&roff_accent', +# 'udotaccent', '&roff_accent', +# 'v', '&roff_accent', +# ',', '&roff_accent', +# 'dotless', '' +# ); + +my @bold_commands = ('strong', 'b', 'email'); +my @italic_commands = ('cite', 'dfn', 'emph', 'i', 'var', 'slanted'); +my @fixed_command = ('code', 'command', 'ctrl', 'env', 'file', 'kbd', 'key', + 'math', 'option', 'samp', 't', 'verb'); + +foreach my $accent_command ('tieaccent', 'dotless', keys(%unicode_accents), keys(%accent_map)) +{ + #$style_map{$accent_command} = { 'function' => \&t2h_roff_accent }; + $style_map{$accent_command} = '&roff_accent'; +} +#foreach my $accent (keys(%accent_map)) +#{ +# $style_map{$accent} = '&roff_accent'; +#} + +foreach my $command (keys(%style_map)) +{ + delete $style_map{$command}->{'attribute'} if (exists($style_map{$command}->{'attribute'})); + if (grep {$_ eq $command} @bold_commands) + { + delete $style_map{$command}->{'function'} if (exists($style_map{$command}->{'function'})); + $style_map{$command}->{'begin'} = '\fB'; + $style_map{$command}->{'end'} = '\fR'; + next; + } + elsif (grep {$_ eq $command} @italic_commands) + { + delete $style_map{$command}->{'function'} if (exists($style_map{$command}->{'function'})); + $style_map{$command}->{'begin'} = '\fI'; + $style_map{$command}->{'end'} = '\fR'; + next; + } + elsif (grep {$_ eq $command} @fixed_commands) + { + delete $style_map{$command}->{'function'} if (exists($style_map{$command}->{'function'})); + $style_map{$command}->{'begin'} = '\fR\&\f(CW'; + $style_map{$command}->{'end'} = '\fR'; + next; + } +} + +delete $style_map{'titlefont'}->{'function'} if (exists($style_map{'titlefont'}->{'function'})); +$style_map{'titlefont'}->{'begin'} = "\n.sz +10\n.ce\n"; +$style_map{'titlefont'}->{'end'} = "\n.sz -10\n"; + +delete $style_map{'r'}->{'function'} if (exists($style_map{'r'}->{'function'})); +$style_map{'r'}->{'begin'} = '\r'; +#$style_map{'r'}->{'end'} = ''; + +$style_map{'sc'} = '&roff_sc'; + +$style_map{'indicateurl'}->{'begin'} = '<'; +$style_map{'indicateurl'}->{'end'} = '>'; + +foreach my $command (keys(%style_map)) +{ + if (ref($style_map{$command}) ne 'HASH') + { + $style_map_pre{$command} = $style_map{$command}; + next; + } + $style_map_pre{$command} = {}; + foreach my $key (keys(%{$style_map{$command}})) + { + $style_map_pre{$command}->{$key} = $style_map{$command}->{$key}; + } +} + +%special_accents = ( + 'ringaccent' => 'aA', + "'" => 'aeiouyAEIOUY', + ',' => 'cC', + '^' => 'aeiouAEIOU', + '`' => 'aeiouAEIOU', + '~' => 'nNaoAO', + '"' => 'aeiouyAEIOUY', + 'v' => 'sSzZ', +); + +sub roff_accent($$) +{ + my $text = shift; + my $accent = shift; + return $text if ($accent eq 'dotless'); + return "\\($accent_map{$accent}${text}" if (defined($accent_map{$accent}) and defined($special_accents{$accent}) and ($text =~ /^[$special_accents{$accent}]$/)); + return "\\(o${text}" if (($accent eq 'ringaccent') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); + return "\\(v${text}" if (($accent eq 'v') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); + return "\\(,${text}" if (($accent eq ',') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); +#FIXME maybe we should protect the symbols such that they look like strings and +# not ponctuation marks ? Like it is done in texi2roff ? +# otherwise we should use +# return ascii_accents($text, $accent); + return $text . $accent if (defined($accent_map{$accent})); + return $text . "''" if ($accent eq 'H'); + return $text . '\\&.' if ($accent eq 'dotaccent'); + return $text . '*' if ($accent eq 'ringaccent'); + return $text . '[' if ($accent eq 'tieaccent'); + return $text . '(' if ($accent eq 'u'); + return $text . '_' if ($accent eq 'ubaraccent'); + return '\\&.' . $text if ($accent eq 'udotaccent'); + return $text . '<' if ($accent eq 'v'); + return $text . ',' if ($accent eq ','); +} + +sub roff_sc($$) +{ + return "\n.sz -6\n" . uc($_[0]) . "\n.sz +6\n" ; +} + +sub roff_ctrl($$) +{ + return "\\*^$_[0]"; +} + +$format = \&T2H_ROFF_format; + +sub T2H_ROFF_format($$$) +{ + my $tag = shift; + my $element = shift; + my $text = shift; + return '' if (!defined($element) or ($text !~ /\S/)); + return $element->[0] . $text . $element->[1]; +} + +%format_map = ( + 'quotation' => [ ".(q\n", ".)q\n" ], + # lists + 'itemize' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], + 'enumerate' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], + 'multitable' => [ ".(l M\n.nh\n", ".hy\n.)l\n" ], + 'table' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], + 'vtable' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], + 'ftable' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], + ); + +%special_list_commands = ( + 'table' => {}, + 'vtable' => {}, + 'ftable' => {}, + 'itemize' => {} + ); + +# an eval of these $complex_format_map->{what}->{'begin'} yields beginning +# an eval of these $complex_format_map->{what}->{'end'} yields end +# $EXAMPLE_INDENT_CELL and SMALL_EXAMPLE_INDENT_CELL can be usefull here +$complex_format_map = +{ + 'example' => + { + 'begin' => q{""}, + 'end' => q{""}, + 'begin_region' => ".(l I\n\\&\\fR\\f(CW", + 'end_region' => "\\&\\fR\n.)l\n" + }, + 'smallexample' => + { + 'begin' => q{""}, + 'end' => q{""}, + 'begin_region' => ".(l I\n.size -2\n\\&\\fR\\f(CW", + 'end_region' => "\\&\\fR\n.size +2\n.)l\n" + }, + 'display' => + { + 'begin' => q{""}, + 'end' => q{""}, + 'begin_region' => ".(l I\n\\&\\fR\\f(CW", + 'end_region' => "\\&\\fR\n.)l\n" + }, + 'smalldisplay' => + { + 'begin' => q{""}, + 'end' => q{""}, + 'begin_region' => ".(l I\n.size -2\n\\&\\fR\\f(CW", + 'end_region' => "\\&\\fR\n.size +2\n.)l\n" + }, + 'menu-comment' => + { + 'begin' => q{""}, + 'end' => q{""}, + 'begin_region' => "", + 'end_region' => "\n" + }, + 'menu-preformatted' => + { + 'begin' => q{""}, + 'end' => q{""}, + 'begin_region' => "", + 'end_region' => "\n" + } +}; + +# format shouldn't narrow the margins + +$complex_format_map->{'lisp'} = $complex_format_map->{'example'}; +$complex_format_map->{'smalllisp'} = $complex_format_map->{'smallexample'}; +$complex_format_map->{'format'} = $complex_format_map->{'display'}; +$complex_format_map->{'smallformat'} = $complex_format_map->{'smalldisplay'}; + +sub protect_spaces($) +{ + my $text = shift; + my $result = ''; + while($text) + { + if ($text =~ s/^([^\\]*)\\//o) + { + my $leading = $1; + if (defined($leading)) + { + $leading =~ s/([\t ])/\\$1/go; + $result .= $leading . '\\'; + } + if (($text =~ s/^(\s)//o) or ($text =~ s/^(.)//o)) + { + $result .= $1; + } + } + else + { + $text =~ s/([\t ])/\\$1/go; + $result .= $text; + $text = ''; + } + } + return $result; +} + +# formatting functions + +$anchor = \&t2h_roff_anchor; +$def_item = \&t2h_roff_def_item; +$def = \&t2h_roff_def; +$menu = \&t2h_roff_menu; +$menu_link = \&t2h_roff_menu_link; +$menu_comment = \&t2h_roff_menu_comment; +$menu_description = \&t2h_roff_menu_description; +$simple_menu_link = \&t2h_roff_simple_menu_link; +$table_item = \&t2h_roff_table_item; +$table_line = \&t2h_roff_table_line; +$row = \&t2h_roff_row; +$cell = \&t2h_roff_cell; +$list_item = \&t2h_roff_list_item; +$comment = \&t2h_roff_comment; +$def_line = \&t2h_roff_def_line; +$raw = \&t2h_roff_raw; +$heading = \&t2h_roff_heading; +$paragraph = \&t2h_roff_paragraph; +$preformatted = \&t2h_roff_preformatted; +$foot_line_and_ref = \&t2h_roff_foot_line_and_ref; +$foot_section = \&t2h_roff_foot_section; +$image = \&t2h_roff_image; +$index_entry_label = \&t2h_roff_index_entry_label; +$index_summary = \&t2h_roff_index_summary; +$print_index = \&t2h_roff_print_index; +$protect_text = \&t2h_roff_protect_text; +$cartouche = \&t2h_roff_cartouche; +$sp = \&t2h_roff_sp; +$normal_text = \&t2h_roff_normal_text; +$empty_line = \&t2h_roff_empty_line; +$unknown = \&t2h_roff_unknown; +$float = \&t2h_roff_float; +$listoffloats = \&t2h_roff_listoffloats; +$listoffloats_entry = \&t2h_roff_listoffloats_entry; + +# This function is used to protect characters which are special in html +# in inline text: &, ", <, and >. +# +# argument: +# text to be protected +sub t2h_roff_protect_text($) +{ + my $text = shift; + $text =~ s/\\/\\e/g; + $text =~ s/$;---$;/\\(em/g; + $text =~ s/$;--$;/-/g; + $text =~ s/$;-$;/\\-/g; + $text =~ s/^\./\\&./; + $text =~ s/([\s])\./$1\\&./g; + return $text; +} + +sub t2h_roff_normal_text($) +{ + my $text = shift; + #$text =~ s/---/\\(em/g; + $text =~ s/(--?-?)/$;$1$;/go; + return $text; +} + +sub t2h_roff_unknown($$) +{ + my $macro = shift; + my $line = shift; + + if ($macro eq '*') + { + $line = '' if ($line =~ /^\s*$/); + return ($line, 1, "\n.br\n", undef); + } + return ($line, 0, undef, undef); +} + + +# This function produces an anchor +# +# arguments: +# $name : anchor name +# $href : anchor href +# text : text displayed +# extra_attribs : added to anchor attributes list +sub t2h_roff_anchor($;$$$) +{ + my $name = shift; + my $href = shift; + my $text = shift; + my $attributes = shift; + $href = '' if (!defined($href) or ($href !~ /\S/)); + $text = '' if (!defined($text)); + return $text if ($text ne ''); + return "[$href]" if ($href ne ''); + return ''; +} + +# This function is used to format the text associated with a @deff/@end deff +# +# argument: +# text +sub t2h_roff_def_item($) +{ + my $text = shift; + if ($text =~ /\S/) + { + { + #return ".ba +5\n.(l L F\n" . $text . ".)l\n.ba -5\n"; + return ".(l L F\n.ba +5\n" . $text . ".ba -5\n.)l\n"; + } + } + return ''; +} + +# format the container for the @deffn line and text +# +# argument +# text of the whole @def, line and associated text. +sub t2h_roff_def($) +{ + my $text = shift; + return $text; +} + +# a whole menu +# +# argument: +# the whole menu text (entries and menu comments) +# +# argument: +# whole menu text. +sub t2h_roff_menu($) +{ + my $text = shift; + chomp $text; + return ".(l M\n\\&\\s8" . &$I('Menu:') . "\n" . $text . "\\&\\s0\n.)l\n"; +} + +# a simple menu entry ref in case we aren't in a standard menu context +sub t2h_roff_simple_menu_link($$$$$) +{ + my $text = shift; + my $href = shift; + my $node = shift; + my $name = shift; + my $ending = shift; + $name .= ':' if ($name ne ''); + return "$MENU_SYMBOL$name$node$ending"; +} + +# formats a menu entry link pointing to a node or section +# +# arguments: +# the entry text +# the state, a hash reference holding informations about the context, with a +# usefull entry, 'preformatted', true if we are in a preformatted format +# (a format keeping space between words). In that case a function +# of the main program, main::do_preformatted($text, $state) might +# be used to format the text with the current format style. +# href is optionnal. It is the reference to the section or the node anchor +# which should be used to make the link (typically it is the argument +# of a href= attribute in a <a> element). +sub t2h_roff_menu_link($$$$$$) +{ + my $text = shift; + my $state = shift; + my $href = shift; + my $node = shift; + my $name = shift; + my $ending = shift; + $name .= ':' if ($name ne ''); + return "$MENU_SYMBOL$name$node$ending"; +} + +# formats a menu entry description, ie the text appearing after the node +# specification in a menu entry an spanning until there is another +# menu entry, an empty line or some text at the very beginning of the line +# (we consider that text at the beginning of the line begins a menu comment) +# +# arguments: +# the description text +# the state. See menu_entry. +sub t2h_roff_menu_description($$) +{ + my $text = shift; + my $state = shift; + return $text; +} + +# a menu comment (between menu lines) +# formats the container of a menu comment. A menu comment is any text +# appearing between menu lines, either separated by an empty line from +# the preceding menu entry, or a text beginning at the first character +# of the line (text not at the very beginning of the line is considered to +# be the continuation of a menu entry description text). +# +# The text itself is considered to be in a preformatted environment +# with name 'menu-commment' and with style $MENU_PRE_STYLE. +# +# argument +# text contained in the menu comment. +sub t2h_roff_menu_comment($) +{ + my $text = shift; + return $text; +} + +# text after @item in table, vtable and ftable +sub t2h_roff_table_item($$$$$) +{ + my $text = shift; + my $index_label = shift; + my $format = shift; + my $command = shift; + my $formatted_command = shift; + $formatted_command = '' if (!defined($formatted_command) or + exists($special_list_commands{$format}->{$command})); + $text = '.ip ' . $formatted_command . protect_spaces($text) . "\n"; + $text .= $index_label if (defined($index_label)); + return $text; +} + +# format text on the line following @item (in table, vtable and ftable) +sub t2h_roff_table_line($) +{ + my $text = shift; + return $text; +} + +# row in multitable +sub t2h_roff_row($) +{ + my $text = shift; + + if ($text =~ /\S/) + { + return $text ."\n" ; + } + return ''; +} + +# cell in multitable +sub t2h_roff_cell($) +{ + my $text = shift; + chomp $text; + return protect_spaces($text) . "\\\t"; +} + +# format an item in a list +# +# argument: +# text of the item +sub t2h_roff_list_item($$$$$$$) +{ + my $text = shift; + my $format = shift; + my $command = shift; + my $formatted_command = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + $formatted_command = '' if (!defined($formatted_command) or + exists($special_list_commands{$format}->{$command})); + if ($text =~ /\S/) + { + #return $formatted_command . $text; + return $text . "\n"; + } + return ''; +} + +# an comment +sub t2h_roff_comment($) +{ + my $text = shift; + my $result = ''; + while ($text) + { + $text =~ s/$;---$;/--/g; + $text =~ s/$;--$;/-/g; + $text =~ s/$;-$;/-/g; + $text =~ s/^(.*)//; + $result .= ".\\\"$1"; + $result .= "\n" if ($text =~ s/^\n//); + } + return $result; +} + +# a paragraph +sub t2h_roff_paragraph($$$$$$$$$) +{ + my $text = shift; + my $align = shift; + my $paragraph_command = shift; + my $paragraph_command_formatted = shift; + my $paragraph_number = shift; + my $format = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + return '' if ($text =~ /^\s*$/); + if (defined($paragraph_number) and defined($$paragraph_number)) + { + $$paragraph_number++; + $paragraph_command_formatted = undef if ($$paragraph_number > 1); + } + $paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or + exists($special_list_commands{$format}->{$paragraph_command})); + #return $text if (defined($format) and $format eq 'multitable'); + return $text if (defined($format) and (($format eq 'multitable') or ($format eq 'quotation'))); + my $open = ".pp\n"; + if (defined($format) and (($format eq 'itemize') or ($format eq 'enumerate')) and + defined($paragraph_number) and defined($$paragraph_number) and ($$paragraph_number == 1)) + { + $open = ".lp\n"; + } + my $close = ''; + if ($align) + { + if ($align eq 'flushleft') + { + $open .= ".ad l\n"; + $close .= ".ad b\n"; + } + elsif ($align eq 'flushright') + { + $open .= ".ad r\n"; + $close .= ".ad b\n"; + } + elsif ($align eq 'center') + { + $open .= ".ce\n"; + } + } + if (defined($format) and ($format eq 'enumerate') and + defined($paragraph_number) and defined($$paragraph_number) and ($$paragraph_number == 1) and defined($number) and ($number ne '')) + { + $open .= "$number."; + } + chomp ($text); + return $open. $paragraph_command_formatted . $text . "\n" . $close; +} + +# a preformatted region +sub t2h_roff_preformatted($$$$$$$$$$) +{ + my $text = shift; + my $pre_style = shift; + my $class = shift; + my $leading_command = shift; + my $leading_command_formatted = shift; + my $preformatted_number = shift; + my $format = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + $leading_command_formatted = '' if (!defined($leading_command_formatted) or + exists($special_list_commands{$format}->{$leading_command})); + + if (defined($format) and $format eq 'multitable') + { + my $chomped = chomp($text); + my $result = '\&\fR\f(CW' . $text . '\&\fR'; + $result .= "\n" if ($chomped); + return $result; + } + return '' if ($text eq ''); + if (defined($preformatted_number) and defined($$preformatted_number)) + { + $$preformatted_number++; + $leading_command_formatted = undef if ($$preformatted_number > 1); + } + $leading_command_formatted = '' if (!defined($leading_command_formatted)); + chomp $text; + my $open = ''; + if (defined($format) and ($format eq 'enumerate') and + defined($paragraph_number) and defined($$paragraph_number) and ($$paragraph_number == 1) and defined($number) and ($number ne '')) + { + $open = "$number. "; + } + return $complex_format_map->{$class}->{'begin_region'} . $leading_command_formatted . $open . $text . $complex_format_map->{$class}->{'end_region'}; +} + +# This function formats a heading for an element +# +# argument: +# an element. It is a hash reference for a node or a sectionning command. +# The interesting keys are: +# 'text': the heading text +# 'name': the heading text without section number +# 'node': true if it is a node +# 'level': level of the element. 0 for @top, 1 for chapter, heading, +# appendix..., 2 for section and so on... +# 'tag_level': the sectionning element name, raisesections and lowersections +# taken into account +# +# relevant configuration variable: +# $NUMBER_SECTIONS +sub t2h_roff_heading($) +{ + my $element = shift; + my $name = $element->{'text'}; + if (!$element->{'node'}) + { + $name = $element->{'name'}; + } + return '' if ($element->{'name'} !~ /\S/); + my $class = $element->{'tag_level'}; + $class = 'unnumbered' if ($class eq 'top'); + $level = $element->{'level'}; + $level = 3 if (!defined($level)); + $level = 1 if ($level == 0); + my $heading = ''; + $heading = ".bp\n" if ($level == 1); + $heading .= '.if !\n(_- \{\\' . "\n.nr _- 1\n.nr \$1 0 1\n" . '.af $1 A\}' . "\n" + if ($class =~ /^appendix/); + $name = protect_spaces($name); + my $toc_entry = '\&'; + if ($class =~ /^unnumbered/ or ($class eq 'node')) + { + $heading .= ".uh $name\n"; + $toc_entry .= ' '; + } + elsif (($class =~ /section$/) or ($class eq 'chapter') or ($class =~ /^appendix/)) + { + $heading .= ".sh $level $name\n"; + my $number = 1; + while ($number < $level) + { + $toc_entry .= "\\n(\$$number."; + $number++; + } + $toc_entry .= "\\n(\$$number "; + } + $toc_entry .= $name; + return $heading . "\n" if ($class eq 'node'); + return $heading . ".(x\n" . $toc_entry . "\n.)x\n\\&\\fR\n"; +} + +sub T2H_ROFF_toc_body($$$) +{ + my $elements_list = shift; + my $do_contents = shift; + my $do_scontents = shift; + if ($do_contents or $do_scontents) + { + my $lines = ".pp\n.nr % 0 1\n.af % i\n.bp \\n%+1\n.ce\n\\&\\fB" . &$I('Table of Contents') . "\\fR\n.sp 2\n.xp\n"; + if (!$do_contents) + { + push @{$Texi2HTML::OVERVIEW}, $lines; + } + else + { + push @{$Texi2HTML::TOC_LINES}, $lines; + } + } +} + +# formatting of raw regions +# ih L2H is true another mechanism is used for tex +sub t2h_roff_raw($$) +{ + my $style = shift; + my $text = shift; + if ($style eq 'verbatim' or $style eq 'tex' or $style eq 'html') + { + chomp ($text); + return ".(l M\n\\fR\\&\\f(CW" . &$protect_text($text) . "\\fR\n.)l\n" ; + } + else + { + warn "$WARN (bug) unknown style $style\n"; + return &$protect_text($text); + } +} + +# This function formats a footnote reference and the footnote text associated +# with a given footnote. +# The footnote reference is the text appearing in the main document pointing +# to the footnote text. +# +# arguments: +# absolute number of the footnote (in the document) +# relative number of the footnote (in the page) +# identifier for the footnote +# identifier for the footnote reference in the main document +# main document file +# footnote text file +# array with the footnote text lines +# the state. See menu entry. +# +# returns: +# reference on an array containing the footnote text lines which should +# have been updated +# the text for the reference pointing on the footnote text +sub t2h_roff_foot_line_and_ref($$$$$$$) +{ + my $number_in_doc = shift; + my $number_in_page = shift; + my $footnote_id = shift; + my $place_id = shift; + my $document_file = shift; + my $footnote_file = shift; + my $lines = shift; + my $state = shift; + + my $text = ''; + my $line; + while (@$lines) + { + $line = shift @$lines; + $text .= $line; + } + chomp $text; + return ([], "\n.(f\n" . $text . "\n.)f\n" ); +} + +# formats a group of footnotes. +# +# argument: +# array reference on the footnotes texts lines +# +# returns an array reference on the group of footnotes lines +sub t2h_roff_foot_section($) +{ + my $lines = shift; + @$lines = (); +} + +# format an image +# +# arguments: +# image file name +# image basename +# a boolean true if we are in a preformatted format +sub t2h_roff_image($$$$) +{ + my $file = shift; + my $base = shift; + my $preformatted = shift; + my $file_name = shift; + return "[$base src=$file_name]" if ($base ne $file_name); + return "[$base]"; +} + +# format a target in the main document for an index entry. +# +# arguments: +# target identifier +# boolean true if in preformatted format +sub t2h_roff_index_entry_label($$$$) +{ + my $identifier = shift; + my $preformatted = shift; + my $label = shift; + my $index_name = shift; + return ".(x $index_name\n" . protect_spaces($label) . "\n.)x\n"; +} + +# process definition commands line @deffn for example +sub t2h_roff_def_line($$$$$) +{ + my $category = shift; + my $name = shift; + my $type = shift; + my $arguments = shift; + my $index_label = shift; + $index_label = '' if (!defined($index_label)); + $name = '' if (!defined($name) or ($name =~ /^\s*$/)); + $type = '' if (!defined($type) or $type =~ /^\s*$/); + if (!defined($arguments) or $arguments =~ /^\s*$/) + { + $arguments = ''; + } + else + { + $arguments = '\fI' . protect_spaces($arguments) . '\fR'; + } + my $type_name = ' '; + $type_name = " $type" if ($type ne ''); + + $type_name .= '\fB' . protect_spaces($name) . '\fR' if ($name ne ''); + $type_name .= $arguments . "\n"; + return '\fI' . protect_spaces($category) . ':\fR' . $type_name . $index_label; +} + +# a cartouche +sub t2h_roff_cartouche($$) +{ + my $text = shift; + return $text; +} + +sub t2h_roff_sp($$) +{ + my $number = shift; + my $preformatted = shift; + return "\n.sp $number\n"; +} + +# format a whole index +# +# argument: +# index text +# index name +sub t2h_roff_print_index($$) +{ + my $text = shift; + my $name = shift; + return ".xp $name\n"; +} + +# format an index summary. This is a list of letters linking to the letter +# entries. +# +# arguments: +# array reference containing the formatted alphabetical letters +# array reference containing the formatted non lphabetical letters +sub t2h_roff_index_summary($$) +{ + my $alpha = shift; + my $nonalpha = shift; + my $join = ''; + my $nonalpha_text = ''; + my $alpha_text = ''; + return ''; +} + +# FIXME the following construct leads to something wrong ? +# something @c a comment +# +# other thing +sub t2h_roff_empty_line($) +{ + my $text = shift; + return ''; +} + +sub t2h_roff_listoffloats_entry($$$$) +{ + my $style_texi = shift; + my $float = shift; + my $float_style = shift; + my $caption = shift; + my $href = shift; + chomp ($caption); + + return '.ip ' . protect_spaces($float_style) . "\n" . $caption . "\n"; +} + +sub t2h_roff_listoffloats($$$) +{ + my $style_texi = shift; + my $style = shift; + my $float_entries = shift; + + my $result = ".(l L F\n.ba +5\n"; + foreach my $float_entry (@$float_entries) + { + $result .= $float_entry; + } + return $result . ".ba -5\n.)l\n"; +} + +sub t2h_roff_float($$$$$) +{ + my $text = shift; + my $float = shift; + my $caption = shift; + my $shortcaption = shift; + + my $caption_text = ''; + + if (defined($float->{'caption_texi'})) + { + $caption_text = $caption; + } + elsif (defined($float->{'shortcaption_texi'})) + { + $caption_text = $shortcaption; + } + elsif (defined($caption)) + { + $caption_text = $caption; + } + chomp ($caption_text); + return ".(b L F\n" . $text . $caption_text . "\n.b)\n"; +} + +1; |