summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-08-19 00:23:08 +0000
committerKarl Berry <karl@freefriends.org>2009-08-19 00:23:08 +0000
commitc30a905bf6955c8d144b5a94cc812f0c1400a1b1 (patch)
tree31fbf1d7d91c18fdf8749b171b8408456284c14b /Master
parent458f0d6cd95ba5d318c787ed7baf5c39b64f4206 (diff)
new package/script findhyph
git-svn-id: svn://tug.org/texlive/trunk@14758 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
l---------Master/bin/alpha-linux/findhyph1
l---------Master/bin/i386-cygwin/findhyph1
l---------Master/bin/i386-freebsd/findhyph1
l---------Master/bin/i386-linux/findhyph1
l---------Master/bin/i386-solaris/findhyph1
l---------Master/bin/mips-irix/findhyph1
l---------Master/bin/powerpc-aix/findhyph1
l---------Master/bin/powerpc-linux/findhyph1
l---------Master/bin/sparc-linux/findhyph1
l---------Master/bin/sparc-solaris/findhyph1
l---------Master/bin/universal-darwin/findhyph1
-rwxr-xr-xMaster/bin/win32/findhyph.exebin0 -> 4096 bytes
l---------Master/bin/x86_64-linux/findhyph1
-rw-r--r--Master/texmf-dist/doc/support/findhyph/Makefile10
-rw-r--r--Master/texmf-dist/doc/support/findhyph/README9
-rwxr-xr-xMaster/texmf-dist/doc/support/findhyph/findhyph.bat327
-rw-r--r--Master/texmf-dist/doc/support/findhyph/findhyph.txt80
-rwxr-xr-xMaster/texmf-dist/scripts/findhyph/findhyph311
-rw-r--r--Master/texmf/doc/man/man1/findhyph.1221
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds7
-rw-r--r--Master/tlpkg/tlpsrc/collection-binextra.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/fig4latex.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/findhyph.tlpsrc2
24 files changed, 982 insertions, 1 deletions
diff --git a/Master/bin/alpha-linux/findhyph b/Master/bin/alpha-linux/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/alpha-linux/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/i386-cygwin/findhyph b/Master/bin/i386-cygwin/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/i386-cygwin/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/i386-freebsd/findhyph b/Master/bin/i386-freebsd/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/i386-freebsd/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/i386-linux/findhyph b/Master/bin/i386-linux/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/i386-linux/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/i386-solaris/findhyph b/Master/bin/i386-solaris/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/i386-solaris/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/mips-irix/findhyph b/Master/bin/mips-irix/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/mips-irix/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/powerpc-aix/findhyph b/Master/bin/powerpc-aix/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/powerpc-aix/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/powerpc-linux/findhyph b/Master/bin/powerpc-linux/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/powerpc-linux/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/sparc-linux/findhyph b/Master/bin/sparc-linux/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/sparc-linux/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/sparc-solaris/findhyph b/Master/bin/sparc-solaris/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/sparc-solaris/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/universal-darwin/findhyph b/Master/bin/universal-darwin/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/universal-darwin/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/bin/win32/findhyph.exe b/Master/bin/win32/findhyph.exe
new file mode 100755
index 00000000000..a93ef24732b
--- /dev/null
+++ b/Master/bin/win32/findhyph.exe
Binary files differ
diff --git a/Master/bin/x86_64-linux/findhyph b/Master/bin/x86_64-linux/findhyph
new file mode 120000
index 00000000000..31f10c8c0de
--- /dev/null
+++ b/Master/bin/x86_64-linux/findhyph
@@ -0,0 +1 @@
+../../texmf-dist/scripts/findhyph/findhyph \ No newline at end of file
diff --git a/Master/texmf-dist/doc/support/findhyph/Makefile b/Master/texmf-dist/doc/support/findhyph/Makefile
new file mode 100644
index 00000000000..808cba34385
--- /dev/null
+++ b/Master/texmf-dist/doc/support/findhyph/Makefile
@@ -0,0 +1,10 @@
+TEX = \\documentclass{article}\\usepackage[T1]{fontenc}\\usepackage{textcomp}\\begin{document}\\input{fh.tex}\\end{document}
+
+doc:
+ pod2man -c "" ../findhyph > findhyph.1
+ pod2text ../findhyph > findhyph.txt
+ echo $(TEX) > findhyph.tex
+ pod2latex -out fh.tex ../findhyph
+ pdflatex findhyph.tex
+ pdflatex findhyph.tex
+ rm fh.tex findhyph.aux findhyph.log findhyph.tex
diff --git a/Master/texmf-dist/doc/support/findhyph/README b/Master/texmf-dist/doc/support/findhyph/README
new file mode 100644
index 00000000000..17c56b1ca89
--- /dev/null
+++ b/Master/texmf-dist/doc/support/findhyph/README
@@ -0,0 +1,9 @@
+findhyph -- Perl program which finds all words hyphenated by TeX in a document;
+ see findhyph.pdf or findhyph.1 for details
+
+Copyright (c) Martin Budaj 2000, 2001, 2009
+
+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 2 of the License, or
+any later version.
diff --git a/Master/texmf-dist/doc/support/findhyph/findhyph.bat b/Master/texmf-dist/doc/support/findhyph/findhyph.bat
new file mode 100755
index 00000000000..cc8d2ce283a
--- /dev/null
+++ b/Master/texmf-dist/doc/support/findhyph/findhyph.bat
@@ -0,0 +1,327 @@
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -x -S %0 %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!/usr/bin/perl
+#line 15
+
+use warnings;
+use Getopt::Std;
+$opt_l = 'kKsSvVzZoOuUiIA'; # defaults for Slovak and Czech
+$opt_c = $opt_f = $opt_h = $opt_v = 0;
+getopts('cfphvl:');
+
+$version_msg = "findhyph version 2.0\n";
+$help_msg = "\nUsage: findhyph [options] <yourtexfile.log>\n" .
+ "\n" .
+ "Options: -c display hyphenated words in context\n" .
+ " -f display font selectors\n" .
+ " -h display this help message\n" .
+ " -v display version\n" .
+ " -p generate file with prepositions left at the end of line\n" .
+ " -l=STRING use prepositions/conjunctions listed in STRING\n";
+
+print ($version_msg) if $opt_v;
+die ($help_msg) if $opt_h || !$ARGV[0];
+$filename = $ARGV[0];
+if ($filename =~ /\.(log|tex|dvi|ps|pdf)$/) {
+ $filename = $`;
+}
+open(IN, "$filename.log") or die ("Can't read $filename.log: $!\n");
+open(O1, ">$filename.hyph") or die ("Can't write $filename.hyph: $!\n");
+if ($opt_p) {
+ open(O2, ">$filename.prep") or die ("Can't write $filename.prep: $!\n");
+}
+
+$search = 0;
+$pageno_allowed = 0;
+$write_hyph_page = 0;
+$write_prep_page = 0;
+$act_text = "";
+
+while(<IN>) {
+ chomp;
+ if (/^\@firstpass$/) {
+ $pageno_allowed = 0;
+ $endgraf = 0;
+ $demerits = 1e10;
+ $search = 1;
+ $search_hyphens = 0;
+ $act_break = 0;
+ $act_text = "";
+ @USED = ();
+ %BREAKS = ();
+ next;
+ }
+ if (/^\@secondpass$/) {
+ $search_hyphens = 1;
+ $act_break = 0;
+ $act_text = "";
+ @USED = ();
+ %BREAKS = ();
+ next;
+ }
+ if (/^\@emergencypass$/) {
+ $act_break = 0;
+ $act_text = "";
+ @USED = ();
+ %BREAKS = ();
+ next;
+ }
+ if ($search && /^@@(\d+).+ t=(\d+) \-\> @@(\d+)/) {
+ $act_break = $1;
+ $BREAKS{$act_break}{'prev'} = $3;
+ if ($endgraf && $2 < $demerits) {
+ $max_break = $1;
+ $demerits = $2;
+ }
+ $act_text .= "\@$act_break\@";
+ next;
+ }
+ if ($search && /^@\\par via @@/) {
+ $endgraf = 1;
+ next;
+ }
+ if ($search && /^@\\discretionary via @@/) {
+ $search_hyphens = 1; # @firstpass may contain words hyphenated by user
+ next; # using \discretionary
+ }
+ if ($search && /^@/) {
+ next;
+ }
+ if ($search && $endgraf && $_ eq "") {
+ $pageno_allowed = 1;
+ do_hyph();
+ $search = 0;
+ next;
+ }
+ if ($search) {
+ $act_text .= $_;
+ } else {
+ if ($pageno_allowed && /\[(\-?\d+)(\.\-?\d+){0,9} ?(\]|\{|\<|$)/) { # page number
+ $pageno = $1;
+ $pageno_allowed = 0;
+ if ($write_hyph_page) {
+ print O1 "[$pageno]\n\n";
+ $write_hyph_page = 0;
+ }
+ if ($write_prep_page) {
+ print O2 "[$pageno]\n\n";
+ $write_prep_page = 0;
+ }
+ }
+ }
+}
+
+close(O1);
+close(O2) if $opt_p;
+
+sub do_hyph {
+ $br = $max_break;
+ while (1) {
+ $br = $BREAKS{$br}{'prev'};
+ last if ($br == 0);
+ $USED[$br] = 1;
+ }
+
+ for $i (1..$max_break-1) {
+ if (not defined $USED[$i]) {
+ $act_text =~ s/\@$i\@//;
+ };
+ }
+
+ if ($opt_f) {
+ $act_text =~ s/(\\\S+)\s+/$1\_/g;
+ } else {
+ $act_text =~ s/\\\S+\s+//g; # usually font selector, but also backslash in the text
+ }
+
+ for $i (1..$max_break-1) {
+ if (defined $USED[$i]) {
+ if ($search_hyphens) { # hyphenated words
+ if ($act_text =~ /(\S+\@$i\@\S+)/) { # only hyphenated words match
+ $out_text = $1;
+ if ($opt_c) {
+ $context_before = $context_after = "";
+ if ($act_text =~ /(\S+)\s+\S+\@$i\@/) {$context_before = $1;}
+ if ($act_text =~ /\@$i\@\S+\s+(\S+)/) {$context_after = $1;}
+ $out_text = "$context_before $out_text $context_after";
+ }
+ $out_text =~ s/-//g;
+ $out_text =~ s/\@$i\@/-/g;
+ $out_text =~ s/\@\d+\@//g; # very narrow columns
+ print O1 "$out_text\n";
+ $write_hyph_page = 1;
+ }
+ }
+ if ($opt_p) { # prepositions
+ if ($act_text =~ / (\S) \@$i\@/) {
+ $out_text = $1;
+ if ($out_text =~ /^[$opt_l]$/) {
+ if ($opt_c) {
+ $context_before = $context_after = "";
+ if($act_text =~ /(\S+) \S \@$i\@/) {$context_before = $1;}
+ if($act_text =~ /\@$i\@ ?(\S+)/) {$context_after = $1;}
+ $out_text = "$context_before $out_text $context_after";
+ $out_text =~ s/-//g;
+ $out_text =~ s/\@\d+\@//g; # very narrow columns
+ }
+ print O2 "$out_text\n";
+ $write_prep_page = 1;
+ }
+ }
+ }
+ }
+ }
+}
+
+__END__
+
+=head1 NAME
+
+B<findhyph> -- find words hyphenated by TeX in a document
+
+=head1 INSTALLATION
+
+Copy B<findhyph> or B<findhyph.bat> (depending on OS used) to a directory
+included in system PATH. Perl interpreter is required to be in
+C</usr/bin/> for Unix-like systems or in PATH when using B<findhyph.bat>.
+
+=head1 SYNOPSIS
+
+=over 4
+
+=item 1)
+
+set C<\tracingparagraphs=1> in a TeX document F<foo.tex> and run:
+
+=item 2)
+
+B<tex> F<foo.tex>
+
+=item 3)
+
+B<findhyph [options]> F<foo.log>
+
+=back
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-c>
+
+display hyphenated words in context
+
+=item B<-f>
+
+display font selectors and other strings starting with a backslash character
+
+=item B<-v>
+
+display program version
+
+=item B<-p>
+
+generate file containing information about one-letter prepositions and
+conjunctions left at the end of line
+
+=item B<-l=STRING>
+
+use prepositions/conjunctions listed in STRING instead of default list of
+prepositions and conjunctions C<kKsSvVzZoOuUiIA> used for Slovak and Czech
+language
+
+=back
+
+=head1 OUTPUT FILES
+
+=over 4
+
+=item F<foo.hyph>
+
+List of hyphenated words. All punctuation characters, parentheses and
+other character immediately preceding or following displayed words are included
+in this list. TeX constructs which are too difficult to display (C<\hbox{}>,
+C<\mark{}> etc.) are shown as C<[]>. Math mode is indicated by C<$> sign.
+
+Page numbers in square brackets refer to LOG file and may occasionally differ
+from the typeset document. The reason is that TeX may need to break more
+paragraphs than it would eventually fit on the page in order to find a page
+break.
+
+Words hyphenated in footnotes are listed before the words hyphenated in the
+paragraph in which the footnote is referenced.
+
+=item F<foo.prep>
+
+List of prepositions if option B<-p> is used.
+
+=back
+
+=head1 HISTORY
+
+=head4 1.0 (2001-04-08)
+
+=over 4
+
+=item *
+
+public release
+
+=back
+
+=head4 2.0 (2009-08-10)
+
+=over 4
+
+=item *
+
+fixes in line breaks detection algorithm; support for third pass of line
+breaking algorithm in TeX (positive \emergencystretch); support for
+discretionary breaks in the first pass
+
+=item *
+
+page number detection improved (recognized negative page numbers, compound page
+numbers when C<\count1> to C<\count9> registers are non-zero
+and C<[nn{mapfile}]>, C<[nnE<lt>pictureE<gt>]> and C<[nnE<lt>newlineE<gt>>
+formats used by pdfTeX; false page number detection should be much more rare)
+
+=item *
+
+configurable list of prepositions and conjunctions
+
+=item *
+
+hyphenated words can be displayed in context
+
+=item *
+
+suggestions and testing by Pavel Striz
+
+=back
+
+=head1 LICENSE
+
+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 2 of the License, or
+any later version.
+
+=head1 AUTHOR
+
+Copyright (c) Martin Budaj E<lt>m.b@speleo.skE<gt> 2000, 2001, 2009
+
+=cut
+
+__END__
+:endofperl
diff --git a/Master/texmf-dist/doc/support/findhyph/findhyph.txt b/Master/texmf-dist/doc/support/findhyph/findhyph.txt
new file mode 100644
index 00000000000..1362b9a8222
--- /dev/null
+++ b/Master/texmf-dist/doc/support/findhyph/findhyph.txt
@@ -0,0 +1,80 @@
+NAME
+ findhyph -- find words hyphenated by TeX in a document
+
+INSTALLATION
+ Copy findhyph or findhyph.bat (depending on OS used) to a directory
+ included in system PATH. Perl interpreter is required to be in
+ "/usr/bin/" for Unix-like systems or in PATH when using findhyph.bat.
+
+SYNOPSIS
+ 1) set "\tracingparagraphs=1" in a TeX document foo.tex and run:
+
+ 2) tex foo.tex
+
+ 3) findhyph [options] foo.log
+
+OPTIONS
+ -c display hyphenated words in context
+
+ -f display font selectors and other strings starting with a backslash
+ character
+
+ -v display program version
+
+ -p generate file containing information about one-letter prepositions
+ and conjunctions left at the end of line
+
+ -l=STRING
+ use prepositions/conjunctions listed in STRING instead of default
+ list of prepositions and conjunctions "kKsSvVzZoOuUiIA" used for
+ Slovak and Czech language
+
+OUTPUT FILES
+ foo.hyph
+ List of hyphenated words. All punctuation characters, parentheses
+ and other character immediately preceding or following displayed
+ words are included in this list. TeX constructs which are too
+ difficult to display ("\hbox{}", "\mark{}" etc.) are shown as "[]".
+ Math mode is indicated by "$" sign.
+
+ Page numbers in square brackets refer to LOG file and may
+ occasionally differ from the typeset document. The reason is that
+ TeX may need to break more paragraphs than it would eventually fit
+ on the page in order to find a page break.
+
+ Words hyphenated in footnotes are listed before the words hyphenated
+ in the paragraph in which the footnote is referenced.
+
+ foo.prep
+ List of prepositions if option -p is used.
+
+HISTORY
+ 1.0 (2001-04-08)
+ * public release
+
+ 2.0 (2009-08-10)
+ * fixes in line breaks detection algorithm; support for third pass of
+ line breaking algorithm in TeX (positive \emergencystretch); support
+ for discretionary breaks in the first pass
+
+ * page number detection improved (recognized negative page numbers,
+ compound page numbers when "\count1" to "\count9" registers are
+ non-zero and "[nn{mapfile}]", "[nn<picture>]" and "[nn<newline>"
+ formats used by pdfTeX; false page number detection should be much
+ more rare)
+
+ * configurable list of prepositions and conjunctions
+
+ * hyphenated words can be displayed in context
+
+ * suggestions and testing by Pavel Striz
+
+LICENSE
+ 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 2 of the License, or any later
+ version.
+
+AUTHOR
+ Copyright (c) Martin Budaj <m.b@speleo.sk> 2000, 2001, 2009
+
diff --git a/Master/texmf-dist/scripts/findhyph/findhyph b/Master/texmf-dist/scripts/findhyph/findhyph
new file mode 100755
index 00000000000..75af7d2a829
--- /dev/null
+++ b/Master/texmf-dist/scripts/findhyph/findhyph
@@ -0,0 +1,311 @@
+#!/usr/bin/perl
+
+use warnings;
+use Getopt::Std;
+$opt_l = 'kKsSvVzZoOuUiIA'; # defaults for Slovak and Czech
+$opt_c = $opt_f = $opt_h = $opt_v = 0;
+getopts('cfphvl:');
+
+$version_msg = "findhyph version 2.0\n";
+$help_msg = "\nUsage: findhyph [options] <yourtexfile.log>\n" .
+ "\n" .
+ "Options: -c display hyphenated words in context\n" .
+ " -f display font selectors\n" .
+ " -h display this help message\n" .
+ " -v display version\n" .
+ " -p generate file with prepositions left at the end of line\n" .
+ " -l=STRING use prepositions/conjunctions listed in STRING\n";
+
+print ($version_msg) if $opt_v;
+die ($help_msg) if $opt_h || !$ARGV[0];
+$filename = $ARGV[0];
+if ($filename =~ /\.(log|tex|dvi|ps|pdf)$/) {
+ $filename = $`;
+}
+open(IN, "$filename.log") or die ("Can't read $filename.log: $!\n");
+open(O1, ">$filename.hyph") or die ("Can't write $filename.hyph: $!\n");
+if ($opt_p) {
+ open(O2, ">$filename.prep") or die ("Can't write $filename.prep: $!\n");
+}
+
+$search = 0;
+$pageno_allowed = 0;
+$write_hyph_page = 0;
+$write_prep_page = 0;
+$act_text = "";
+
+while(<IN>) {
+ chomp;
+ if (/^\@firstpass$/) {
+ $pageno_allowed = 0;
+ $endgraf = 0;
+ $demerits = 1e10;
+ $search = 1;
+ $search_hyphens = 0;
+ $act_break = 0;
+ $act_text = "";
+ @USED = ();
+ %BREAKS = ();
+ next;
+ }
+ if (/^\@secondpass$/) {
+ $search_hyphens = 1;
+ $act_break = 0;
+ $act_text = "";
+ @USED = ();
+ %BREAKS = ();
+ next;
+ }
+ if (/^\@emergencypass$/) {
+ $act_break = 0;
+ $act_text = "";
+ @USED = ();
+ %BREAKS = ();
+ next;
+ }
+ if ($search && /^@@(\d+).+ t=(\d+) \-\> @@(\d+)/) {
+ $act_break = $1;
+ $BREAKS{$act_break}{'prev'} = $3;
+ if ($endgraf && $2 < $demerits) {
+ $max_break = $1;
+ $demerits = $2;
+ }
+ $act_text .= "\@$act_break\@";
+ next;
+ }
+ if ($search && /^@\\par via @@/) {
+ $endgraf = 1;
+ next;
+ }
+ if ($search && /^@\\discretionary via @@/) {
+ $search_hyphens = 1; # @firstpass may contain words hyphenated by user
+ next; # using \discretionary
+ }
+ if ($search && /^@/) {
+ next;
+ }
+ if ($search && $endgraf && $_ eq "") {
+ $pageno_allowed = 1;
+ do_hyph();
+ $search = 0;
+ next;
+ }
+ if ($search) {
+ $act_text .= $_;
+ } else {
+ if ($pageno_allowed && /\[(\-?\d+)(\.\-?\d+){0,9} ?(\]|\{|\<|$)/) { # page number
+ $pageno = $1;
+ $pageno_allowed = 0;
+ if ($write_hyph_page) {
+ print O1 "[$pageno]\n\n";
+ $write_hyph_page = 0;
+ }
+ if ($write_prep_page) {
+ print O2 "[$pageno]\n\n";
+ $write_prep_page = 0;
+ }
+ }
+ }
+}
+
+close(O1);
+close(O2) if $opt_p;
+
+sub do_hyph {
+ $br = $max_break;
+ while (1) {
+ $br = $BREAKS{$br}{'prev'};
+ last if ($br == 0);
+ $USED[$br] = 1;
+ }
+
+ for $i (1..$max_break-1) {
+ if (not defined $USED[$i]) {
+ $act_text =~ s/\@$i\@//;
+ };
+ }
+
+ if ($opt_f) {
+ $act_text =~ s/(\\\S+)\s+/$1\_/g;
+ } else {
+ $act_text =~ s/\\\S+\s+//g; # usually font selector, but also backslash in the text
+ }
+
+ for $i (1..$max_break-1) {
+ if (defined $USED[$i]) {
+ if ($search_hyphens) { # hyphenated words
+ if ($act_text =~ /(\S+\@$i\@\S+)/) { # only hyphenated words match
+ $out_text = $1;
+ if ($opt_c) {
+ $context_before = $context_after = "";
+ if ($act_text =~ /(\S+)\s+\S+\@$i\@/) {$context_before = $1;}
+ if ($act_text =~ /\@$i\@\S+\s+(\S+)/) {$context_after = $1;}
+ $out_text = "$context_before $out_text $context_after";
+ }
+ $out_text =~ s/-//g;
+ $out_text =~ s/\@$i\@/-/g;
+ $out_text =~ s/\@\d+\@//g; # very narrow columns
+ print O1 "$out_text\n";
+ $write_hyph_page = 1;
+ }
+ }
+ if ($opt_p) { # prepositions
+ if ($act_text =~ / (\S) \@$i\@/) {
+ $out_text = $1;
+ if ($out_text =~ /^[$opt_l]$/) {
+ if ($opt_c) {
+ $context_before = $context_after = "";
+ if($act_text =~ /(\S+) \S \@$i\@/) {$context_before = $1;}
+ if($act_text =~ /\@$i\@ ?(\S+)/) {$context_after = $1;}
+ $out_text = "$context_before $out_text $context_after";
+ $out_text =~ s/-//g;
+ $out_text =~ s/\@\d+\@//g; # very narrow columns
+ }
+ print O2 "$out_text\n";
+ $write_prep_page = 1;
+ }
+ }
+ }
+ }
+ }
+}
+
+__END__
+
+=head1 NAME
+
+B<findhyph> -- find words hyphenated by TeX in a document
+
+=head1 INSTALLATION
+
+Copy B<findhyph> or B<findhyph.bat> (depending on OS used) to a directory
+included in system PATH. Perl interpreter is required to be in
+C</usr/bin/> for Unix-like systems or in PATH when using B<findhyph.bat>.
+
+=head1 SYNOPSIS
+
+=over 4
+
+=item 1)
+
+set C<\tracingparagraphs=1> in a TeX document F<foo.tex> and run:
+
+=item 2)
+
+B<tex> F<foo.tex>
+
+=item 3)
+
+B<findhyph [options]> F<foo.log>
+
+=back
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-c>
+
+display hyphenated words in context
+
+=item B<-f>
+
+display font selectors and other strings starting with a backslash character
+
+=item B<-v>
+
+display program version
+
+=item B<-p>
+
+generate file containing information about one-letter prepositions and
+conjunctions left at the end of line
+
+=item B<-l=STRING>
+
+use prepositions/conjunctions listed in STRING instead of default list of
+prepositions and conjunctions C<kKsSvVzZoOuUiIA> used for Slovak and Czech
+language
+
+=back
+
+=head1 OUTPUT FILES
+
+=over 4
+
+=item F<foo.hyph>
+
+List of hyphenated words. All punctuation characters, parentheses and
+other character immediately preceding or following displayed words are included
+in this list. TeX constructs which are too difficult to display (C<\hbox{}>,
+C<\mark{}> etc.) are shown as C<[]>. Math mode is indicated by C<$> sign.
+
+Page numbers in square brackets refer to LOG file and may occasionally differ
+from the typeset document. The reason is that TeX may need to break more
+paragraphs than it would eventually fit on the page in order to find a page
+break.
+
+Words hyphenated in footnotes are listed before the words hyphenated in the
+paragraph in which the footnote is referenced.
+
+=item F<foo.prep>
+
+List of prepositions if option B<-p> is used.
+
+=back
+
+=head1 HISTORY
+
+=head4 1.0 (2001-04-08)
+
+=over 4
+
+=item *
+
+public release
+
+=back
+
+=head4 2.0 (2009-08-10)
+
+=over 4
+
+=item *
+
+fixes in line breaks detection algorithm; support for third pass of line
+breaking algorithm in TeX (positive \emergencystretch); support for
+discretionary breaks in the first pass
+
+=item *
+
+page number detection improved (recognized negative page numbers, compound page
+numbers when C<\count1> to C<\count9> registers are non-zero
+and C<[nn{mapfile}]>, C<[nnE<lt>pictureE<gt>]> and C<[nnE<lt>newlineE<gt>>
+formats used by pdfTeX; false page number detection should be much more rare)
+
+=item *
+
+configurable list of prepositions and conjunctions
+
+=item *
+
+hyphenated words can be displayed in context
+
+=item *
+
+suggestions and testing by Pavel Striz
+
+=back
+
+=head1 LICENSE
+
+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 2 of the License, or
+any later version.
+
+=head1 AUTHOR
+
+Copyright (c) Martin Budaj E<lt>m.b@speleo.skE<gt> 2000, 2001, 2009
+
+=cut
diff --git a/Master/texmf/doc/man/man1/findhyph.1 b/Master/texmf/doc/man/man1/findhyph.1
new file mode 100644
index 00000000000..27086ba6590
--- /dev/null
+++ b/Master/texmf/doc/man/man1/findhyph.1
@@ -0,0 +1,221 @@
+.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "FINDHYPH 1"
+.TH FINDHYPH 1 "2009-08-10" "perl v5.10.0" ""
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+\&\fBfindhyph\fR \*(-- find words hyphenated by TeX in a document
+.SH "INSTALLATION"
+.IX Header "INSTALLATION"
+Copy \fBfindhyph\fR or \fBfindhyph.bat\fR (depending on \s-1OS\s0 used) to a directory
+included in system \s-1PATH\s0. Perl interpreter is required to be in
+\&\f(CW\*(C`/usr/bin/\*(C'\fR for Unix-like systems or in \s-1PATH\s0 when using \fBfindhyph.bat\fR.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.IP "1)" 4
+.IX Item "1)"
+set \f(CW\*(C`\etracingparagraphs=1\*(C'\fR in a TeX document \fIfoo.tex\fR and run:
+.IP "2)" 4
+.IX Item "2)"
+\&\fBtex\fR \fIfoo.tex\fR
+.IP "3)" 4
+.IX Item "3)"
+\&\fBfindhyph [options]\fR \fIfoo.log\fR
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+display hyphenated words in context
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+display font selectors and other strings starting with a backslash character
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+display program version
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+generate file containing information about one-letter prepositions and
+conjunctions left at the end of line
+.IP "\fB\-l=STRING\fR" 4
+.IX Item "-l=STRING"
+use prepositions/conjunctions listed in \s-1STRING\s0 instead of default list of
+prepositions and conjunctions \f(CW\*(C`kKsSvVzZoOuUiIA\*(C'\fR used for Slovak and Czech
+language
+.SH "OUTPUT FILES"
+.IX Header "OUTPUT FILES"
+.IP "\fIfoo.hyph\fR" 4
+.IX Item "foo.hyph"
+List of hyphenated words. All punctuation characters, parentheses and
+other character immediately preceding or following displayed words are included
+in this list. TeX constructs which are too difficult to display (\f(CW\*(C`\ehbox{}\*(C'\fR,
+\&\f(CW\*(C`\emark{}\*(C'\fR etc.) are shown as \f(CW\*(C`[]\*(C'\fR. Math mode is indicated by \f(CW\*(C`$\*(C'\fR sign.
+.Sp
+Page numbers in square brackets refer to \s-1LOG\s0 file and may occasionally differ
+from the typeset document. The reason is that TeX may need to break more
+paragraphs than it would eventually fit on the page in order to find a page
+break.
+.Sp
+Words hyphenated in footnotes are listed before the words hyphenated in the
+paragraph in which the footnote is referenced.
+.IP "\fIfoo.prep\fR" 4
+.IX Item "foo.prep"
+List of prepositions if option \fB\-p\fR is used.
+.SH "HISTORY"
+.IX Header "HISTORY"
+1.0 (2001\-04\-08)
+.IX Subsection "1.0 (2001-04-08)"
+.IP "\(bu" 4
+public release
+.PP
+2.0 (2009\-08\-10)
+.IX Subsection "2.0 (2009-08-10)"
+.IP "\(bu" 4
+fixes in line breaks detection algorithm; support for third pass of line
+breaking algorithm in TeX (positive \eemergencystretch); support for
+discretionary breaks in the first pass
+.IP "\(bu" 4
+page number detection improved (recognized negative page numbers, compound page
+numbers when \f(CW\*(C`\ecount1\*(C'\fR to \f(CW\*(C`\ecount9\*(C'\fR registers are non-zero
+and \f(CW\*(C`[nn{mapfile}]\*(C'\fR, \f(CW\*(C`[nn<picture>]\*(C'\fR and \f(CW\*(C`[nn<newline>\*(C'\fR
+formats used by pdfTeX; false page number detection should be much more rare)
+.IP "\(bu" 4
+configurable list of prepositions and conjunctions
+.IP "\(bu" 4
+hyphenated words can be displayed in context
+.IP "\(bu" 4
+suggestions and testing by Pavel Striz
+.SH "LICENSE"
+.IX Header "LICENSE"
+This program is free software; you can redistribute it and/or modify
+it under the terms of the \s-1GNU\s0 General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+any later version.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Copyright (c) Martin Budaj <m.b@speleo.sk> 2000, 2001, 2009
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index a91685abb02..fd05cf2db45 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -103,7 +103,7 @@ my @WorkingTLP = qw(
faktor fancybox fancyhdr fancynum fancyref fancytooltips fancyvrb
FAQ-en fbs featpost
feyn feynmf fge fig4latex figbas figflow
- filecontents fink first-latex-doc
+ filecontents findhyph fink first-latex-doc
fixfoot fixme fixpdfmag
flagderiv flippdf float floatrow flowfram fltpoint
fmtcount fn2end fnbreak
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index feb2a7fb357..ec898379e5b 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -221,6 +221,7 @@ chdir $startdir || die "chdir($startdir) failed: $!"; # back to raw
'fc', "&MAKEflatten",
'featpost', "&MAKEfeatpost",
'feynmf', "&MAKEfeynmf",
+ 'findhyph', "&MAKEflatten",
'floatflt', "die 'skipping, nosell license'",
'foiltex', "die 'skipping, nosell license'",
'flowfram', "&MAKEflatten",
@@ -272,6 +273,7 @@ chdir $startdir || die "chdir($startdir) failed: $!"; # back to raw
'japanese', "die 'skipping, requires ptex'",
'jasthesis', "die 'skipping, license is unknown'",
'javadoc', "die 'skipping, requires java and no source'",
+ 'jflap2tikz', "die 'skipping, requires java'",
'jj_game', "die 'skipping, requires acrotex'",
'jsclasses', "die 'skipping, requires nonfree ptex/platex'",
'junicode', "&MAKEflatten",
@@ -629,6 +631,7 @@ $standardsource='\.fdd|\.dtx|\.ins|\.c$|Makefile|configure.*|install-sh|\.drv';
'eskdx', 'NULL', # leave makefiles
'eurosym', 'NULL', # leave makefiles, etc.
'feynmf', 'feynmf\.pl' . $standardsource,
+ 'findhyph', 'NULL', # leave makefile
'grid', 'rvdtx\.sty|' . $standardsource,
'hyphenex', '.*',
'mff', '\.mfj|\.bat|\.diz',
@@ -1027,6 +1030,7 @@ $standardtex='\.(cfg|sty|clo|ldf|cls|def|fd|cmap|4ht)$';
'feyn', 'fonts',
'fge', 'fonts',
'fig4latex', 'support',
+ 'findhyph', 'support',
'fltpoint', 'generic',
'fontch', 'plain',
'fontools', 'support',
@@ -1472,6 +1476,7 @@ $standardxmt='\.xmt';
'epspdf' => '(epspdf(|\.help|boot|tk)|\.rb|makegray\.pro)$',
'epstopdf' => 'epstopdf',
'fig4latex' => 'fig4latex',
+ 'findhyph' => 'findhyph$',
'fragmaster' => 'fragmaster.pl',
'latex2man' => 'latex2man$',
'latexmk' => '\.pl$',
@@ -1493,6 +1498,7 @@ $standardxmt='\.xmt';
# packages which have man pages to install. Assume section 1 for now.
%specialmans = (
+ 'findhyph' => 'findhyph.1',
'pkfix-helper' => 'pkfix-helper.1',
'purifyeps' => 'purifyeps.1',
'texdirflatten' => 'texdirflatten.1',
@@ -1513,6 +1519,7 @@ $standardclean = '\.head|\.tmp|\.dvi|\.log|\.out|\.aux|\.toc|\.lof|\.lot'
'chemscheme' => "$standardclean|jawltxdoc.sty", # temp file for doc
'chemstyle' => "$standardclean|jawltxdoc.sty", # temp file for doc
'elvish' => '\.pk3', # no pk files
+ 'findhyph' => 'findhyph.pdf', # we will generate from man ourselves
'gentle' => 'gentle.ps.gz', # pdf is enough
'hyph-utf8' => 'README',
'jadetex' => $standardclean # these sty files are in passivetex
diff --git a/Master/tlpkg/tlpsrc/collection-binextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-binextra.tlpsrc
index c79eee83219..cf91bd7a7a1 100644
--- a/Master/tlpkg/tlpsrc/collection-binextra.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-binextra.tlpsrc
@@ -16,6 +16,7 @@ depend dvidvi
depend dviljk
depend dvipng
depend dvipos
+depend findhyph
depend getnonfreefonts
depend lacheck
depend patgen
diff --git a/Master/tlpkg/tlpsrc/fig4latex.tlpsrc b/Master/tlpkg/tlpsrc/fig4latex.tlpsrc
index e69de29bb2d..2f077e9a783 100644
--- a/Master/tlpkg/tlpsrc/fig4latex.tlpsrc
+++ b/Master/tlpkg/tlpsrc/fig4latex.tlpsrc
@@ -0,0 +1 @@
+binpattern f bin/${ARCH}/fig4latex
diff --git a/Master/tlpkg/tlpsrc/findhyph.tlpsrc b/Master/tlpkg/tlpsrc/findhyph.tlpsrc
new file mode 100644
index 00000000000..2da7b08c4b6
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/findhyph.tlpsrc
@@ -0,0 +1,2 @@
+docpattern +f texmf/doc/man/man1/findhyph.*
+binpattern f bin/${ARCH}/findhyph