use strict;
use lib '.';
use Texinfo::ModulePath (undef, undef, undef, 'updirs' => 2);
require 't/test_utils.pl';
# do not use @node Top as it is ignored in LaTeX output
my $accents_text = '@node first
@top top
should be e`: @`{e} @`e
should be e\': @\'{e} @\'e
should be e^: @^{e} @^e
should be u": @"{u} @"u
should be i`: @`{i} @`i
should be i\': @\'{i} @\'i
should be i^: @^{i} @^i
should be u": @"{u} @"u
should be c,: @,{c} @,c
should be n~: @~{n} @~n
should be e=: @={e} @=e
should be e@w{\'}\': @H{e} @H e
should be e.: @dotaccent{e} @dotaccent e
should be e*: @ringaccent{e} @ringaccent e
should be ee[: @tieaccent{ee}
should be e(: @u{e} @u e
should be e_: @ubaraccent{e} @ubaraccent e
should be .e: @udotaccent{e} @udotaccent e
should be e<: @v{e} @v e
should be a; : @ogonek{a} @ogonek a
should be e; : @ogonek{e} @ogonek e
upside down: @questiondown{} @exclamdown{}
A-with-circle: @aa{},@AA{}
AE, OE ligatures: @ae{} @AE{} @oe{} @OE{}
dotless i, j: @dotless{i} @dotless{j}
Polish suppressed-L: @l{} @L{}
O-with-slash: @o{} @O{}
es-zet or sharp S: @ss{}
pounds sterling: @pounds{}
@c arg is command -- @dotless{i} is special-cased for HTML
should be dotless i`: @`{@dotless{i}}
should be dotless i\': @\'{@dotless{i}}
should be dotless i^: @^{@dotless{i}}
should be dotless i": @"{@dotless{i}}
@c arg is command -- @dotless{j}
should be dotless j`: @`{@dotless{j}}
should be dotless j\': @\'{@dotless{j}}
should be dotless j^: @^{@dotless{j}}
should be dotless j": @"{@dotless{j}}
';
my $latin1_accents_text = '@documentencoding ISO-8859-1
'.$accents_text;
my $weird_accents_text = '@documentencoding ISO-8859-1
@node Top
@top top
@node chap
@chapter Chapter
@={@~{@dotless{i}}}
@={@,{@~{n}}}
@={@ubaraccent{a}}
@^{@udotaccent{@`r}}
@={@\'{@`{r}}}
';
my $at_commands_in_refs_text = '@node Top
@top Top
@menu
* @- @{ @}::
* @ @ @! @* @. @: .@: @? @@::
* @atchar{} @lbracechar{} @rbracechar{} @backslashchar{} @hashchar{}::
* @LaTeX{} @TeX{} @bullet{} @comma{} @copyright{} @dots{} @enddots{}::
* @equiv{} @error{} @euro{} @exclamdown{} @expansion{} @minus{}::
* @geq{} @leq{} @arrow{}::
* @ordf{} @ordm{} @point{} @pounds{} @print{} @questiondown{} @registeredsymbol{}::
* @result{} @textdegree{} a@tie{}b @today{} @aa{}::
* @AA{} @ae{} @oe{} @AE{} @OE{} @o{} @O{} @ss{} @l{} @L{} @DH{} @dh{} @TH{} @th{}::
* @"{a} @~{e} @^{@dotless{i}} @^{a} @`{a} @\'e @,{c} @={e} @ringaccent{e} @H{e} @ogonek{e}::
* @dotaccent{e} @u{e} @ubaraccent{e} @udotaccent{e} @v{e} @dotless{j} @tieaccent{ee}::
* @dotless{i} @`{@=E} @,{@\'C}::
* @quotedblleft{} @quotedblright{} @quoteleft{} @quoteright{} @quotedblbase{} @quotesinglbase{}::
* @guillemetleft{} @guillemetright{} @guillemotleft{} @guillemotright{} @guilsinglleft{} @guilsinglright{}::
* `` \'\' --- -- ` \'::
* @acronym{AAA, fff} @acronym{AAA} @acronym{BBB}::
* @abbr{CCC, rrr} @abbr{CCC} @abbr{DDD}::
* @email{someone@@somewher, the someone} @email{no_explain@@there}::
* @image{f--ile1} @image{f--ile,aze,az,alt,e--xt}::
* @verb{. @ {} . .}::
* @cite{cite @asis{asis}} @w{in @@w @b{b}} @r{in r} @sc{sc} @strong{str} @t{t} @var{var} @dfn{dfn} @i{i}::
* @env{env} @code{code} @option{option} @samp{samp} @command{command} @file{file} @kbd{C-x @key{ESC}}::
* 8.27@dmn{in}::
* @sansserif{sansserif} @slanted{slanted}::
* @indicateurl{indicateurl}::
* @sub{g}H 3@sup{rd}::
* @url{http://somewhere_aaa} @url{url, text} @uref{/man.cgi/1/ls,,ls}::
@end menu
@node @- @{ @}
@chapter @- @{ @}
@node @ @ @! @* @. @: .@: @? @@
@chapter @ @ @! @* @. @: .@: @? @@
@node @atchar{} @lbracechar{} @rbracechar{} @backslashchar{} @hashchar{}
@chapter @atchar{} @lbracechar{} @rbracechar{} @backslashchar{} @hashchar{}
@node @LaTeX{} @TeX{} @bullet{} @comma{} @copyright{} @dots{} @enddots{}
@chapter @LaTeX{} @TeX{} @bullet{} @comma{} @copyright{} @dots{} @enddots{}
@node @equiv{} @error{} @euro{} @exclamdown{} @expansion{} @minus{}
@chapter @equiv{} @error{} @euro{} @exclamdown{} @expansion{} @minus{}
@node @geq{} @leq{} @arrow{}
@chapter @geq{} @leq{} @arrow{}
@node @ordf{} @ordm{} @point{} @pounds{} @print{} @questiondown{} @registeredsymbol{}
@chapter @ordf{} @ordm{} @point{} @pounds{} @print{} @questiondown{} @registeredsymbol{}
@node @result{} @textdegree{} a@tie{}b @today{} @aa{}
@chapter @result{} @textdegree{} a@tie{}b @today{} @aa{}
@node @AA{} @ae{} @oe{} @AE{} @OE{} @o{} @O{} @ss{} @l{} @L{} @DH{} @dh{} @TH{} @th{}
@chapter @AA{} @ae{} @oe{} @AE{} @OE{} @o{} @O{} @ss{} @l{} @L{} @DH{} @dh{} @TH{} @th{}
@node @"{a} @~{e} @^{@dotless{i}} @^{a} @`{a} @\'e @,{c} @={e} @ringaccent{e} @H{e} @ogonek{e}
@chapter @"{a} @~{e} @^{@dotless{i}} @^{a} @`{a} @\'e @,{c} @={e} @ringaccent{e} @H{e} @ogonek{e}
@node @dotaccent{e} @u{e} @ubaraccent{e} @udotaccent{e} @v{e} @dotless{j} @tieaccent{ee}
@chapter @dotaccent{e} @u{e} @ubaraccent{e} @udotaccent{e} @v{e} @dotless{j} @tieaccent{ee}
@node @dotless{i} @`{@=E} @,{@\'C}
@chapter @dotless{i} @`{@=E} @,{@\'C}
@node @quotedblleft{} @quotedblright{} @quoteleft{} @quoteright{} @quotedblbase{} @quotesinglbase{}
@chapter @quotedblleft{} @quotedblright{} @quoteleft{} @quoteright{} @quotedblbase{} @quotesinglbase{}
@node @guillemetleft{} @guillemetright{} @guillemotleft{} @guillemotright{} @guilsinglleft{} @guilsinglright{}
@chapter @guillemetleft{} @guillemetright{} @guillemotleft{} @guillemotright{} @guilsinglleft{} @guilsinglright{}
@node `` \'\' --- -- ` \'
@chapter `` \'\' --- -- ` \'
@node @acronym{AAA, fff} @acronym{AAA} @acronym{BBB}
@chapter @acronym{AAA, fff} @acronym{AAA} @acronym{BBB}
@node @abbr{CCC, rrr} @abbr{CCC} @abbr{DDD}
@ifnottex
@chapter @abbr{CCC, rrr} @abbr{CCC} @abbr{DDD}
@end ifnottex
@node @email{someone@@somewher, the someone} @email{no_explain@@there}
@chapter @email{someone@@somewher, the someone} @email{no_explain@@there}
@node @image{f--ile1} @image{f--ile,aze,az,alt,e--xt}
@ifnottex
@chapter @image{f--ile1} @image{f--ile,aze,az,alt,e--xt}
@end ifnottex
@node @verb{. @ {} . .}
@ifnottex
@chapter @verb{. @ {} . .}
@end ifnottex
@node @cite{cite @asis{asis}} @w{in @@w @b{b}} @r{in r} @sc{sc} @strong{str} @t{t} @var{var} @dfn{dfn} @i{i}
@chapter @cite{cite @asis{asis}} @w{in @@w @b{b}} @r{in r} @sc{sc} @strong{str} @t{t} @var{var} @dfn{dfn} @i{i}
@node @env{env} @code{code} @option{option} @samp{samp} @command{command} @file{file} @kbd{C-x @key{ESC}}
@chapter @env{env} @code{code} @option{option} @samp{samp} @command{command} @file{file} @kbd{C-x @key{ESC}}
@node 8.27@dmn{in}
@chapter 8.27@dmn{in}
@node @sansserif{sansserif} @slanted{slanted}
@chapter @sansserif{sansserif} @slanted{slanted}
@node @indicateurl{indicateurl}
@chapter @indicateurl{indicateurl}
@node @sub{g}H 3@sup{rd}
@chapter @sub{g}H 3@sup{rd}
@node @url{http://somewhere_aaa} @url{url, text} @uref{/man.cgi/1/ls,,ls}
@chapter @url{http://somewhere_aaa} @url{url, text} @uref{/man.cgi/1/ls,,ls}
@ref{@- @{ @}}
@ref{@ @ @! @* @. @: .@: @? @@}
@ref{@atchar{} @lbracechar{} @rbracechar{} @backslashchar{} @hashchar{}}
@ref{@LaTeX{} @TeX{} @bullet{} @comma{} @copyright{} @dots{} @enddots{}}
@ref{@equiv{} @error{} @euro{} @exclamdown{} @expansion{} @minus{}}
@ref{@geq{} @leq{} @arrow{}}
@ref{@ordf{} @ordm{} @point{} @pounds{} @print{} @questiondown{} @registeredsymbol{}}
@ref{@result{} @textdegree{} a@tie{}b @today{} @aa{}}
@ref{@AA{} @ae{} @oe{} @AE{} @OE{} @o{} @O{} @ss{} @l{} @L{} @DH{} @dh{} @TH{} @th{}}
@ref{@"{a} @~{e} @^{@dotless{i}} @^{a} @`{a} @\'e @,{c} @={e} @ringaccent{e} @H{e} @ogonek{e}}
@ref{@dotaccent{e} @u{e} @ubaraccent{e} @udotaccent{e} @v{e} @dotless{j} @tieaccent{ee}}
@ref{@dotless{i} @`{@=E} @,{@\'C}}
@ref{@quotedblleft{} @quotedblright{} @quoteleft{} @quoteright{} @quotedblbase{} @quotesinglbase{}}
@ref{@guillemetleft{} @guillemetright{} @guillemotleft{} @guillemotright{} @guilsinglleft{} @guilsinglright{}}
@ref{`` \'\' --- -- ` \'}
@ref{@acronym{AAA, fff} @acronym{AAA} @acronym{BBB}}
@ifnottex
@ref{@abbr{CCC, rrr} @abbr{CCC} @abbr{DDD}}
@end ifnottex
@ref{@email{someone@@somewher, the someone} @email{no_explain@@there}}
@ifnottex
@ref{@image{f--ile1} @image{f--ile,aze,az,alt,e--xt}}
@ref{@verb{. @ {} . .}}
@end ifnottex
@ref{@cite{cite @asis{asis}} @w{in @@w @b{b}} @r{in r} @sc{sc} @strong{str} @t{t} @var{var} @dfn{dfn} @i{i}}
@ref{@env{env} @code{code} @option{option} @samp{samp} @command{command} @file{file} @kbd{C-x @key{ESC}}}
@ref{8.27@dmn{in}}
@ref{@sansserif{sansserif} @slanted{slanted}}
@ref{@indicateurl{indicateurl}}
@ref{@sub{g}H 3@sup{rd}}
@ref{@url{http://somewhere_aaa} @url{url, text} @uref{/man.cgi/1/ls,,ls}}
@bye
';
my @test_cases = (
['documentencoding_utf8_and_insertions',
'@documentencoding utf-8
-- --- \'\' `` ` \' @code{in code}. @~e.
@example
-- --- \'\' `` ` \' @code{in code}. @~e.
@end example
'],
['no_documentencoding_and_insertions',
'
-- --- \'\' `` ` \' @code{in code}. @~e.
@example
-- --- \'\' `` ` \' @code{in code}. @~e.
@end example
'],
);
my @test_full_doc = (
['accentenc',
$latin1_accents_text
],
['weird_accents',
$weird_accents_text
],
['weird_accents_disable_encoding',
$weird_accents_text, {'ENABLE_ENCODING' => 0}
],
['accent',
$accents_text
],
['accent_enable_encoding',
$accents_text, {'ENABLE_ENCODING' => 1}, {'OUTPUT_CHARACTERS' => 1}
],
['accent_argument_non_ascii',
'@node Top
@top top
@node chap
@chapter Chapter
'."\@'{\x{00EA}}
\@'\x{00EA}
"],
['dotless_argument_non_ascii',
'@node Top
@top top
@node chap
@chapter Chapter
'."\@dotless{\x{00EA}}
\@dotless \x{00EA}
"],
['verb_delimiter_not_ascii',
'@node Top
@top top
@node chap
@chapter Chapter
'."\@verb{\x{00EA} some text \x{00EA}}
"],
# numerous LaTeX formatting errors
['at_commands_in_refs',
$at_commands_in_refs_text,
{},
{'TEST' => 1}], # TEST => 1 triggers @today constant expansion for diffs
);
my @html_text_cases = (
['accentenc_enable_encoding',
$latin1_accents_text, {'ENABLE_ENCODING' => 1}, {'OUTPUT_CHARACTERS' => 1}
],
);
my @file_tests = (
['char_utf8_latin1_in_refs',
undef, {'test_file' => 'char_utf8_latin1_in_refs.texi'}
],
['char_latin1_latin1_in_refs',
undef, {'test_file' => 'char_latin1_latin1_in_refs.texi'}
],
['char_us_ascii_latin1_in_refs',
undef, {'test_file' => 'char_us_ascii_latin1_in_refs.texi'}
],
['char_latin2_latin2_in_refs',
undef, {'test_file' => 'char_latin2_latin2_in_refs.texi'}
],
['japanese_shift_jis',
undef, {'test_file' => 'japanese_shift_jis.texi'}
],
['sample_utf8',
undef, {'test_file' => 'sample_utf8.texi'}
],
['manual_simple_utf8_with_error',
undef, {'test_file' => 'manual_simple_utf8_with_error.texi'}
],
['manual_simple_latin1_with_error',
undef, {'test_file' => 'manual_simple_latin1_with_error.texi'}
],
['multiple_include_encodings',
undef, {'test_file' => 'multiple_include_encodings.texi',
'skip' => $Texinfo::ModulePath::conversion_from_euc_cn ne 'yes'
? 'No conversion from EUC-CN' : undef, }
],
['8bit_document_translations',
undef, {'test_file' => 'pl_translated_inserted_strings_8bit.texi'}
],
['at_commands_in_refs_utf8',
'@setfilename at_commands_in_refs_utf8.info
@documentencoding utf-8
'.
$at_commands_in_refs_text,
{'full_document' => 1},
{'TEST' => 1}], # TEST => 1 triggers @today constant expansion for diffs
['at_commands_in_refs_latin1',
'@setfilename at_commands_in_refs_latin1.info
@documentencoding ISO-8859-15
'.
$at_commands_in_refs_text,
{'full_document' => 1}, {'TEST' => 1}], # TEST => 1 triggers @today constant expansion for diffs
);
my %info_tests = (
'at_commands_in_refs' => 1,
);
my %html_tests = (
'at_commands_in_refs' => 1,
);
my %xml_file_tests = (
'char_latin1_latin1_in_refs' => 1,
);
my %latex_tests = ();
foreach my $test (@test_cases) {
push @{$test->[2]->{'test_formats'}}, 'plaintext';
if ($html_tests{$test->[0]}) {
push @{$test->[2]->{'test_formats'}}, 'html';
} else {
push @{$test->[2]->{'test_formats'}}, 'html_text';
}
push @{$test->[2]->{'test_formats'}}, 'xml';
push @{$test->[2]->{'test_formats'}}, 'docbook';
push @{$test->[2]->{'test_formats'}}, 'latex_text'
if ($latex_tests{$test->[0]});
push @{$test->[2]->{'test_formats'}}, 'info'
if ($info_tests{$test->[0]});
}
foreach my $test (@test_full_doc) {
push @{$test->[2]->{'test_formats'}}, 'plaintext';
if ($html_tests{$test->[0]}) {
push @{$test->[2]->{'test_formats'}}, 'html';
} else {
push @{$test->[2]->{'test_formats'}}, 'html_text';
}
push @{$test->[2]->{'test_formats'}}, 'xml';
push @{$test->[2]->{'test_formats'}}, 'docbook';
push @{$test->[2]->{'test_formats'}}, 'latex_text';
push @{$test->[2]->{'test_formats'}}, 'info'
if ($info_tests{$test->[0]});
$test->[2]->{'full_document'} = 1 unless (exists($test->[2]->{'full_document'}));
}
foreach my $test (@html_text_cases) {
push @{$test->[2]->{'test_formats'}}, 'html_text';
}
foreach my $test (@file_tests) {
push @{$test->[2]->{'test_formats'}}, 'file_html';
push @{$test->[2]->{'test_formats'}}, 'file_info';
if ($xml_file_tests{$test->[0]}) {
push @{$test->[2]->{'test_formats'}}, ('file_xml', 'file_docbook', 'file_latex');
}
}
run_all('formats_encodings', [@test_cases, @test_full_doc,
@file_tests, @html_text_cases]);