1cabdff1aSopenharmony_ci# makeinfo HTML output init file 2cabdff1aSopenharmony_ci# 3cabdff1aSopenharmony_ci# Copyright (c) 2011, 2012 Free Software Foundation, Inc. 4cabdff1aSopenharmony_ci# Copyright (c) 2014 Andreas Cadhalpun 5cabdff1aSopenharmony_ci# Copyright (c) 2014 Tiancheng "Timothy" Gu 6cabdff1aSopenharmony_ci# 7cabdff1aSopenharmony_ci# This file is part of FFmpeg. 8cabdff1aSopenharmony_ci# 9cabdff1aSopenharmony_ci# FFmpeg is free software; you can redistribute it and/or modify 10cabdff1aSopenharmony_ci# it under the terms of the GNU General Public License as published by 11cabdff1aSopenharmony_ci# the Free Software Foundation; either version 3 of the License, or 12cabdff1aSopenharmony_ci# (at your option) any later version. 13cabdff1aSopenharmony_ci# 14cabdff1aSopenharmony_ci# FFmpeg is distributed in the hope that it will be useful, 15cabdff1aSopenharmony_ci# but WITHOUT ANY WARRANTY; without even the implied warranty of 16cabdff1aSopenharmony_ci# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17cabdff1aSopenharmony_ci# General Public License for more details. 18cabdff1aSopenharmony_ci# 19cabdff1aSopenharmony_ci# You should have received a copy of the GNU General Public 20cabdff1aSopenharmony_ci# License along with FFmpeg; if not, write to the Free Software 21cabdff1aSopenharmony_ci# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22cabdff1aSopenharmony_ci 23cabdff1aSopenharmony_ci# Texinfo 7.0 changed the syntax of various functions. 24cabdff1aSopenharmony_ci# Provide a shim for older versions. 25cabdff1aSopenharmony_cisub ff_set_from_init_file($$) { 26cabdff1aSopenharmony_ci my $key = shift; 27cabdff1aSopenharmony_ci my $value = shift; 28cabdff1aSopenharmony_ci if (exists &{'texinfo_set_from_init_file'}) { 29cabdff1aSopenharmony_ci texinfo_set_from_init_file($key, $value); 30cabdff1aSopenharmony_ci } else { 31cabdff1aSopenharmony_ci set_from_init_file($key, $value); 32cabdff1aSopenharmony_ci } 33cabdff1aSopenharmony_ci} 34cabdff1aSopenharmony_ci 35cabdff1aSopenharmony_cisub ff_get_conf($) { 36cabdff1aSopenharmony_ci my $key = shift; 37cabdff1aSopenharmony_ci if (exists &{'texinfo_get_conf'}) { 38cabdff1aSopenharmony_ci texinfo_get_conf($key); 39cabdff1aSopenharmony_ci } else { 40cabdff1aSopenharmony_ci get_conf($key); 41cabdff1aSopenharmony_ci } 42cabdff1aSopenharmony_ci} 43cabdff1aSopenharmony_ci 44cabdff1aSopenharmony_cisub get_formatting_function($$) { 45cabdff1aSopenharmony_ci my $obj = shift; 46cabdff1aSopenharmony_ci my $func = shift; 47cabdff1aSopenharmony_ci 48cabdff1aSopenharmony_ci my $sub = $obj->can('formatting_function'); 49cabdff1aSopenharmony_ci if ($sub) { 50cabdff1aSopenharmony_ci return $obj->formatting_function($func); 51cabdff1aSopenharmony_ci } else { 52cabdff1aSopenharmony_ci return $obj->{$func}; 53cabdff1aSopenharmony_ci } 54cabdff1aSopenharmony_ci} 55cabdff1aSopenharmony_ci 56cabdff1aSopenharmony_ci# determine texinfo version 57cabdff1aSopenharmony_cimy $program_version_num = version->declare(ff_get_conf('PACKAGE_VERSION'))->numify; 58cabdff1aSopenharmony_cimy $program_version_6_8 = $program_version_num >= 6.008000; 59cabdff1aSopenharmony_ci 60cabdff1aSopenharmony_ci# no navigation elements 61cabdff1aSopenharmony_ciff_set_from_init_file('HEADERS', 0); 62cabdff1aSopenharmony_ci 63cabdff1aSopenharmony_cisub ffmpeg_heading_command($$$$$) 64cabdff1aSopenharmony_ci{ 65cabdff1aSopenharmony_ci my $self = shift; 66cabdff1aSopenharmony_ci my $cmdname = shift; 67cabdff1aSopenharmony_ci my $command = shift; 68cabdff1aSopenharmony_ci my $args = shift; 69cabdff1aSopenharmony_ci my $content = shift; 70cabdff1aSopenharmony_ci 71cabdff1aSopenharmony_ci my $result = ''; 72cabdff1aSopenharmony_ci 73cabdff1aSopenharmony_ci # not clear that it may really happen 74cabdff1aSopenharmony_ci if ($self->in_string) { 75cabdff1aSopenharmony_ci $result .= $self->command_string($command) ."\n" if ($cmdname ne 'node'); 76cabdff1aSopenharmony_ci $result .= $content if (defined($content)); 77cabdff1aSopenharmony_ci return $result; 78cabdff1aSopenharmony_ci } 79cabdff1aSopenharmony_ci 80cabdff1aSopenharmony_ci my $element_id = $self->command_id($command); 81cabdff1aSopenharmony_ci $result .= "<a name=\"$element_id\"></a>\n" 82cabdff1aSopenharmony_ci if (defined($element_id) and $element_id ne ''); 83cabdff1aSopenharmony_ci 84cabdff1aSopenharmony_ci print STDERR "Process $command " 85cabdff1aSopenharmony_ci .Texinfo::Structuring::_print_root_command_texi($command)."\n" 86cabdff1aSopenharmony_ci if ($self->get_conf('DEBUG')); 87cabdff1aSopenharmony_ci my $element; 88cabdff1aSopenharmony_ci if ($Texinfo::Common::root_commands{$command->{'cmdname'}} 89cabdff1aSopenharmony_ci and $command->{'parent'} 90cabdff1aSopenharmony_ci and $command->{'parent'}->{'type'} 91cabdff1aSopenharmony_ci and $command->{'parent'}->{'type'} eq 'element') { 92cabdff1aSopenharmony_ci $element = $command->{'parent'}; 93cabdff1aSopenharmony_ci } 94cabdff1aSopenharmony_ci if ($element) { 95cabdff1aSopenharmony_ci $result .= &{get_formatting_function($self, 'format_element_header')}($self, $cmdname, 96cabdff1aSopenharmony_ci $command, $element); 97cabdff1aSopenharmony_ci } 98cabdff1aSopenharmony_ci 99cabdff1aSopenharmony_ci my $heading_level; 100cabdff1aSopenharmony_ci # node is used as heading if there is nothing else. 101cabdff1aSopenharmony_ci if ($cmdname eq 'node') { 102cabdff1aSopenharmony_ci if (!$element or (!$element->{'extra'}->{'section'} 103cabdff1aSopenharmony_ci and $element->{'extra'}->{'node'} 104cabdff1aSopenharmony_ci and $element->{'extra'}->{'node'} eq $command 105cabdff1aSopenharmony_ci # bogus node may not have been normalized 106cabdff1aSopenharmony_ci and defined($command->{'extra'}->{'normalized'}))) { 107cabdff1aSopenharmony_ci if ($command->{'extra'}->{'normalized'} eq 'Top') { 108cabdff1aSopenharmony_ci $heading_level = 0; 109cabdff1aSopenharmony_ci } else { 110cabdff1aSopenharmony_ci $heading_level = 3; 111cabdff1aSopenharmony_ci } 112cabdff1aSopenharmony_ci } 113cabdff1aSopenharmony_ci } else { 114cabdff1aSopenharmony_ci $heading_level = $command->{'level'}; 115cabdff1aSopenharmony_ci } 116cabdff1aSopenharmony_ci 117cabdff1aSopenharmony_ci my $heading = $self->command_text($command); 118cabdff1aSopenharmony_ci # $heading not defined may happen if the command is a @node, for example 119cabdff1aSopenharmony_ci # if there is an error in the node. 120cabdff1aSopenharmony_ci if (defined($heading) and $heading ne '' and defined($heading_level)) { 121cabdff1aSopenharmony_ci 122cabdff1aSopenharmony_ci if ($Texinfo::Common::root_commands{$cmdname} 123cabdff1aSopenharmony_ci and $Texinfo::Common::sectioning_commands{$cmdname}) { 124cabdff1aSopenharmony_ci my $content_href = $self->command_contents_href($command, 'contents', 125cabdff1aSopenharmony_ci $self->{'current_filename'}); 126cabdff1aSopenharmony_ci if ($content_href) { 127cabdff1aSopenharmony_ci my $this_href = $content_href =~ s/^\#toc-/\#/r; 128cabdff1aSopenharmony_ci $heading .= '<span class="pull-right">'. 129cabdff1aSopenharmony_ci '<a class="anchor hidden-xs" '. 130cabdff1aSopenharmony_ci "href=\"$this_href\" aria-hidden=\"true\">". 131cabdff1aSopenharmony_ci ($ENV{"FA_ICONS"} ? '<i class="fa fa-link"></i>' 132cabdff1aSopenharmony_ci : '#'). 133cabdff1aSopenharmony_ci '</a> '. 134cabdff1aSopenharmony_ci '<a class="anchor hidden-xs"'. 135cabdff1aSopenharmony_ci "href=\"$content_href\" aria-hidden=\"true\">". 136cabdff1aSopenharmony_ci ($ENV{"FA_ICONS"} ? '<i class="fa fa-navicon"></i>' 137cabdff1aSopenharmony_ci : 'TOC'). 138cabdff1aSopenharmony_ci '</a>'. 139cabdff1aSopenharmony_ci '</span>'; 140cabdff1aSopenharmony_ci } 141cabdff1aSopenharmony_ci } 142cabdff1aSopenharmony_ci 143cabdff1aSopenharmony_ci if ($self->in_preformatted()) { 144cabdff1aSopenharmony_ci $result .= $heading."\n"; 145cabdff1aSopenharmony_ci } else { 146cabdff1aSopenharmony_ci # if the level was changed, set the command name right 147cabdff1aSopenharmony_ci if ($cmdname ne 'node' 148cabdff1aSopenharmony_ci and $heading_level ne $Texinfo::Common::command_structuring_level{$cmdname}) { 149cabdff1aSopenharmony_ci $cmdname 150cabdff1aSopenharmony_ci = $Texinfo::Common::level_to_structuring_command{$cmdname}->[$heading_level]; 151cabdff1aSopenharmony_ci } 152cabdff1aSopenharmony_ci # format_heading_text expects an array of headings for texinfo >= 7.0 153cabdff1aSopenharmony_ci if ($program_version_num >= 7.000000) { 154cabdff1aSopenharmony_ci $heading = [$heading]; 155cabdff1aSopenharmony_ci } 156cabdff1aSopenharmony_ci $result .= &{get_formatting_function($self,'format_heading_text')}( 157cabdff1aSopenharmony_ci $self, $cmdname, $heading, 158cabdff1aSopenharmony_ci $heading_level + 159cabdff1aSopenharmony_ci $self->get_conf('CHAPTER_HEADER_LEVEL') - 1, $command); 160cabdff1aSopenharmony_ci } 161cabdff1aSopenharmony_ci } 162cabdff1aSopenharmony_ci $result .= $content if (defined($content)); 163cabdff1aSopenharmony_ci return $result; 164cabdff1aSopenharmony_ci} 165cabdff1aSopenharmony_ci 166cabdff1aSopenharmony_ciforeach my $command (keys(%Texinfo::Common::sectioning_commands), 'node') { 167cabdff1aSopenharmony_ci texinfo_register_command_formatting($command, \&ffmpeg_heading_command); 168cabdff1aSopenharmony_ci} 169cabdff1aSopenharmony_ci 170cabdff1aSopenharmony_ci# print the TOC where @contents is used 171cabdff1aSopenharmony_ciif ($program_version_6_8) { 172cabdff1aSopenharmony_ci ff_set_from_init_file('CONTENTS_OUTPUT_LOCATION', 'inline'); 173cabdff1aSopenharmony_ci} else { 174cabdff1aSopenharmony_ci ff_set_from_init_file('INLINE_CONTENTS', 1); 175cabdff1aSopenharmony_ci} 176cabdff1aSopenharmony_ci 177cabdff1aSopenharmony_ci# make chapters <h2> 178cabdff1aSopenharmony_ciff_set_from_init_file('CHAPTER_HEADER_LEVEL', 2); 179cabdff1aSopenharmony_ci 180cabdff1aSopenharmony_ci# Do not add <hr> 181cabdff1aSopenharmony_ciff_set_from_init_file('DEFAULT_RULE', ''); 182cabdff1aSopenharmony_ciff_set_from_init_file('BIG_RULE', ''); 183cabdff1aSopenharmony_ci 184cabdff1aSopenharmony_ci# Customized file beginning 185cabdff1aSopenharmony_cisub ffmpeg_begin_file($$$) 186cabdff1aSopenharmony_ci{ 187cabdff1aSopenharmony_ci my $self = shift; 188cabdff1aSopenharmony_ci my $filename = shift; 189cabdff1aSopenharmony_ci my $element = shift; 190cabdff1aSopenharmony_ci 191cabdff1aSopenharmony_ci my $command; 192cabdff1aSopenharmony_ci if ($element and $self->get_conf('SPLIT')) { 193cabdff1aSopenharmony_ci $command = $self->element_command($element); 194cabdff1aSopenharmony_ci } 195cabdff1aSopenharmony_ci 196cabdff1aSopenharmony_ci my ($title, $description, $encoding, $date, $css_lines, 197cabdff1aSopenharmony_ci $doctype, $bodytext, $copying_comment, $after_body_open, 198cabdff1aSopenharmony_ci $extra_head, $program_and_version, $program_homepage, 199cabdff1aSopenharmony_ci $program, $generator); 200cabdff1aSopenharmony_ci if ($program_version_num >= 7.000000) { 201cabdff1aSopenharmony_ci ($title, $description, $encoding, $date, $css_lines, 202cabdff1aSopenharmony_ci $doctype, $bodytext, $copying_comment, $after_body_open, 203cabdff1aSopenharmony_ci $extra_head, $program_and_version, $program_homepage, 204cabdff1aSopenharmony_ci $program, $generator) = $self->_file_header_information($command); 205cabdff1aSopenharmony_ci } else { 206cabdff1aSopenharmony_ci ($title, $description, $encoding, $date, $css_lines, 207cabdff1aSopenharmony_ci $doctype, $bodytext, $copying_comment, $after_body_open, 208cabdff1aSopenharmony_ci $extra_head, $program_and_version, $program_homepage, 209cabdff1aSopenharmony_ci $program, $generator) = $self->_file_header_informations($command); 210cabdff1aSopenharmony_ci } 211cabdff1aSopenharmony_ci 212cabdff1aSopenharmony_ci my $links = $self->_get_links ($filename, $element); 213cabdff1aSopenharmony_ci 214cabdff1aSopenharmony_ci my $head1 = $ENV{"FFMPEG_HEADER1"} || <<EOT; 215cabdff1aSopenharmony_ci<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 216cabdff1aSopenharmony_ci<html> 217cabdff1aSopenharmony_ci<!-- Created by $program_and_version, $program_homepage --> 218cabdff1aSopenharmony_ci <head> 219cabdff1aSopenharmony_ci <meta charset="utf-8"> 220cabdff1aSopenharmony_ci <title> 221cabdff1aSopenharmony_ciEOT 222cabdff1aSopenharmony_ci my $head_title = <<EOT; 223cabdff1aSopenharmony_ci $title 224cabdff1aSopenharmony_ciEOT 225cabdff1aSopenharmony_ci 226cabdff1aSopenharmony_ci my $head2 = $ENV{"FFMPEG_HEADER2"} || <<EOT; 227cabdff1aSopenharmony_ci </title> 228cabdff1aSopenharmony_ci <meta name="viewport" content="width=device-width,initial-scale=1.0"> 229cabdff1aSopenharmony_ci <link rel="stylesheet" type="text/css" href="bootstrap.min.css"> 230cabdff1aSopenharmony_ci <link rel="stylesheet" type="text/css" href="style.min.css"> 231cabdff1aSopenharmony_ci </head> 232cabdff1aSopenharmony_ci <body> 233cabdff1aSopenharmony_ci <div class="container"> 234cabdff1aSopenharmony_ci <h1> 235cabdff1aSopenharmony_ciEOT 236cabdff1aSopenharmony_ci 237cabdff1aSopenharmony_ci my $head3 = $ENV{"FFMPEG_HEADER3"} || <<EOT; 238cabdff1aSopenharmony_ci </h1> 239cabdff1aSopenharmony_ciEOT 240cabdff1aSopenharmony_ci 241cabdff1aSopenharmony_ci return $head1 . $head_title . $head2 . $head_title . $head3; 242cabdff1aSopenharmony_ci} 243cabdff1aSopenharmony_ciif ($program_version_6_8) { 244cabdff1aSopenharmony_ci texinfo_register_formatting_function('format_begin_file', \&ffmpeg_begin_file); 245cabdff1aSopenharmony_ci} else { 246cabdff1aSopenharmony_ci texinfo_register_formatting_function('begin_file', \&ffmpeg_begin_file); 247cabdff1aSopenharmony_ci} 248cabdff1aSopenharmony_ci 249cabdff1aSopenharmony_cisub ffmpeg_program_string($) 250cabdff1aSopenharmony_ci{ 251cabdff1aSopenharmony_ci my $self = shift; 252cabdff1aSopenharmony_ci if (defined($self->get_conf('PROGRAM')) 253cabdff1aSopenharmony_ci and $self->get_conf('PROGRAM') ne '' 254cabdff1aSopenharmony_ci and defined($self->get_conf('PACKAGE_URL'))) { 255cabdff1aSopenharmony_ci return $self->convert_tree( 256cabdff1aSopenharmony_ci $self->gdt('This document was generated using @uref{{program_homepage}, @emph{{program}}}.', 257cabdff1aSopenharmony_ci { 'program_homepage' => $self->get_conf('PACKAGE_URL'), 258cabdff1aSopenharmony_ci 'program' => $self->get_conf('PROGRAM') })); 259cabdff1aSopenharmony_ci } else { 260cabdff1aSopenharmony_ci return $self->convert_tree( 261cabdff1aSopenharmony_ci $self->gdt('This document was generated automatically.')); 262cabdff1aSopenharmony_ci } 263cabdff1aSopenharmony_ci} 264cabdff1aSopenharmony_ciif ($program_version_6_8) { 265cabdff1aSopenharmony_ci texinfo_register_formatting_function('format_program_string', \&ffmpeg_program_string); 266cabdff1aSopenharmony_ci} else { 267cabdff1aSopenharmony_ci texinfo_register_formatting_function('program_string', \&ffmpeg_program_string); 268cabdff1aSopenharmony_ci} 269cabdff1aSopenharmony_ci 270cabdff1aSopenharmony_ci# Customized file ending 271cabdff1aSopenharmony_cisub ffmpeg_end_file($) 272cabdff1aSopenharmony_ci{ 273cabdff1aSopenharmony_ci my $self = shift; 274cabdff1aSopenharmony_ci my $program_string = &{get_formatting_function($self,'format_program_string')}($self); 275cabdff1aSopenharmony_ci my $program_text = <<EOT; 276cabdff1aSopenharmony_ci <p style="font-size: small;"> 277cabdff1aSopenharmony_ci $program_string 278cabdff1aSopenharmony_ci </p> 279cabdff1aSopenharmony_ciEOT 280cabdff1aSopenharmony_ci my $footer = $ENV{FFMPEG_FOOTER} || <<EOT; 281cabdff1aSopenharmony_ci </div> 282cabdff1aSopenharmony_ci </body> 283cabdff1aSopenharmony_ci</html> 284cabdff1aSopenharmony_ciEOT 285cabdff1aSopenharmony_ci return $program_text . $footer; 286cabdff1aSopenharmony_ci} 287cabdff1aSopenharmony_ciif ($program_version_6_8) { 288cabdff1aSopenharmony_ci texinfo_register_formatting_function('format_end_file', \&ffmpeg_end_file); 289cabdff1aSopenharmony_ci} else { 290cabdff1aSopenharmony_ci texinfo_register_formatting_function('end_file', \&ffmpeg_end_file); 291cabdff1aSopenharmony_ci} 292cabdff1aSopenharmony_ci 293cabdff1aSopenharmony_ci# Dummy title command 294cabdff1aSopenharmony_ci# Ignore title. Title is handled through ffmpeg_begin_file(). 295cabdff1aSopenharmony_ciff_set_from_init_file('USE_TITLEPAGE_FOR_TITLE', 1); 296cabdff1aSopenharmony_cisub ffmpeg_title($$$$) 297cabdff1aSopenharmony_ci{ 298cabdff1aSopenharmony_ci return ''; 299cabdff1aSopenharmony_ci} 300cabdff1aSopenharmony_ci 301cabdff1aSopenharmony_citexinfo_register_command_formatting('titlefont', 302cabdff1aSopenharmony_ci \&ffmpeg_title); 303cabdff1aSopenharmony_ci 304cabdff1aSopenharmony_ci# Customized float command. Part of code borrowed from GNU Texinfo. 305cabdff1aSopenharmony_cisub ffmpeg_float($$$$$) 306cabdff1aSopenharmony_ci{ 307cabdff1aSopenharmony_ci my $self = shift; 308cabdff1aSopenharmony_ci my $cmdname = shift; 309cabdff1aSopenharmony_ci my $command = shift; 310cabdff1aSopenharmony_ci my $args = shift; 311cabdff1aSopenharmony_ci my $content = shift; 312cabdff1aSopenharmony_ci 313cabdff1aSopenharmony_ci my ($caption, $prepended); 314cabdff1aSopenharmony_ci if ($program_version_num >= 7.000000) { 315cabdff1aSopenharmony_ci ($caption, $prepended) = Texinfo::Convert::Converter::float_name_caption($self, 316cabdff1aSopenharmony_ci $command); 317cabdff1aSopenharmony_ci } else { 318cabdff1aSopenharmony_ci ($caption, $prepended) = Texinfo::Common::float_name_caption($self, 319cabdff1aSopenharmony_ci $command); 320cabdff1aSopenharmony_ci } 321cabdff1aSopenharmony_ci my $caption_text = ''; 322cabdff1aSopenharmony_ci my $prepended_text; 323cabdff1aSopenharmony_ci my $prepended_save = ''; 324cabdff1aSopenharmony_ci 325cabdff1aSopenharmony_ci if ($self->in_string()) { 326cabdff1aSopenharmony_ci if ($prepended) { 327cabdff1aSopenharmony_ci $prepended_text = $self->convert_tree_new_formatting_context( 328cabdff1aSopenharmony_ci $prepended, 'float prepended'); 329cabdff1aSopenharmony_ci } else { 330cabdff1aSopenharmony_ci $prepended_text = ''; 331cabdff1aSopenharmony_ci } 332cabdff1aSopenharmony_ci if ($caption) { 333cabdff1aSopenharmony_ci $caption_text = $self->convert_tree_new_formatting_context( 334cabdff1aSopenharmony_ci {'contents' => $caption->{'args'}->[0]->{'contents'}}, 335cabdff1aSopenharmony_ci 'float caption'); 336cabdff1aSopenharmony_ci } 337cabdff1aSopenharmony_ci return $prepended.$content.$caption_text; 338cabdff1aSopenharmony_ci } 339cabdff1aSopenharmony_ci 340cabdff1aSopenharmony_ci my $id = $self->command_id($command); 341cabdff1aSopenharmony_ci my $label; 342cabdff1aSopenharmony_ci if (defined($id) and $id ne '') { 343cabdff1aSopenharmony_ci $label = "<a name=\"$id\"></a>"; 344cabdff1aSopenharmony_ci } else { 345cabdff1aSopenharmony_ci $label = ''; 346cabdff1aSopenharmony_ci } 347cabdff1aSopenharmony_ci 348cabdff1aSopenharmony_ci if ($prepended) { 349cabdff1aSopenharmony_ci if ($caption) { 350cabdff1aSopenharmony_ci # prepend the prepended tree to the first paragraph 351cabdff1aSopenharmony_ci my @caption_original_contents = @{$caption->{'args'}->[0]->{'contents'}}; 352cabdff1aSopenharmony_ci my @caption_contents; 353cabdff1aSopenharmony_ci my $new_paragraph; 354cabdff1aSopenharmony_ci while (@caption_original_contents) { 355cabdff1aSopenharmony_ci my $content = shift @caption_original_contents; 356cabdff1aSopenharmony_ci if ($content->{'type'} and $content->{'type'} eq 'paragraph') { 357cabdff1aSopenharmony_ci %{$new_paragraph} = %{$content}; 358cabdff1aSopenharmony_ci $new_paragraph->{'contents'} = [@{$content->{'contents'}}]; 359cabdff1aSopenharmony_ci unshift (@{$new_paragraph->{'contents'}}, {'cmdname' => 'strong', 360cabdff1aSopenharmony_ci 'args' => [{'type' => 'brace_command_arg', 361cabdff1aSopenharmony_ci 'contents' => [$prepended]}]}); 362cabdff1aSopenharmony_ci push @caption_contents, $new_paragraph; 363cabdff1aSopenharmony_ci last; 364cabdff1aSopenharmony_ci } else { 365cabdff1aSopenharmony_ci push @caption_contents, $content; 366cabdff1aSopenharmony_ci } 367cabdff1aSopenharmony_ci } 368cabdff1aSopenharmony_ci push @caption_contents, @caption_original_contents; 369cabdff1aSopenharmony_ci if ($new_paragraph) { 370cabdff1aSopenharmony_ci $caption_text = $self->convert_tree_new_formatting_context( 371cabdff1aSopenharmony_ci {'contents' => \@caption_contents}, 'float caption'); 372cabdff1aSopenharmony_ci $prepended_text = ''; 373cabdff1aSopenharmony_ci } 374cabdff1aSopenharmony_ci } 375cabdff1aSopenharmony_ci if ($caption_text eq '') { 376cabdff1aSopenharmony_ci $prepended_text = $self->convert_tree_new_formatting_context( 377cabdff1aSopenharmony_ci $prepended, 'float prepended'); 378cabdff1aSopenharmony_ci if ($prepended_text ne '') { 379cabdff1aSopenharmony_ci $prepended_save = $prepended_text; 380cabdff1aSopenharmony_ci $prepended_text = '<p><strong>'.$prepended_text.'</strong></p>'; 381cabdff1aSopenharmony_ci } 382cabdff1aSopenharmony_ci } 383cabdff1aSopenharmony_ci } else { 384cabdff1aSopenharmony_ci $prepended_text = ''; 385cabdff1aSopenharmony_ci } 386cabdff1aSopenharmony_ci 387cabdff1aSopenharmony_ci if ($caption and $caption_text eq '') { 388cabdff1aSopenharmony_ci $caption_text = $self->convert_tree_new_formatting_context( 389cabdff1aSopenharmony_ci $caption->{'args'}->[0], 'float caption'); 390cabdff1aSopenharmony_ci } 391cabdff1aSopenharmony_ci if ($prepended_text.$caption_text ne '') { 392cabdff1aSopenharmony_ci if ($program_version_num >= 7.000000) { 393cabdff1aSopenharmony_ci $prepended_text = $self->html_attribute_class('div',['float-caption']). '>' 394cabdff1aSopenharmony_ci . $prepended_text; 395cabdff1aSopenharmony_ci } else { 396cabdff1aSopenharmony_ci $prepended_text = $self->_attribute_class('div','float-caption'). '>' 397cabdff1aSopenharmony_ci . $prepended_text; 398cabdff1aSopenharmony_ci } 399cabdff1aSopenharmony_ci $caption_text .= '</div>'; 400cabdff1aSopenharmony_ci } 401cabdff1aSopenharmony_ci my $html_class = ''; 402cabdff1aSopenharmony_ci if ($prepended_save =~ /NOTE/) { 403cabdff1aSopenharmony_ci $html_class = 'info'; 404cabdff1aSopenharmony_ci $prepended_text = ''; 405cabdff1aSopenharmony_ci $caption_text = ''; 406cabdff1aSopenharmony_ci } elsif ($prepended_save =~ /IMPORTANT/) { 407cabdff1aSopenharmony_ci $html_class = 'warning'; 408cabdff1aSopenharmony_ci $prepended_text = ''; 409cabdff1aSopenharmony_ci $caption_text = ''; 410cabdff1aSopenharmony_ci } 411cabdff1aSopenharmony_ci if ($program_version_num >= 7.000000) { 412cabdff1aSopenharmony_ci return $self->html_attribute_class('div', [$html_class]). '>' . "\n" . 413cabdff1aSopenharmony_ci $prepended_text . $caption_text . $content . '</div>'; 414cabdff1aSopenharmony_ci } else { 415cabdff1aSopenharmony_ci return $self->_attribute_class('div', $html_class). '>' . "\n" . 416cabdff1aSopenharmony_ci $prepended_text . $caption_text . $content . '</div>'; 417cabdff1aSopenharmony_ci } 418cabdff1aSopenharmony_ci} 419cabdff1aSopenharmony_ci 420cabdff1aSopenharmony_citexinfo_register_command_formatting('float', 421cabdff1aSopenharmony_ci \&ffmpeg_float); 422cabdff1aSopenharmony_ci 423cabdff1aSopenharmony_ci1; 424