diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/ibycus-babel/ibyhyph.pl')
-rw-r--r-- | Master/texmf-dist/doc/latex/ibycus-babel/ibyhyph.pl | 87 |
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 |