summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/ibycus-babel/ibyhyph.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/ibycus-babel/ibyhyph.pl')
-rw-r--r--Master/texmf-dist/doc/latex/ibycus-babel/ibyhyph.pl87
1 files changed, 87 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/ibycus-babel/ibyhyph.pl b/Master/texmf-dist/doc/latex/ibycus-babel/ibyhyph.pl
new file mode 100644
index 00000000000..fe6a6734877
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ibycus-babel/ibyhyph.pl
@@ -0,0 +1,87 @@
+#!/usr/bin/perl
+#
+# This perl script converts the Greek hyphenation patterns for the
+# cbgreek encodings to the encoding used by the Ibycus greek font.
+#
+# Copyright Peter Heslin 2003.
+#
+# Usage: perl ibyhyph.pl < grhyph.tex > ibyhyph.tex
+#
+use strict;
+my %seen;
+my ($f, $p);
+
+my $preamble = << 'END';
+\message{Greek hyphenation patterns for Ibycus 4}
+% This file was mechanically translated from a set of patterns
+% for the standard greek encoding using the perl script ibyhyph.pl
+\begingroup
+\ifx\eTeXversion\undefined\message{not using eTeX}\else\savinghyphcodes=1\fi
+\lccode`(=`( \lccode`)=`) \lccode``=``
+\lccode `'=`' \lccode`==`= \lccode`+=`+
+\lccode `|=`|
+END
+
+print $preamble;
+
+my $v = '[aeiouhwr]'; # vowels plus rho
+my $a = '[<>\'`~"|]'; # accents
+
+# Will break if patterns begin on the same line
+while(<>) {last if m/\\patterns{%/}
+print "\\patterns{%\n";
+
+LINE:
+while (<>)
+{
+ last if m/^}/;
+ if (m/^%/)
+ {
+ print $_;
+ next;
+ }
+
+ for $p (split)
+ {
+ next LINE if $p =~ m/%/;
+ #print STDERR "$p\n";
+ $p =~ s/''(\s|$)/'.$1/g; # apostrophe (at end of word)
+ $p =~ s/(\s|^)''/.'/g; # apostrophe (at start)
+
+ $p =~ s/\b\w*v\w*\b//g; # get rid of patterns with v
+ $p =~ s/<($a*)($v)/$2($1/g; # move and change breathings
+ $p =~ s/>($a*)($v)/$2)$1/g; # move and change breathings
+ $p =~ s/($a+)($v)/$2$1/g; # move accents
+
+ $p =~ s/~/=/g; # change circumflex
+ $p =~ s/"/+/g; # change diaresis
+
+ $p =~ tr/jxqc/qcxj/; # change theta, xi, chi, final sigma
+
+ # odd bits
+ $p =~ s/<(\d)($v)/$2$1(/g;
+ $p =~ s/>(\d)($v)/$2$1)/g;
+
+ # This is a trick Ibycus can't use: breaking right after the vowel
+ $p =~ s/^($v+)1$/${1}1 ${1}2'1 ${1}2`1 ${1}2=1 ${1}2)1 ${1}2)2'1 ${1}2)2`1 ${1}2)2=1 ${1}2(1 ${1}2(2'1 ${1}2(2`1 ${1}2(2=1 ${1}2+1 ${1}2+2'1 ${1}2+2`1/g;
+
+ # iota subscript follows accents as well as vowels
+ $p =~ s/$v(\d)\|(\d)/$1|$2/g;
+
+ $p =~ s/r\d$a//g;
+ $p =~ s/\w*\^\^\w*//g;
+
+ # If we fold c and s, it causes duplicates
+ next if $seen{$p};
+ $seen{$p}++;
+
+ #print STDERR "$p\n\n";
+
+ print "$p\n" unless $p =~ m/^\s*$/;
+ }
+
+}
+
+print "}\n\\endgroup\n\\endinput\n";
+
+# end