# -*-perl-*-
#+##############################################################################
#
# makeinfo.pm: output html in the makeinfo style.
#
# This is obsoleted and irrelevant now, in 2010 (though still used in some
# tests) since a makeinfo-like default is used when called as makeinfo or
# texi2any.
#
# Copyright (C) 2003, 2005, 2008 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 .
#
# Originally written by Patrice Dumas.
#
#-##############################################################################
#html_default_load();
t2h_default_load_format('html');
set_default('TOP_FILE', 'index.html');
set_default('SHOW_MENU', 1);
set_default('USE_NODES', 1);
set_default('SPLIT', 'node');
set_default('NODE_FILES', 1);
set_default('USE_SETFILENAME', 1);
set_default('HEADERS', 1);
set_default('SHORT_REF', 1);
set_default('NODE_NAME_IN_MENU', 1);
set_default('NODE_NAME_IN_INDEX', 0);
set_default('AVOID_MENU_REDUNDANCY', 0);
set_default('SPLIT_INDEX', 0);
$MENU_SYMBOL = '*';
set_default('WORDS_IN_PAGE', 200);
set_default('footnotestyle', 'end');
set_default('USE_ACCESSKEY', 1);
set_default('USE_REL_REV', 1);
set_default('USE_LINKS', 1);
set_default('INLINE_CONTENTS', 1);
set_default('OVERVIEW_LINK_TO_TOC', 1);
if (get_conf('HEADER_IN_TABLE'))
{
@SECTION_BUTTONS =
(
\"node: ", \$Texi2HTML::NODE{This}, [ 'NodeNext', \$Texi2HTML::NODE{NodeNext} ] , \",", [ 'NodePrev', \$Texi2HTML::NODE{NodePrev} ], \",", [ 'NodeUp', \$Texi2HTML::NODE{NodeUp} ], 'NodeForward'
);
@TOP_BUTTONS = @SECTION_BUTTONS;
@MISC_BUTTONS = @SECTION_BUTTONS;
}
push @command_handler_process, \&makeinfo_like_initialize_variables;
my $makekinfo_like_footnote_absolute_number;
my %makekinfo_like_paragraph_in_footnote_nr;
sub makeinfo_like_initialize_variables()
{
$makekinfo_like_footnote_absolute_number = 0;
%makekinfo_like_paragraph_in_footnote_nr = ();
}
my $default_init_out = $init_out;
$init_out = \&makeinfo_like_init_out;
sub makeinfo_like_init_out()
{
&$default_init_out();
$NAVIGATION_TEXT{'NodeForward'} = ' > ';
}
# FIXME: images not in paragraphs are in
$foot_line_and_ref = \&makeinfo_like_foot_line_and_ref;
$foot_section = \&makeinfo_like_foot_lines;
$paragraph = \&makeinfo_like_paragraph;
$index_summary = \&makeinfo_like_index_summary;
$summary_letter = \&makeinfo_like_summary_letter;
$index_entry = \&makeinfo_like_index_entry;
$index_letter = \&makeinfo_like_index_letter;
$print_index = \&makeinfo_like_print_index;
$listoffloats = \&makeinfo_like_listoffloats;
$listoffloats_entry = \&makeinfo_like_listoffloats_entry;
$menu_link = \&makeinfo_like_menu_link;
$menu_description = \&makeinfo_like_menu_description;
$menu_comment = \&makeinfo_like_menu_comment;
$menu = \&makeinfo_like_menu;
sub makeinfo_like_foot_line_and_ref($$$$$$$$)
{
my $foot_num = shift;
my $relative_num = shift;
my $footid = shift;
my $docid = shift;
my $from_file = shift;
my $footnote_file = shift;
my $lines = shift;
my $state = shift;
$makekinfo_like_footnote_absolute_number++;
# this is a bit obscure, this allows to add an anchor only if formatted
# as part of the document.
$docid = '' if ($state->{'outside_document'} or $state->{'multiple_pass'});
if ($from_file eq $footnote_file)
{
$from_file = $footnote_file = '';
}
my $foot_anchor = "
" . &$anchor($docid, "$footnote_file#$footid", $relative_num) . "";
$foot_anchor = &$anchor($docid, "$footnote_file#$footid", "($relative_num)") if ($state->{'preformatted'});
return ($lines, $foot_anchor);
}
sub makeinfo_like_foot_lines($)
{
my $lines = shift;
unshift @$lines, "\n");
return $lines;
}
sub makeinfo_like_paragraph ($$$$$$$$$$$$$)
{
my $text = shift;
my $align = shift;
my $indent = 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;
my $command_stack_at_end = shift;
my $command_stack_at_begin = shift;
my $state = shift;
#print STDERR "format: $format\n" if (defined($format));
#print STDERR "paragraph @$command_stack_at_end; @$command_stack_at_begin\n";
#$paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or
# exists($special_list_commands{$format}->{$paragraph_command}));
return '' if ($text =~ /^\s*$/);
if (defined($paragraph_number) and defined($$paragraph_number))
{
$$paragraph_number++;
return $text if (($format eq 'itemize' or $format eq 'enumerate') and
($$paragraph_number == 1));
}
my $open = '
[0]) and $command_stack_at_begin->[0] eq 'footnote')
{
my $state = $Texi2HTML::THISDOC{'state'};
$makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number}++;
if ($makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number} <= 1)
{
$open.=' class="footnote"';
my $document_file = $state->{'footnote_document_file'};
if ($document_file eq $state->{'footnote_footnote_file'})
{
$document_file = '';
}
my $docid = $state->{'footnote_place_id'};
my $doc_state = $state->{'footnote_document_state'};
$docid = '' if ($doc_state->{'outside_document'} or $doc_state->{'multiple_pass'});
my $foot_label = &$anchor($state->{'footnote_footnote_id'},
$document_file . "#$state->{'footnote_place_id'}",
"$state->{'footnote_number_in_page'}");
$footnote_text = "[${foot_label}] ";
}
}
$text = $footnote_text.$text;
my $top_stack = '';
$top_stack = $command_stack_at_begin->[-1] if (scalar (@$command_stack_at_begin));
if ($top_stack eq 'multitable')
# FIXME
# paragraph_number is not by cell, so it is not possible to know if it
# is the first paragraph in cell. Also currently there is no hook for a
# cell beginning which means that it is not possible to reset the cell
# paragraph count at a cell beginning
# and (!defined($paragraph_number) or !defined($$paragraph_number) or $$paragraph_number == 1))
{
return $text;
}
return $open.'>'.$text.'
';
}
sub makeinfo_like_index_summary
{
return '';
}
sub makeinfo_like_summary_letter
{
return '';
}
sub makeinfo_like_index_entry($$$$$$$$$$)
{
my $text_href = shift;
my $entry = shift;
my $element_href = shift;
my $element_text = shift;
my $entry_file = shift;
my $current_element_file = shift;
my $entry_target = shift;
my $entry_element_target = shift;
my $in_region_not_in_output = shift;
my $index_entry_ref = shift;
return '' if ($entry !~ /\S/);
my $element = $index_entry_ref->{'real_element'};
if (defined($element))
{
my $element_set = 0;
if (get_conf('NODE_NAME_IN_INDEX'))
{
if ($element->{'node'})
{
$element_set = 1;
}
elsif ($element->{'with_node'})
{
$element = $element->{'with_node'};
$element_set = 1;
}
}
elsif (defined(get_conf('NODE_NAME_IN_INDEX')))
{
if (!$element->{'node'})
{
$element_set = 1;
}
elsif ($element->{'with_section'})
{
$element = $element->{'with_section'};
$element_set = 1;
}
}
if ($element_set)
{
$element_href = main::href($element, $Texi2HTML::THIS_ELEMENT->{'file'},
$Texi2HTML::THISDOC{'line_nr'});
$element_text = $element->{'text'};
}
}
return '
' . $entry . ': ' . &$anchor('', $element_href, $element_text)
. "\n";
}
sub makeinfo_like_index_letter($$$)
{
my $letter = shift;
my $id = shift;
my $text = shift;
return $text;
}
sub makeinfo_like_print_index($$)
{
my $text = shift;
my $name = shift;
return '' if (!defined($text));
return "
\n";
}
sub makeinfo_like_listoffloats_entry($$$$)
{
my $style_texi = shift;
my $float = shift;
my $float_style = shift;
my $caption = shift;
my $href = shift;
if ($caption ne '')
{
return '
' . gdt('{href}: {caption}', { 'href' => &$anchor('', $href, $float_style), 'caption' => $caption }) . "\n";
}
else
{
return '
' . &$anchor('', $href, $float_style) . "\n";
}
}
sub makeinfo_like_listoffloats($$$)
{
my $style_texi = shift;
my $style = shift;
my $float_entries = shift;
my $result = "
\n" ;
foreach my $float_entry (@$float_entries)
{
$result .= $float_entry;
}
return $result . "
\n";
}
# a whole menu
#
# argument:
# the whole menu text (entries and menu comments)
#
# argument:
# whole menu text.
sub makeinfo_like_menu($)
{
my $text = shift;
$menu_entry_index=0;
if ($text =~ /\S/)
{
return "
\n";
}
}
# 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
element).
sub makeinfo_like_menu_link($$$$$$$)
{
my $entry = shift;
my $state = shift;
my $href = shift;
my $node = shift;
my $title = shift;
my $ending = shift;
my $has_title = shift;
$title = '' unless ($has_title);
if (($entry eq '') or get_conf('NODE_NAME_IN_MENU') or $state->{'preformatted'})
{
$title .= ':' if ($title ne '');
$entry = "$title$node";
}
$menu_entry_index++;
my $accesskey;
$accesskey = "accesskey=\"$menu_entry_index\"" if (get_conf('USE_ACCESSKEY') and ($menu_entry_index < 10));
$entry = &$anchor ('', $href, $entry, $accesskey) if (defined($href));
# if ($state->{'preformatted'})
# {
# return '' . main::do_preformatted($entry . $ending, $state);
# }
return " $entry";
}
# 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 makeinfo_like_menu_description($$)
{
my $text = shift;
my $state = shift;
# if ($state->{'preformatted'})
# {
# return main::do_preformatted($text, $state) . '';
# }
return "$text\n";
}
1;