LaTeX-Decode-0.04000755000765000024 012547031620 12536 5ustar00fc7staff000000000000LaTeX-Decode-0.04/Build.PL000444000765000024 116112547031620 14166 0ustar00fc7staff000000000000use strict; use warnings; use Module::Build; my $builder = Module::Build->new( module_name => 'LaTeX::Decode', license => 'artistic_2', dist_author => q{François Charette }, dist_version_from => 'lib/LaTeX/Decode.pm', build_requires => { 'Test::More' => 0, }, requires => { 'perl' => 5.008, 'File::Slurp' => 0, 'Unicode::Normalize' => 0, }, script_files => [ glob( "bin/*" ) ], add_to_cleanup => [ 'LaTeX-Decode-*' ], # create_makefile_pl => 'traditional', ); $builder->create_build_script(); LaTeX-Decode-0.04/Changes000444000765000024 137312547031620 14172 0ustar00fc7staff000000000000Revision history for LaTeX-Decode 0.04 [2015/07/07] * Fix small POD encoding problem 0.03 [2010/08/15] * Allow stripping braces around macros standing for a single char * Added and updated the companion script latex2utf8 which was mistakenly omitted in the previous tarball * implement option --filter in latex2utf8 * License is now explicitly Artistic 2.0 0.02 [2010/08/03] Initial upload on CPAN [2010/07/24: initial commit of standalone module on github] ------------------------------------------------------------------- 0.01 2008/05/23 First version was bundled with Biber: see http://biblatex-biber.git.sourceforge.net for complete revision history. LaTeX-Decode-0.04/MANIFEST000444000765000024 24012547031620 14000 0ustar00fc7staff000000000000Build.PL Changes MANIFEST README lib/LaTeX/Decode.pm lib/LaTeX/Decode/Data.pm bin/latex2utf8 t/00-load.t t/pod-coverage.t t/pod.t t/decode.t META.yml META.json LaTeX-Decode-0.04/META.json000444000765000024 227412547031620 14321 0ustar00fc7staff000000000000{ "abstract" : "Decode from LaTeX to Unicode", "author" : [ "François Charette " ], "dynamic_config" : 1, "generated_by" : "Module::Build version 0.4214", "license" : [ "artistic_2" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "LaTeX-Decode", "prereqs" : { "build" : { "requires" : { "Test::More" : "0" } }, "configure" : { "requires" : { "Module::Build" : "0.42" } }, "runtime" : { "requires" : { "File::Slurp" : "0", "Unicode::Normalize" : "0", "perl" : "5.008" } } }, "provides" : { "LaTeX::Decode" : { "file" : "lib/LaTeX/Decode.pm", "version" : "0.04" }, "LaTeX::Decode::Data" : { "file" : "lib/LaTeX/Decode/Data.pm" } }, "release_status" : "stable", "resources" : { "license" : [ "http://opensource.org/licenses/artistic-license-2.0.php" ] }, "version" : "0.04", "x_serialization_backend" : "JSON::PP version 2.27202" } LaTeX-Decode-0.04/META.yml000444000765000024 140112547031620 14140 0ustar00fc7staff000000000000--- abstract: 'Decode from LaTeX to Unicode' author: - 'François Charette ' build_requires: Test::More: '0' configure_requires: Module::Build: '0.42' dynamic_config: 1 generated_by: 'Module::Build version 0.4214, CPAN::Meta::Converter version 2.150005' license: artistic_2 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: LaTeX-Decode provides: LaTeX::Decode: file: lib/LaTeX/Decode.pm version: '0.04' LaTeX::Decode::Data: file: lib/LaTeX/Decode/Data.pm requires: File::Slurp: '0' Unicode::Normalize: '0' perl: '5.008' resources: license: http://opensource.org/licenses/artistic-license-2.0.php version: '0.04' x_serialization_backend: 'CPAN::Meta::YAML version 0.016' LaTeX-Decode-0.04/README000444000765000024 224012547031620 13551 0ustar00fc7staff000000000000LaTeX-Decode The module LaTeX::Decode does (obviously) the opposite of LaTeX::Encode: It converts LaTeX input to Unicode :) It also comes with a companion utility script, latex2utf8. INSTALLATION To install this module, run the following commands: perl Build.PL ./Build ./Build test ./Build install DEPENDENCIES Unicode::Normalize (in core perl) SUPPORT AND DOCUMENTATION After installing, you can find documentation for this module with the perldoc command. perldoc LaTeX::Decode You can also look for information at: RT, CPAN's request tracker http://rt.cpan.org/NoAuth/Bugs.html?Dist=LaTeX-Decode AnnoCPAN, Annotated CPAN documentation http://annocpan.org/dist/LaTeX-Decode CPAN Ratings http://cpanratings.perl.org/d/LaTeX-Decode Search CPAN http://search.cpan.org/dist/LaTeX-Decode/ LICENSE AND COPYRIGHT Copyright (C) 2010 François Charette This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. LaTeX-Decode-0.04/bin000755000765000024 012547031620 13306 5ustar00fc7staff000000000000LaTeX-Decode-0.04/bin/latex2utf8000555000765000024 763712547031620 15414 0ustar00fc7staff000000000000#!/usr/bin/perl use strict; use warnings; #no warnings 'utf8'; use Carp; use LaTeX::Decode; use Encode; binmode(STDOUT, ':utf8'); use Getopt::Long qw/:config no_ignore_case/; my $opts = {}; GetOptions( $opts, 'help|h|?', 'version|v', 'inputencoding|i=s', 'filter|f!', 'scheme|s=s', 'normalize|n!', 'normalization|N=s', 'strip_outer_braces|b!' ); our $VERSION = '0.04'; die usage() if exists $opts->{'help'}; die version() if exists $opts->{'version'}; my $text; if ($opts->{filter}) { while () { $text .= $_ } croak "Huh? There is nothing to convert!\n" if (!$text or $text =~ /^\s*$/) } else { my $infile = $ARGV[0] or die usage(); require File::Slurp; $text = read_file($infile) or croak "Cannot read input file '$infile'"; } #Options to pass to latex_decode() my %ld_opts = (); if (exists $opts->{inputencoding}) { my $encoding = $opts->{inputencoding}; $text = decode($encoding, $text); } if (exists $opts->{scheme} ) { $ld_opts{scheme} = $opts->{scheme} } if (exists $opts->{normalize} ) { die "The option 'normalize' has been removed:\n\t use '--normalization 0' to suppress normalization\n" } if (exists $opts->{normalization} ) { if (!$opts->{normalization} or $opts->{normalization} eq 'undef') { $ld_opts{normalize} = 0 } else { $ld_opts{normalization} = $opts->{normalization} } } if (exists $opts->{strip_outer_braces} ) { $ld_opts{strip_outer_braces} = $opts->{strip_outer_braces} } $text = decode_utf8($text); print latex_decode($text, %ld_opts); sub version { my $me = "latex2utf8"; qq[ $me Version: $VERSION \n] } sub usage { qq/ Usage: latex2utf8 infile > outfile Options: --help|-h Show this help message. --version|-v Display version number. --filter|-f Use script as a filter, using standard input instead of an input file --inputencoding|-i [encoding] Encoding used in the input file (or STDIN if using the option --filter) --scheme|-s Decoding scheme to use (possible values are 'base', 'extra', 'full'; default = 'extra') --normalization|-N [form] The normalization form to use (default = 'NFC') (with a value of 0 or undef the output will not be normalized with Unicode::Normalize) --strip_outer_braces|-b Remove curly braces around characters (boolean) (e.g. "saut{\\\'e}" => "sauté") (See "perldoc LaTeX::Decode" for more information on the last three options.) Example: latex2utf8 -i latin1 -s base -N NFD infile.tex > outfile.tex \n/ } =pod =encoding utf8 =head1 NAME C - converts LaTeX encoding to UTF-8 =head1 VERSION Version 0.04 =head1 SYNOPSIS latex2utf8 file.tex > utf8file.tex echo '\textexclamdown\textctj\alpha\textphook\texthvlig!' | latex2utf8 --scheme full --filter =head1 DESCRIPTION Command-line utility to convert a LaTeX-encoded file to UTF-8. See the output of C for usage and options. =head1 AUTHOR François Charette, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 COPYRIGHT & LICENSE Copyright 2009-2015 François Charette, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. 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. =cut # vim: set tabstop=4 shiftwidth=4 expandtab: LaTeX-Decode-0.04/lib000755000765000024 012547031620 13304 5ustar00fc7staff000000000000LaTeX-Decode-0.04/lib/LaTeX000755000765000024 012547031620 14261 5ustar00fc7staff000000000000LaTeX-Decode-0.04/lib/LaTeX/Decode.pm000444000765000024 1350112547031620 16157 0ustar00fc7staff000000000000package LaTeX::Decode; use 5.008; use warnings; use strict; use Carp; =encoding utf-8 =head1 NAME LaTeX::Decode - Decode from LaTeX to Unicode =head1 VERSION Version 0.04 =cut use base qw(Exporter); our $VERSION = '0.04'; our @EXPORT = qw(latex_decode); use LaTeX::Decode::Data; use Unicode::Normalize; =head1 SYNOPSIS use LaTeX::Decode; my $latex_string = 'Mu\\d{h}ammad ibn M\\=us\=a al-Khw\\=arizm\\={\\i}'; my $new_string = latex_decode($latex_string); # => 'Muḥammad ibn Mūsā al-Khwārizmī' =head1 DESCRIPTION =head1 EXPORT =head1 FUNCTIONS =head2 latex_decode($text, %options) Decodes the given text from LaTeX to Unicode. The function accepts a number of options: * normalize => $bool (default 0) whether the output string should be normalized with Unicode::Normalize * normalization => (default 'NFC') and if yes, the normalization form to use (see the Unicode::Normalize documentation) * strip_outer_braces => $bool (default 0) whether the outer curly braces around letters+combining marks should be stripped off. By default "fut{\\'e}" becomes fut{é}, to prevent something like '\\textuppercase{\\'e}' to become '\\textuppercaseé'. Setting this option to TRUE can be useful for instance when converting BibTeX files. =head1 GLOBAL OPTIONS The decoding scheme can be set with $LaTeX::Decode::DefaultScheme = ''; Possible values are 'base', 'extra' and 'full'; default value is 'extra'. TODO : explain these scheme! base => Most common macros and diacritics (sufficient for Western languages and common symbols) extra => Also converts punctuation, larger range of diacritics and macros (e.g. for IPA, Latin Extended Additional, etc.) full => Also converts symbols, Greek letters, dingbats, negated symbols, and superscript characters and symbols ... =cut our $DefaultScheme = 'extra'; sub _get_diac { my $scheme = shift; if ( $scheme eq 'base' ) { return %DIACRITICS; } else { return ( %DIACRITICS, %DIACRITICSEXTRA ); } } sub _get_mac { my $scheme = shift; if ( $scheme eq 'base' ) { return %WORDMACROS; } elsif ( $scheme eq 'full' ) { return ( %WORDMACROS, %WORDMACROSEXTRA, %PUNCTUATION, %SYMBOLS, %GREEK ); } else { return ( %WORDMACROS, %WORDMACROSEXTRA, %PUNCTUATION ); } } sub latex_decode { my $text = shift; my %opts = @_; my $norm = exists $opts{normalize} ? $opts{normalize} : 1; my $norm_form = exists $opts{normalization} ? $opts{normalization} : 'NFC'; my $scheme = exists $opts{scheme} ? $opts{scheme} : $DefaultScheme; croak "invalid scheme name '$scheme'" unless ( $scheme eq 'full' or $scheme eq 'base' or $scheme eq 'extra' ); my $strip_outer_braces = exists $opts{strip_outer_braces} ? $opts{strip_outer_braces} : 0; my %DIAC = _get_diac($scheme); my %WORDMAC = _get_mac($scheme); # a regex with all possible word macros my $WORDMAC_RE = join( '|', sort { length $b <=> length $a } keys %WORDMAC ); $WORDMAC_RE = qr{$WORDMAC_RE}; my $DIAC_RE; if ( $scheme eq 'base' ) { $DIAC_RE = $DIAC_RE_BASE; } else { $DIAC_RE = $DIAC_RE_EXTRA; } if ( $scheme eq 'full' ) { $text =~ s/\\not\\($NEG_SYMB_RE)/$NEGATEDSYMBOLS{$1}/ge; $text =~ s/\\textsuperscript{($SUPER_RE)}/$SUPERSCRIPTS{$1}/ge; $text =~ s/\\textsuperscript{\\($SUPERCMD_RE)}/$CMDSUPERSCRIPTS{$1}/ge; $text =~ s/\\dings{([2-9AF][0-9A-F])}/$DINGS{$1}/ge; } $text =~ s/(\\[a-zA-Z]+)\\(\s+)/$1\{\}$2/g; # \foo\ bar -> \foo{} bar $text =~ s/([^{]\\\w)([;,.:%])/$1\{\}$2/g; #} Aaaa\o, -> Aaaa\o{}, $text =~ s/(\\(?:$DIAC_RE_BASE|$ACCENTS_RE)){\\i}/$1\{i\}/g; # special cases such as '\={\i}' -> '\={i}' -> "i\x{304}" ## remove {} around macros that print one character ## by default we skip that, as it would break constructions like \foo{\i} if ($strip_outer_braces) { $text =~ s/ \{\\($WORDMAC_RE)\} / $WORDMAC{$1} /gxe; } $text =~ s/ \\($WORDMAC_RE)(?: \{\} | \s+ | \b) / $WORDMAC{$1} /gxe; $text =~ s/\\($ACCENTS_RE)\{(\p{L}\p{M}*)\}/$2 . $ACCENTS{$1}/ge; $text =~ s/\\($ACCENTS_RE)(\p{L}\p{M}*)/$2 . $ACCENTS{$1}/ge; $text =~ s/\\($DIAC_RE)\s*\{(\p{L}\p{M}*)\}/$2 . $DIAC{$1}/ge; $text =~ s/\\($DIAC_RE)\s+(\p{L}\p{M}*)/$2 . $DIAC{$1}/ge; $text =~ s/\\($ACCENTS_RE)\{(\p{L}\p{M}*)\}/$2 . $ACCENTS{$1}/ge; $text =~ s/\\($ACCENTS_RE)(\p{L}\p{M}*)/$2 . $ACCENTS{$1}/ge; $text =~ s/\\($DIAC_RE)\s*\{(\p{L}\p{M}*)\}/$2 . $DIAC{$1}/ge; $text =~ s/\\($DIAC_RE)\s+(\p{L}\p{M}*)/$2 . $DIAC{$1}/ge; ## remove {} around letter+combining mark(s) ## by default we skip that, as it would destroy constructions like \foo{\`e} if ($strip_outer_braces) { $text =~ s/{(\PM\pM+)}/$1/g; } if ($norm) { return Unicode::Normalize::normalize( $norm_form, $text ); } else { return $text; } } =head1 AUTHOR François Charette, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 COPYRIGHT & LICENSE Copyright 2009-2015 François Charette, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. 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. =cut 1; # vim: set tabstop=4 shiftwidth=4 expandtab: LaTeX-Decode-0.04/lib/LaTeX/Decode000755000765000024 012547031620 15444 5ustar00fc7staff000000000000LaTeX-Decode-0.04/lib/LaTeX/Decode/Data.pm000444000765000024 7536112547031620 17044 0ustar00fc7staff000000000000package LaTeX::Decode::Data; use strict; use warnings; use base qw(Exporter); =encoding utf8 =head1 NAME LaTeX::Decode::Data - Data to decode from LaTeX to Unicode =head1 VERSION Version 0.04 =cut our @EXPORT = qw[ %ACCENTS %WORDMACROS %DIACRITICS %WORDMACROSEXTRA %DIACRITICSEXTRA %PUNCTUATION %NEGATEDSYMBOLS %SUPERSCRIPTS %SYMBOLS %CMDSUPERSCRIPTS %DINGS %GREEK $ACCENTS_RE $DIAC_RE_BASE $DIAC_RE_EXTRA $NEG_SYMB_RE $SUPER_RE $SUPERCMD_RE ]; #our @EXPORT_OK = qw[ # %WORDMACROSEXTRA %DIACRITICSEXTRA %PUNCTUATION %NEGATEDSYMBOLS %SUPERSCRIPTS %SYMBOLS %CMDSUPERSCRIPTS %DINGS %GREEK #]; # #our %EXPORT_TAGS = ( # all => [ @EXPORT, @EXPORT_OK ], # full => [ @EXPORT, @EXPORT_OK ], # extra => [ @EXPORT, qw( %WORDMACROSEXTRA %DIACRITICSEXTRA ) ], # letters => [ @EXPORT, qw( %WORDMACROSEXTRA %DIACRITICSEXTRA %SUPERSCRIPTS %GREEK ) ], # symbols => [ @EXPORT, qw( %DINGS %SYMBOLS %NEGATEDSYMBOLS %PUNCTUATION %SUPERSCRIPTS %CMDSUPERSCRIPTS %GREEK )] #); our %ACCENTS = ( chr(0x60) => "\x{300}", #` chr(0x27) => "\x{301}", #' chr(0x5e) => "\x{302}", #^ chr(0x7e) => "\x{303}", #~ chr(0x3d) => "\x{304}", #= chr(0x2e) => "\x{307}", #. chr(0x22) => "\x{308}", #" ); our %WORDMACROS = ( textquotedbl => "\x{0022}", texthash => "\x{0023}", textdollar => "\x{0024}", textpercent => "\x{0025}", textampersand => "\x{0026}", textquotesingle => "\x{0027}", textasteriskcentered => "\x{002A}", textless => "\x{003C}", textequals => "\x{003D}", textgreater => "\x{003E}", textbackslash => "\x{005C}", textasciicircum => "\x{005E}", textunderscore => "\x{005F}", textasciigrave => "\x{0060}", textg => "\x{0067}", textbraceleft => "\x{007B}", textbar => "\x{007C}", textbraceright => "\x{007D}", textasciitilde => "\x{007E}", nobreakspace => "\x{00A0}", textexclamdown => "\x{00A1}", textcent => "\x{00A2}", pounds => "\x{00A3}", textsterling => "\x{00A3}", textcurrency => "\x{00A4}", textyen => "\x{00A5}", textbrokenbar => "\x{00A6}", S => "\x{00A7}", textsection => "\x{00A7}", textasciidieresis => "\x{00A8}", copyright => "\x{00A9}", textcopyright => "\x{00A9}", textordfeminine => "\x{00AA}", guillemotleft => "\x{00AB}", lnot => "\x{00AC}", textlogicalnot => "\x{00AC}", textminus => "\x{2212}", textregistered => "\x{00AE}", textasciimacron => "\x{00AF}", textdegree => "\x{00B0}", pm => "\x{00B1}", textpm => "\x{00B1}", texttwosuperior => "\x{00B2}", textthreesuperior => "\x{00B3}", textasciiacute => "\x{00B4}", mu => "\x{00B5}", textmu => "\x{00B5}", P => "\x{00B6}", textparagraph => "\x{00B6}", textperiodcentered => "\x{00B7}", textcentereddot => "\x{00B7}", textasciicedilla => "\x{00B8}", textonesuperior => "\x{00B9}", textordmasculine => "\x{00BA}", guillemotright => "\x{00BB}", textonequarter => "\x{00BC}", textonehalf => "\x{00BD}", textthreequarters => "\x{00BE}", textquestiondown => "\x{00BF}", AA => "\x{00C5}", AE => "\x{00C6}", DH => "\x{00D0}", times => "\x{00D7}", texttimes => "\x{00D7}", O => "\x{00D8}", TH => "\x{00DE}", Thorn => "\x{00DE}", ss => "\x{00DF}", aa => "\x{00E5}", ae => "\x{00E6}", dh => "\x{00F0}", div => "\x{00F7}", textdiv => "\x{00F7}", o => "\x{00F8}", th => "\x{00FE}", textthorn => "\x{00FE}", textthornvari => "\x{00FE}", textthornvarii => "\x{00FE}", textthornvariii => "\x{00FE}", textthornvariv => "\x{00FE}", DJ => "\x{0110}", dj => "\x{0111}", textcrd => "\x{0111}", textHbar => "\x{0126}", textcrh => "\x{0127}", texthbar => "\x{0127}", i => "\x{0131}", IJ => "\x{0132}", ij => "\x{0133}", textkra => "\x{0138}", L => "\x{0141}", l => "\x{0142}", textbarl => "\x{0142}", NG => "\x{014A}", ng => "\x{014B}", OE => "\x{0152}", oe => "\x{0153}" ); our %WORDMACROSEXTRA = ( textTbar => "\x{0166}", textTstroke => "\x{0166}", texttbar => "\x{0167}", texttstroke => "\x{0167}", textcrb => "\x{0180}", textBhook => "\x{0181}", textOopen => "\x{0186}", textChook => "\x{0187}", textchook => "\x{0188}", texthtc => "\x{0188}", textDafrican => "\x{0189}", textDhook => "\x{018A}", textEreversed => "\x{018E}", textEopen => "\x{0190}", textFhook => "\x{0191}", textflorin => "\x{0192}", textGammaafrican => "\x{0194}", texthvlig => "\x{0195}", hv => "\x{0195}", textIotaafrican => "\x{0196}", textKhook => "\x{0198}", textkhook => "\x{0199}", texthtk => "\x{0199}", textcrlambda => "\x{019B}", textNhookleft => "\x{019D}", OHORN => "\x{01A0}", ohorn => "\x{01A1}", textPhook => "\x{01A4}", textphook => "\x{01A5}", texthtp => "\x{01A5}", textEsh => "\x{01A9}", ESH => "\x{01A9}", textlooptoprevesh => "\x{01AA}", textpalhookbelow => "\x{01AB}", textThook => "\x{01AC}", textthook => "\x{01AD}", texthtt => "\x{01AD}", textTretroflexhook => "\x{01AE}", UHORN => "\x{01AF}", uhorn => "\x{01B0}", textVhook => "\x{01B2}", textYhook => "\x{01B3}", textyhook => "\x{01B4}", textEzh => "\x{01B7}", texteturned => "\x{01DD}", textturna => "\x{0250}", textscripta => "\x{0251}", textturnscripta => "\x{0252}", textbhook => "\x{0253}", texthtb => "\x{0253}", textoopen => "\x{0254}", textopeno => "\x{0254}", textctc => "\x{0255}", textdtail => "\x{0256}", textrtaild => "\x{0256}", textdhook => "\x{0257}", texthtd => "\x{0257}", textreve => "\x{0258}", textschwa => "\x{0259}", textrhookschwa => "\x{025A}", texteopen => "\x{025B}", textepsilon => "\x{025B}", textrevepsilon => "\x{025C}", textrhookrevepsilon => "\x{025D}", textcloserevepsilon => "\x{025E}", textbardotlessj => "\x{025F}", texthtg => "\x{0260}", textscriptg => "\x{0261}", textscg => "\x{0262}", textgammalatinsmall => "\x{0263}", textgamma => "\x{0263}", textramshorns => "\x{0264}", textturnh => "\x{0265}", texthth => "\x{0266}", texththeng => "\x{0267}", textbari => "\x{0268}", textiotalatin => "\x{0269}", textiota => "\x{0269}", textsci => "\x{026A}", textltilde => "\x{026B}", textbeltl => "\x{026C}", textrtaill => "\x{026D}", textlyoghlig => "\x{026E}", textturnm => "\x{026F}", textturnmrleg => "\x{0270}", textltailm => "\x{0271}", textltailn => "\x{0272}", textnhookleft => "\x{0272}", textrtailn => "\x{0273}", textscn => "\x{0274}", textbaro => "\x{0275}", textscoelig => "\x{0276}", textcloseomega => "\x{0277}", textphi => "\x{0278}", textturnr => "\x{0279}", textturnlonglegr => "\x{027A}", textturnrrtail => "\x{027B}", textlonglegr => "\x{027C}", textrtailr => "\x{027D}", textfishhookr => "\x{027E}", textlhti => "\x{027F}", # ?? textscr => "\x{0280}", textinvscr => "\x{0281}", textrtails => "\x{0282}", textesh => "\x{0283}", texthtbardotlessj => "\x{0284}", textraisevibyi => "\x{0285}", # ?? textctesh => "\x{0286}", textturnt => "\x{0287}", textrtailt => "\x{0288}", texttretroflexhook => "\x{0288}", textbaru => "\x{0289}", textupsilon => "\x{028A}", textscriptv => "\x{028B}", textvhook => "\x{028B}", textturnv => "\x{028C}", textturnw => "\x{028D}", textturny => "\x{028E}", textscy => "\x{028F}", textrtailz => "\x{0290}", textctz => "\x{0291}", textezh => "\x{0292}", textyogh => "\x{0292}", textctyogh => "\x{0293}", textglotstop => "\x{0294}", textrevglotstop => "\x{0295}", textinvglotstop => "\x{0296}", textstretchc => "\x{0297}", textbullseye => "\x{0298}", textscb => "\x{0299}", textcloseepsilon => "\x{029A}", texthtscg => "\x{029B}", textsch => "\x{029C}", textctj => "\x{029D}", textturnk => "\x{029E}", textscl => "\x{029F}", texthtq => "\x{02A0}", textbarglotstop => "\x{02A1}", textbarrevglotstop => "\x{02A2}", textdzlig => "\x{02A3}", textdyoghlig => "\x{02A4}", textdctzlig => "\x{02A5}", texttslig => "\x{02A6}", textteshlig => "\x{02A7}", texttesh => "\x{02A7}", texttctclig => "\x{02A8}", hamza => "\x{02BE}", ain => "\x{02BF}", ayn => "\x{02BF}", textprimstress => "\x{02C8}", textlengthmark => "\x{02D0}" ); our %DIACRITICS = ( r => "\x{030A}", H => "\x{030B}", u => "\x{0306}", v => "\x{030C}", G => "\x{030F}", M => "\x{0322}", d => "\x{0323}", c => "\x{0327}", k => "\x{0328}", b => "\x{0331}", B => "\x{0335}", t => "\x{0311}", ); our %DIACRITICSEXTRA = ( capitalring => "\x{030A}", capitalhungarumlaut => "\x{030B}", capitalcaron => "\x{030C}", # ?? textvbaraccent => "\x{030D}", textdoublevbaraccent => "\x{030E}", textdoublegrave => "\x{030F}", textdotbreve => "\x{0310}", textroundcap => "\x{0311}", newtie => "\x{0311}", capitalnewtie => "\x{0311}", textturncommaabove => "\x{0312}", textcommaabove => "\x{0313}", textrevcommaabove => "\x{0314}", textcommaabover => "\x{0315}", textsubgrave => "\x{0316}", textsubacute => "\x{0317}", textadvancing => "\x{0318}", textretracting => "\x{0319}", textlangleabove => "\x{031A}", textrighthorn => "\x{031B}", textsublhalfring => "\x{031C}", textraising => "\x{031D}", textlowering => "\x{031E}", textsubplus => "\x{031F}", textsubbar => "\x{0320}", textsubminus => "\x{0320}", textpalhookbelow => "\x{0321}", textrethookbelow => "\x{0322}", textsubdot => "\x{0323}", textsubumlaut => "\x{0324}", textsubring => "\x{0325}", textcommabelow => "\x{0326}", capitalcedilla => "\x{0327}", textpolhook => "\x{0328}", capitalogonek => "\x{0328}", textsyllabic => "\x{0329}", textsubbridge => "\x{032A}", textsubw => "\x{032B}", textsubwedge => "\x{032C}", textsubcircnum => "\x{032D}", textsubbreve => "\x{032E}", textundertie => "\x{032E}", textsubarch => "\x{032F}", textsubtilde => "\x{0330}", textsubbar => "\x{0331}", subdoublebar => "\x{0333}", textsuperimposetilde => "\x{0334}", textsstrokethru => "\x{0335}", textlstrokethru => "\x{0336}", textsstrikethru => "\x{0337}", textlstrikethru => "\x{0338}", textsubrhalfring => "\x{0339}", textinvsubbridge => "\x{033A}", textsubsquare => "\x{033B}", textseagull => "\x{033C}", textovercross => "\x{033D}", overbridge => "\x{0346}", subdoublebar => "\x{0347}", ## ?? subdoublevert => "\x{0348}", subcorner => "\x{0349}", crtilde => "\x{034A}", textoverw => "\x{034A}", dottedtilde => "\x{034B}", doubletilde => "\x{034C}", spreadlips => "\x{034D}", whistle => "\x{034E}", textrightarrowhead => "\x{0350}", textlefthalfring => "\x{0351}", sublptr => "\x{0354}", subrptr => "\x{0355}", textrightuparrowhead => "\x{0356}", textrighthalfring => "\x{0357}", textdoublebreve => "\x{035D}", textdoublemacron => "\x{035E}", textdoublemacronbelow => "\x{035F}", textdoubletilde => "\x{0360}", texttoptiebar => "\x{0361}", sliding => "\x{0362}" ); # "\\prime" => "\x{2032}", # "\\prime\\prime" => "\x{2033}", # "\\prime\\prime\\prime" => "\x{2034}", our %PUNCTUATION = ( textendash => "\x{2013}", textemdash => "\x{2014}", textquoteleft => "\x{2018}", textquoteright => "\x{2019}", quotesinglbase => "\x{201A}", textquotedblleft => "\x{201C}", textquotedblright => "\x{201D}", quotedblbase => "\x{201E}", dag => "\x{2020}", ddag => "\x{2021}", textbullet => "\x{2022}", dots => "\x{2026}", textperthousand => "\x{2030}", textpertenthousand => "\x{2031}", guilsinglleft => "\x{2039}", guilsinglright => "\x{203A}", textreferencemark => "\x{203B}", textinterrobang => "\x{203D}", textoverline => "\x{203E}", langle => "\x{27E8}", rangle => "\x{27E9}" ); # \not\xxx our %NEGATEDSYMBOLS = ( asymp => "\x{226D}", lesssim => "\x{2274}", gtrsim => "\x{2275}", subset => "\x{2284}", supset => "\x{2285}", ni => "\x{220C}", simeq => "\x{2244}", approx => "\x{2249}", equiv => "\x{2262}", preccurlyeq => "\x{22E0}", succcurlyeq => "\x{22E1}", sqsubseteq => "\x{22E2}", sqsupseteq => "\x{22E3}", ); # \textsuperscript{x} our %SUPERSCRIPTS = ( 0 => "\x{2070}", i => "\x{2071}", 4 => "\x{2074}", 5 => "\x{2075}", 6 => "\x{2076}", 7 => "\x{2077}", 8 => "\x{2078}", 9 => "\x{2079}", '+' => "\x{207A}", '-' => "\x{207B}", '=' => "\x{207C}", '(' => "\x{207D}", ')' => "\x{207E}", n => "\x{207F}", SM => "\x{2120}", h => "\x{02b0}", j => "\x{02b2}", r => "\x{02b3}", w => "\x{02b7}", y => "\x{02b8}" ); # \textsuperscript{\xxx} our %CMDSUPERSCRIPTS = ( texthth => "\x{02b1}", textturnr => "\x{02b4}", textturnrrtail => "\x{02b5}", textinvscr => "\x{02b6}" ); our %SYMBOLS = ( textcolonmonetary => "\x{20A1}", textlira => "\x{20A4}", textnaira => "\x{20A6}", textwon => "\x{20A9}", textdong => "\x{20AB}", euro => "\x{20AC}", texteuro => "\x{20AC}", textnumero => "\x{2116}", texttrademark => "\x{2122}", leftarrow => "\x{2190}", uparrow => "\x{2191}", rightarrow => "\x{2192}", downarrow => "\x{2193}", leftrightarrow => "\x{2194}", updownarrow => "\x{2195}", leadsto => "\x{219D}", rightleftharpoons => "\x{21CC}", Rightarrow => "\x{21D2}", Leftrightarrow => "\x{21D4}", forall => "\x{2200}", complement => "\x{2201}", partial => "\x{2202}", exists => "\x{2203}", nexists => "\x{2204}", set => "\x{2205}", Delta => "\x{2206}", nabla => "\x{2207}", in => "\x{2208}", notin => "\x{2209}", ni => "\x{220B}", prod => "\x{220F}", coprod => "\x{2210}", sum => "\x{2211}", mp => "\x{2213}", dotplus => "\x{2214}", setminus => "\x{2216}", ast => "\x{2217}", circ => "\x{2218}", bullet => "\x{2219}", surd => "\x{221A}", propto => "\x{221D}", infty => "\x{221E}", angle => "\x{2220}", measuredangle => "\x{2221}", sphericalangle => "\x{2222}", mid => "\x{2223}", nmid => "\x{2224}", parallel => "\x{2225}", nparallel => "\x{2226}", wedge => "\x{2227}", vee => "\x{2228}", cap => "\x{2229}", cup => "\x{222A}", int => "\x{222B}", iint => "\x{222C}", iiint => "\x{222D}", oint => "\x{222E}", therefore => "\x{2234}", because => "\x{2235}", sim => "\x{223C}", backsim => "\x{223D}", wr => "\x{2240}", nsim => "\x{2241}", simeq => "\x{2243}", cong => "\x{2245}", ncong => "\x{2247}", approx => "\x{2248}", approxeq => "\x{224A}", asymp => "\x{224D}", Bumpeq => "\x{224E}", bumpeq => "\x{224F}", doteq => "\x{2250}", doteqdot => "\x{2251}", fallingdotseq => "\x{2252}", risingdotseq => "\x{2253}", eqcirc => "\x{2256}", circeq => "\x{2257}", triangleq => "\x{225C}", neq => "\x{2260}", equiv => "\x{2261}", leq => "\x{2264}", geq => "\x{2265}", leqq => "\x{2266}", geqq => "\x{2267}", lneqq => "\x{2268}", gneqq => "\x{2269}", ll => "\x{226A}", gg => "\x{226B}", between => "\x{226C}", nless => "\x{226E}", ngtr => "\x{226F}", nleq => "\x{2270}", ngeq => "\x{2271}", lesssim => "\x{2272}", gtrsim => "\x{2273}", lessgtr => "\x{2276}", gtrless => "\x{2277}", prec => "\x{227A}", succ => "\x{227B}", preccurlyeq => "\x{227C}", succcurlyeq => "\x{227D}", precsim => "\x{227E}", succsim => "\x{227F}", nprec => "\x{2280}", nsucc => "\x{2281}", subset => "\x{2282}", supset => "\x{2283}", subseteq => "\x{2286}", supseteq => "\x{2287}", nsubseteq => "\x{2288}", nsupseteq => "\x{2289}", subsetneq => "\x{228A}", supsetneq => "\x{228B}", uplus => "\x{228E}", sqsubset => "\x{228F}", sqsupset => "\x{2290}", sqsubseteq => "\x{2291}", sqsupseteq => "\x{2292}", sqcap => "\x{2293}", sqcup => "\x{2294}", oplus => "\x{2295}", ominus => "\x{2296}", otimes => "\x{2297}", oslash => "\x{2298}", odot => "\x{2299}", circledcirc => "\x{229A}", circledast => "\x{229B}", circleddash => "\x{229D}", boxplus => "\x{229E}", boxminus => "\x{229F}", boxtimes => "\x{22A0}", boxdot => "\x{22A1}", vdash => "\x{22A2}", dashv => "\x{22A3}", top => "\x{22A4}", bot => "\x{22A5}", Vdash => "\x{22A9}", Vvdash => "\x{22AA}", nVdash => "\x{22AE}", lhd => "\x{22B2}", rhd => "\x{22B3}", unlhd => "\x{22B4}", unrhd => "\x{22B5}", multimap => "\x{22B8}", intercal => "\x{22BA}", veebar => "\x{22BB}", barwedge => "\x{22BC}", bigwedge => "\x{22C0}", bigvee => "\x{22C1}", bigcap => "\x{22C2}", bigcup => "\x{22C3}", diamond => "\x{22C4}", cdot => "\x{22C5}", star => "\x{22C6}", divideontimes => "\x{22C7}", bowtie => "\x{22C8}", ltimes => "\x{22C9}", rtimes => "\x{22CA}", leftthreetimes => "\x{22CB}", rightthreetimes => "\x{22CC}", backsimeq => "\x{22CD}", curlyvee => "\x{22CE}", curlywedge => "\x{22CF}", Subset => "\x{22D0}", Supset => "\x{22D1}", Cap => "\x{22D2}", Cup => "\x{22D3}", pitchfork => "\x{22D4}", lessdot => "\x{22D6}", gtrdot => "\x{22D7}", lll => "\x{22D8}", ggg => "\x{22D9}", lesseqgtr => "\x{22DA}", gtreqless => "\x{22DB}", curlyeqprec => "\x{22DE}", curlyeqsucc => "\x{22DF}", lnsim => "\x{22E6}", gnsim => "\x{22E7}", precnsim => "\x{22E8}", succnsim => "\x{22E9}", ntriangleleft => "\x{22EA}", ntriangleright => "\x{22EB}", ntrianglelefteq => "\x{22EC}", ntrianglerighteq => "\x{22ED}", vdots => "\x{22EE}", cdots => "\x{22EF}", ddots => "\x{22F1}", lceil => "\x{2308}", rceil => "\x{2309}", lfloor => "\x{230A}", rfloor => "\x{230B}", Box => "\x{25A1}", spadesuit => "\x{2660}", heartsuit => "\x{2661}", diamondsuit => "\x{2662}", clubsuit => "\x{2663}", flat => "\x{266D}", natural => "\x{266E}", sharp => "\x{266F}", tone5 => "\x{02E5}", tone4 => "\x{02E6}", tone3 => "\x{02E7}", tone2 => "\x{02E8}", tone1 => "\x{02E9}" ); our %DINGS = ( '21' => "\x{2701}", '22' => "\x{2702}", '23' => "\x{2703}", '24' => "\x{2704}", '25' => "\x{260E}", '26' => "\x{2706}", '27' => "\x{2707}", '28' => "\x{2708}", '29' => "\x{2709}", '2A' => "\x{261B}", '2B' => "\x{261E}", '2C' => "\x{270C}", '2D' => "\x{270D}", '2E' => "\x{270E}", '2F' => "\x{270F}", '30' => "\x{2710}", '31' => "\x{2711}", '32' => "\x{2712}", '33' => "\x{2713}", '34' => "\x{2714}", '35' => "\x{2715}", '36' => "\x{2716}", '37' => "\x{2717}", '38' => "\x{2718}", '39' => "\x{2719}", '3A' => "\x{271A}", '3B' => "\x{271B}", '3C' => "\x{271C}", '3D' => "\x{271D}", '3E' => "\x{271E}", '3F' => "\x{271F}", '40' => "\x{2720}", '41' => "\x{2721}", '42' => "\x{2722}", '43' => "\x{2723}", '44' => "\x{2724}", '45' => "\x{2725}", '46' => "\x{2726}", '47' => "\x{2727}", '48' => "\x{2605}", '49' => "\x{2729}", '4A' => "\x{272A}", '4B' => "\x{272B}", '4C' => "\x{272C}", '4D' => "\x{272D}", '4E' => "\x{272E}", '4F' => "\x{272F}", '50' => "\x{2730}", '51' => "\x{2731}", '52' => "\x{2732}", '53' => "\x{2733}", '54' => "\x{2734}", '55' => "\x{2735}", '56' => "\x{2736}", '57' => "\x{2737}", '58' => "\x{2738}", '59' => "\x{2739}", '5A' => "\x{273A}", '5B' => "\x{273B}", '5C' => "\x{273C}", '5D' => "\x{273D}", '5E' => "\x{273E}", '5F' => "\x{273F}", '60' => "\x{2740}", '61' => "\x{2741}", '62' => "\x{2742}", '63' => "\x{2743}", '64' => "\x{2744}", '65' => "\x{2745}", '66' => "\x{2746}", '67' => "\x{2747}", '68' => "\x{2748}", '69' => "\x{2749}", '6A' => "\x{274A}", '6B' => "\x{274B}", '6C' => "\x{25CF}", '6D' => "\x{274D}", '6E' => "\x{25A0}", '6F' => "\x{274F}", '70' => "\x{2750}", '71' => "\x{2751}", '72' => "\x{2752}", '73' => "\x{25B2}", '74' => "\x{25BC}", '75' => "\x{25C6}", '76' => "\x{2756}", '77' => "\x{25D7}", '78' => "\x{2758}", '79' => "\x{2759}", '7A' => "\x{275A}", '7B' => "\x{275B}", '7C' => "\x{275C}", '7D' => "\x{275D}", '7E' => "\x{275E}", 'A1' => "\x{2761}", 'A2' => "\x{2762}", 'A3' => "\x{2763}", 'A4' => "\x{2764}", 'A5' => "\x{2765}", 'A6' => "\x{2766}", 'A7' => "\x{2767}", 'A9' => "\x{2666}", 'AA' => "\x{2665}", 'AC' => "\x{2460}", 'AD' => "\x{2461}", 'AE' => "\x{2462}", 'AF' => "\x{2463}", 'B0' => "\x{2464}", 'B1' => "\x{2465}", 'B2' => "\x{2466}", 'B3' => "\x{2467}", 'B4' => "\x{2468}", 'B5' => "\x{2469}", 'B6' => "\x{2776}", 'B7' => "\x{2777}", 'B8' => "\x{2778}", 'B9' => "\x{2779}", 'BA' => "\x{277A}", 'BB' => "\x{277B}", 'BC' => "\x{277C}", 'BD' => "\x{277D}", 'BE' => "\x{277E}", 'BF' => "\x{277F}", 'C0' => "\x{2780}", 'C1' => "\x{2781}", 'C2' => "\x{2782}", 'C3' => "\x{2783}", 'C4' => "\x{2784}", 'C5' => "\x{2785}", 'C6' => "\x{2786}", 'C7' => "\x{2787}", 'C8' => "\x{2788}", 'C9' => "\x{2789}", 'CA' => "\x{278A}", 'CB' => "\x{278B}", 'CC' => "\x{278C}", 'CD' => "\x{278D}", 'CE' => "\x{278E}", 'CF' => "\x{278F}", 'D0' => "\x{2790}", 'D1' => "\x{2791}", 'D2' => "\x{2792}", 'D3' => "\x{2793}", 'D4' => "\x{2794}", 'D6' => "\x{2194}", 'D7' => "\x{2195}", 'D8' => "\x{2798}", 'D9' => "\x{2799}", 'DA' => "\x{279A}", 'DB' => "\x{279B}", 'DC' => "\x{279C}", 'DD' => "\x{279D}", 'DE' => "\x{279E}", 'DF' => "\x{279F}", 'E0' => "\x{27A0}", 'E1' => "\x{27A1}", 'E2' => "\x{27A2}", 'E3' => "\x{27A3}", 'E4' => "\x{27A4}", 'E5' => "\x{27A5}", 'E6' => "\x{27A6}", 'E7' => "\x{27A7}", 'E8' => "\x{27A8}", 'E9' => "\x{27A9}", 'EA' => "\x{27AA}", 'EB' => "\x{27AB}", 'EC' => "\x{27AC}", 'ED' => "\x{27AD}", 'EE' => "\x{27AE}", 'EF' => "\x{27AF}", 'F1' => "\x{27B1}", 'F2' => "\x{27B2}", 'F3' => "\x{27B3}", 'F4' => "\x{27B4}", 'F5' => "\x{27B5}", 'F6' => "\x{27B6}", 'F7' => "\x{27B7}", 'F8' => "\x{27B8}", 'F9' => "\x{27B9}", 'FA' => "\x{27BA}", 'FB' => "\x{27BB}", 'FC' => "\x{27BC}", 'FD' => "\x{27BD}", 'FE' => "\x{27BE}" ); our %GREEK = ( alpha => "\x{3b1}", beta => "\x{3b2}", gamma => "\x{3b3}", delta => "\x{3b4}", varepsilon => "\x{3b5}", zeta => "\x{3b6}", eta => "\x{3b7}", vartheta => "\x{3b8}", iota => "\x{3b9}", kappa => "\x{3ba}", lambda => "\x{3bb}", mu => "\x{3bc}", nu => "\x{3bd}", xi => "\x{3be}", omicron => "\x{3bf}", pi => "\x{3c0}", varrho => "\x{3c1}", varsigma => "\x{3c2}", sigma => "\x{3c3}", tau => "\x{3c4}", upsilon => "\x{3c5}", varphi => "\x{3c6}", chi => "\x{3c7}", psi => "\x{3c8}", omega => "\x{3c9}", Alpha => "\x{391}", Beta => "\x{392}", Gamma => "\x{393}", Delta => "\x{394}", Epsilon => "\x{395}", Zeta => "\x{396}", Eta => "\x{397}", Theta => "\x{398}", Iota => "\x{399}", Kappa => "\x{39a}", Lambda => "\x{39b}", Mu => "\x{39c}", Nu => "\x{39d}", Xi => "\x{39e}", Omicron => "\x{39f}", Pi => "\x{3a0}", Rho => "\x{3a1}", Sigma => "\x{3a3}", Tau => "\x{3a4}", Upsilon => "\x{3a5}", Phi => "\x{3a6}", Chi => "\x{3a7}", Psi => "\x{3a8}", Omega => "\x{3a9}" ); our $ACCENTS_RE = qr{[\^\.`'"~=]}; our $DIAC_RE_BASE = join('|', keys %DIACRITICS); $DIAC_RE_BASE = qr{$DIAC_RE_BASE}; our $DIAC_RE_EXTRA = join('|', sort {length $b <=> length $a} keys %DIACRITICSEXTRA); $DIAC_RE_EXTRA = qr{$DIAC_RE_EXTRA|$DIAC_RE_BASE}; our $NEG_SYMB_RE = join('|', sort keys %NEGATEDSYMBOLS); $NEG_SYMB_RE = qr{$NEG_SYMB_RE}; our $SUPER_RE; my @_ss = keys %SUPERSCRIPTS; $SUPER_RE = join('|', map { /[\+\-\)\(]/ ? '\\' . $_ : $_ } @_ss); $SUPER_RE = qr{$SUPER_RE}; our $SUPERCMD_RE = join('|', keys %CMDSUPERSCRIPTS); $SUPERCMD_RE = qr{$SUPERCMD_RE}; =head1 AUTHOR François Charette, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 COPYRIGHT & LICENSE Copyright 2009-2015 François Charette, all rights reserved. This module is free software. You can redistribute it and/or modify it under the terms of the Artistic License 2.0. 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. =cut 1; # vim: set tabstop=4 shiftwidth=4 expandtab: LaTeX-Decode-0.04/t000755000765000024 012547031620 13001 5ustar00fc7staff000000000000LaTeX-Decode-0.04/t/00-load.t000444000765000024 25612547031620 14442 0ustar00fc7staff000000000000#!perl -T use Test::More tests => 1; BEGIN { use_ok( 'LaTeX::Decode' ) || print "Bail out! "; } diag( "Testing LaTeX::Decode $LaTeX::Decode::VERSION, Perl $], $^X" ); LaTeX-Decode-0.04/t/decode.t000444000765000024 104712547031620 14550 0ustar00fc7staff000000000000use strict; use warnings; use utf8; use Test::More tests => 3; use LaTeX::Decode; my $strA = "\\S{}\\L \\^e\\={\\i}\\u j\\`{i}\\H u\\o\\c{S}{\\u {v}}{\\~{\\i}}"; my $resA1 = '§Łêīj̆ìűøŞ{v̆}{ĩ}'; my $resA2 = '§Łêīj̆ìűøŞv̆ĩ'; is( latex_decode($strA), $resA1, 'decode 1'); is( latex_decode($strA, strip_outer_braces => 1), $resA2, 'decode 2: strip_outer_braces'); my $strB = "\\'{\\^a}\\~{\\^a}\\~{\\u{a}}\\u{\\d{a}}\\~{\\^e}"; my $resB = "ấẫẵặễ"; is( latex_decode($strB), $resB, 'decode 2: stacked diacritics'); LaTeX-Decode-0.04/t/pod-coverage.t000444000765000024 104712547031620 15700 0ustar00fc7staff000000000000use strict; use warnings; use Test::More; # Ensure a recent version of Test::Pod::Coverage my $min_tpc = 1.08; eval "use Test::Pod::Coverage $min_tpc"; plan skip_all => "Test::Pod::Coverage $min_tpc required for testing POD coverage" if $@; # Test::Pod::Coverage doesn't require a minimum Pod::Coverage version, # but older versions don't recognize some common documentation styles my $min_pc = 0.18; eval "use Pod::Coverage $min_pc"; plan skip_all => "Pod::Coverage $min_pc required for testing POD coverage" if $@; all_pod_coverage_ok(); LaTeX-Decode-0.04/t/pod.t000444000765000024 35012547031620 14063 0ustar00fc7staff000000000000#!perl -T use strict; use warnings; use Test::More; # Ensure a recent version of Test::Pod my $min_tp = 1.22; eval "use Test::Pod $min_tp"; plan skip_all => "Test::Pod $min_tp required for testing POD" if $@; all_pod_files_ok();