texi2html is deprecated by upstream in favor of makeinfo/texi2any. See: - https://www.gnu.org/software/texinfo/manual/texinfo/html_node/texi2html.html - https://wiki.debian.org/Texi2htmlTransition - https://lists.debian.org/debian-devel/2013/05/msg01516.html
This is actually two separate changes. But as makeinfo and texi2html adopt 2 (very) different init file syntaxes, it is easier to do the two transitions at once. Based on a patch by Andreas Cadhalpun <andreas.cadhal...@googlemail.com>. Fixes Trac ticket #3232. Signed-off-by: Timothy Gu <timothyg...@gmail.com> --- Removed some now-extraneous settings. configure | 5 +- doc/Makefile | 8 +- doc/platform.texi | 2 +- doc/t2h.init | 123 ------------------------------ doc/t2h.pm | 220 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 226 insertions(+), 132 deletions(-) delete mode 100644 doc/t2h.init create mode 100644 doc/t2h.pm diff --git a/configure b/configure index 742dfe1..6b3a850 100755 --- a/configure +++ b/configure @@ -1789,7 +1789,6 @@ HAVE_LIST=" perl pod2man sdl - texi2html threads vdpau_x11 xlib @@ -2607,7 +2606,7 @@ ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer" # documentation podpages_deps="perl" manpages_deps="perl pod2man" -htmlpages_deps="perl texi2html" +htmlpages_deps="perl makeinfo" txtpages_deps="perl makeinfo" doc_deps_any="manpages htmlpages podpages txtpages" @@ -4844,7 +4843,6 @@ else fi enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs -texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo perl -v > /dev/null 2>&1 && enable perl || disable perl pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man @@ -5323,7 +5321,6 @@ echo "threading support ${thread_type-no}" echo "safe bitstream reader ${safe_bitstream_reader-no}" echo "SDL support ${sdl-no}" echo "opencl enabled ${opencl-no}" -echo "texi2html enabled ${texi2html-no}" echo "perl enabled ${perl-no}" echo "pod2man enabled ${pod2man-no}" echo "makeinfo enabled ${makeinfo-no}" diff --git a/doc/Makefile b/doc/Makefile index 99f588a..8eb1d5d 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -80,14 +80,14 @@ $(GENTEXI): doc/avoptions_%.texi: doc/print_options$(HOSTEXESUF) $(M)doc/print_options $* > $@ doc/%.html: TAG = HTML -doc/%.html: doc/%.texi $(SRC_PATH)/doc/t2h.init $(GENTEXI) +doc/%.html: doc/%.texi $(SRC_PATH)/doc/t2h.pm $(GENTEXI) $(Q)$(TEXIDEP) - $(M)texi2html -I doc -monolithic --D=config-not-all --init-file $(SRC_PATH)/doc/t2h.init --output $@ $< + $(M)makeinfo --html -I doc --no-split -D config-not-all --init-file=$(SRC_PATH)/doc/t2h.pm --output $@ $< doc/%-all.html: TAG = HTML -doc/%-all.html: doc/%.texi $(SRC_PATH)/doc/t2h.init $(GENTEXI) +doc/%-all.html: doc/%.texi $(SRC_PATH)/doc/t2h.pm $(GENTEXI) $(Q)$(TEXIDEP) - $(M)texi2html -I doc -monolithic --D=config-all --init-file $(SRC_PATH)/doc/t2h.init --output $@ $< + $(M)makeinfo --html -I doc --no-split -D config-all --init-file=$(SRC_PATH)/doc/t2h.pm --output $@ $< doc/%.pod: TAG = POD doc/%.pod: doc/%.texi $(SRC_PATH)/doc/texi2pod.pl $(GENTEXI) diff --git a/doc/platform.texi b/doc/platform.texi index c71121f..b529500 100644 --- a/doc/platform.texi +++ b/doc/platform.texi @@ -275,7 +275,7 @@ llrint() in its C library. Install your Cygwin with all the "Base" packages, plus the following "Devel" ones: @example -binutils, gcc4-core, make, git, mingw-runtime, texi2html +binutils, gcc4-core, make, git, mingw-runtime, texinfo @end example In order to run FATE you will also need the following "Utils" packages: diff --git a/doc/t2h.init b/doc/t2h.init deleted file mode 100644 index 9dd8f91..0000000 --- a/doc/t2h.init +++ /dev/null @@ -1,123 +0,0 @@ -# no horiz rules between sections -$end_section = \&FFmpeg_end_section; -sub FFmpeg_end_section($$) -{ -} - -my $TEMPLATE_HEADER1 = $ENV{"FFMPEG_HEADER1"} || <<EOT; -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8" /> - <meta http-equiv="X-UA-Compatible" content="IE=edge" /> - <title>FFmpeg documentation</title> - <link rel="stylesheet" href="style.min.css" /> -EOT - -my $TEMPLATE_HEADER2 = $ENV{"FFMPEG_HEADER2"} || <<EOT; - </head> - <body> - <div style="width: 95%; margin: auto"> -EOT - -my $TEMPLATE_FOOTER = $ENV{"FFMPEG_FOOTER"} || <<EOT; - </div> - </body> -</html> -EOT - -$SMALL_RULE = ''; -$BODYTEXT = ''; - -$print_page_foot = \&FFmpeg_print_page_foot; -sub FFmpeg_print_page_foot($$) -{ - my $fh = shift; - my $program_string = defined &T2H_DEFAULT_program_string ? - T2H_DEFAULT_program_string() : program_string(); - print $fh '<footer class="footer pagination-right">' . "\n"; - print $fh '<span class="label label-info">' . $program_string; - print $fh "</span></footer></div></div></body>\n"; -} - -$float = \&FFmpeg_float; - -sub FFmpeg_float($$$$) -{ - my $text = shift; - my $float = shift; - my $caption = shift; - my $shortcaption = shift; - - my $label = ''; - if (exists($float->{'id'})) - { - $label = &$anchor($float->{'id'}); - } - my $class = ''; - my $subject = ''; - - if ($caption =~ /NOTE/) - { - $class = "alert alert-info"; - } - elsif ($caption =~ /IMPORTANT/) - { - $class = "alert alert-warning"; - } - - return '<div class="float ' . $class . '">' . "$label\n" . $text . '</div>'; -} - -$print_page_head = \&FFmpeg_print_page_head; -sub FFmpeg_print_page_head($$) -{ - my $fh = shift; - my $longtitle = "$Texi2HTML::THISDOC{'fulltitle_no_texi'}"; - $longtitle .= ": $Texi2HTML::NO_TEXI{'This'}" if exists $Texi2HTML::NO_TEXI{'This'}; - my $description = $DOCUMENT_DESCRIPTION; - $description = $longtitle if (!defined($description)); - $description = "<meta name=\"description\" content=\"$description\">" if - ($description ne ''); - $description = $Texi2HTML::THISDOC{'documentdescription'} if (defined($Texi2HTML::THISDOC{'documentdescription'})); - my $encoding = ''; - $encoding = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=$ENCODING\">" if (defined($ENCODING) and ($ENCODING ne '')); - $longtitle =~ s/Documentation.*//g; - $longtitle = "FFmpeg documentation : " . $longtitle; - - print $fh <<EOT; -$TEMPLATE_HEADER1 -$description -<meta name="keywords" content="$longtitle"> -<meta name="Generator" content="$Texi2HTML::THISDOC{program}"> -$Texi2HTML::THISDOC{'copying'}<!-- Created on $Texi2HTML::THISDOC{today} by $Texi2HTML::THISDOC{program} --> -<!-- -$Texi2HTML::THISDOC{program_authors} ---> -$encoding -$TEMPLATE_HEADER2 -EOT -} - -$print_page_foot = \&FFmpeg_print_page_foot; -sub FFmpeg_print_page_foot($$) -{ - my $fh = shift; - print $fh <<EOT; -$TEMPLATE_FOOTER -EOT -} - -# declare encoding in header -$IN_ENCODING = $ENCODING = "utf-8"; - -# no navigation elements -$SECTION_NAVIGATION = 0; -# the same for texi2html 5.0 -$HEADERS = 0; - -# TOC and Chapter headings link -$TOC_LINKS = 1; - -# print the TOC where @contents is used -$INLINE_CONTENTS = 1; diff --git a/doc/t2h.pm b/doc/t2h.pm new file mode 100644 index 0000000..923e062 --- /dev/null +++ b/doc/t2h.pm @@ -0,0 +1,220 @@ +# makeinfo HTML output init file +# +# Copyright (c) 2011, 2012 Free Software Foundation, Inc. +# Copyright (c) 2014 Andreas Cadhalpun +# Copyright (c) 2014 Tiancheng "Timothy" Gu +# +# This file is part of FFmpeg. +# +# FFmpeg 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. +# +# FFmpeg 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with FFmpeg; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +# no navigation elements +set_from_init_file('HEADERS', 0); + +# TOC and Chapter headings link +set_from_init_file('TOC_LINKS', 1); + +# print the TOC where @contents is used +set_from_init_file('INLINE_CONTENTS', 1); + +# make chapters <h2> +set_from_init_file('CHAPTER_HEADER_LEVEL', 2); + +# Do not add <hr> +set_from_init_file('DEFAULT_RULE', ''); +set_from_init_file('BIG_RULE', ''); + +# Customized file beginning +sub ffmpeg_begin_file($$$) +{ + my $self = shift; + my $filename = shift; + my $element = shift; + + my $command; + if ($element and $self->get_conf('SPLIT')) { + $command = $self->element_command($element); + } + + my ($title, $description, $encoding, $date, $css_lines, + $doctype, $bodytext, $copying_comment, $after_body_open, + $extra_head, $program_and_version, $program_homepage, + $program, $generator) = $self->_file_header_informations($command); + + my $links = $self->_get_links ($filename, $element); + + my $head1 = $ENV{"FFMPEG_HEADER1"} || <<EOT; +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<!-- Created by $program_and_version, $program_homepage --> + <head> + <meta charset="utf-8"> + <title> +EOT + my $head_title = <<EOT; + $title +EOT + + my $head2 = $ENV{"FFMPEG_HEADER2"} || <<EOT; + </title> + <link rel="stylesheet" type="text/css" href="style.min.css"> + </head> + <body> + <div style="width: 95%; margin: auto"> + <h1> +EOT + + my $head3 = $ENV{"FFMPEG_HEADER3"} || <<EOT; + </h1> +EOT + + return $head1 . $head_title . $head2 . $head_title . $head3; +} +texinfo_register_formatting_function('begin_file', \&ffmpeg_begin_file); + +# Customized file ending +sub ffmpeg_end_file($) +{ + my $self = shift; + my $program_string = &{$self->{'format_program_string'}}($self); + my $program_text = <<EOT; + <p style="font-size: small;"> + $program_string + </p> +EOT + my $footer = $ENV{FFMPEG_FOOTER} || <<EOT; + </div> + </body> +</html> +EOT + return $program_text . $footer; +} +texinfo_register_formatting_function('end_file', \&ffmpeg_end_file); + +# Dummy title command +# Ignore title. Title is handled through ffmpeg_begin_file(). +set_from_init_file('USE_TITLEPAGE_FOR_TITLE', 1); +sub ffmpeg_title($$$$) +{ + return ''; +} + +texinfo_register_command_formatting('titlefont', + \&ffmpeg_title); + +# Customized float command. Part of code borrowed from GNU Texinfo. +sub ffmpeg_float($$$$$) +{ + my $self = shift; + my $cmdname = shift; + my $command = shift; + my $args = shift; + my $content = shift; + + my ($caption, $prepended) = Texinfo::Common::float_name_caption($self, + $command); + my $caption_text = ''; + my $prepended_text; + my $prepended_save = ''; + + if ($self->in_string()) { + if ($prepended) { + $prepended_text = $self->convert_tree_new_formatting_context( + $prepended, 'float prepended'); + } else { + $prepended_text = ''; + } + if ($caption) { + $caption_text = $self->convert_tree_new_formatting_context( + {'contents' => $caption->{'args'}->[0]->{'contents'}}, + 'float caption'); + } + return $prepended.$content.$caption_text; + } + + my $id = $self->command_id($command); + my $label; + if (defined($id) and $id ne '') { + $label = "<a name=\"$id\"></a>"; + } else { + $label = ''; + } + + if ($prepended) { + if ($caption) { + # prepend the prepended tree to the first paragraph + my @caption_original_contents = @{$caption->{'args'}->[0]->{'contents'}}; + my @caption_contents; + my $new_paragraph; + while (@caption_original_contents) { + my $content = shift @caption_original_contents; + if ($content->{'type'} and $content->{'type'} eq 'paragraph') { + %{$new_paragraph} = %{$content}; + $new_paragraph->{'contents'} = [@{$content->{'contents'}}]; + unshift (@{$new_paragraph->{'contents'}}, {'cmdname' => 'strong', + 'args' => [{'type' => 'brace_command_arg', + 'contents' => [$prepended]}]}); + push @caption_contents, $new_paragraph; + last; + } else { + push @caption_contents, $content; + } + } + push @caption_contents, @caption_original_contents; + if ($new_paragraph) { + $caption_text = $self->convert_tree_new_formatting_context( + {'contents' => \@caption_contents}, 'float caption'); + $prepended_text = ''; + } + } + if ($caption_text eq '') { + $prepended_text = $self->convert_tree_new_formatting_context( + $prepended, 'float prepended'); + if ($prepended_text ne '') { + $prepended_save = $prepended_text; + $prepended_text = '<p><strong>'.$prepended_text.'</strong></p>'; + } + } + } else { + $prepended_text = ''; + } + + if ($caption and $caption_text eq '') { + $caption_text = $self->convert_tree_new_formatting_context( + $caption->{'args'}->[0], 'float caption'); + } + if ($prepended_text.$caption_text ne '') { + $prepended_text = $self->_attribute_class('div','float-caption'). '>' + . $prepended_text; + $caption_text .= '</div>'; + } + my $html_class = ''; + if ($prepended_save =~ /NOTE/) { + $html_class = 'info'; + $prepended_text = ''; + $caption_text = ''; + } elsif ($prepended_save =~ /IMPORTANT/) { + $html_class = 'warning'; + $prepended_text = ''; + $caption_text = ''; + } + return $self->_attribute_class('div', $html_class). '>' . "\n" . + $prepended_text . $caption_text . $content . '</div>'; +} + +texinfo_register_command_formatting('float', + \&ffmpeg_float); + +1; \ No newline at end of file -- 1.9.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel