Current Path : /usr/local/lib/perl5/site_perl/5.8.9/TeX/Hyphen/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/local/lib/perl5/site_perl/5.8.9/TeX/Hyphen/german.pm |
package TeX::Hyphen::german; =head1 NAME TeX::Hyphen::german -- provides parsing routine for German patterns =head1 SYNOPSIS use TeX::Hyphen; my $hyp = new TeX::Hyphen 'hyphen.tex', style => 'german'; # and then follow documentation for TeX::Hyphen =head1 DESCRIPTION This file provides parsing routine for German patterns. =cut use vars qw( $LEFTMIN $RIGHTMIN $VERSION ); $VERSION = 0.121; $LEFTMIN = 2; $RIGHTMIN = 2; # ###################################################### # TeX conversions done for Czech language, eg. \'a, \v r # my %BACKV = ( 'c' => 'è', 'd' => 'ï', 'e' => 'ì', 'l' => 'µ', 'n' => 'ò', 'r' => 'ø', 's' => '¹', 't' => '»', 'z' => '¾', 'C' => 'È', 'D' => 'Ï', 'E' => 'Ì', 'L' => '¥', 'N' => 'Ò', 'R' => 'Ø', 'S' => '©', 'T' => '«', 'Z' => '®' ); my %BACKAP = ( 'a' => 'á', 'e' => 'é', 'i' => 'í', 'l' => 'å', 'o' => 'ó', 'u' => 'ú', 'y' => 'ý', 'A' => 'Á', 'E' => 'É', 'I' => 'Í', 'L' => 'Å', 'O' => 'Ó', 'U' => 'Ú', 'Y' => 'Ý'); sub cstolower { my $e = shift; $e =~ tr/[A-Z]ÁÄÈÏÉÌËÍÅ¥ÒÓÔÕÖØ©«ÚÙÛÜݬ®/[a-z]áäèïéìëíåµòóôõöø¹»úùûüý¼¾/; $e; } # German conversions my %german_conv = (a => "ä", o => "ö", u => "ü", '3' => "ß", A => "Ä", O => "Ö", U => "Ü"); sub process_patterns { my ($line, $bothhyphen, $beginhyphen, $endhyphen, $hyphen) = @_; if ($line =~ /\\endgroup/) { return 0; } for (split /\s+/, $line) { next if $_ eq ''; my $begin = 0; my $end = 0; $begin = 1 if s!^\.!!; $end = 1 if s!\.$!!; s!\\n\{([^\}]+)\}!$1!g; s!\"(aouAOU3)!$german_conv{$1}!eg; s!\\v\s+(.)!$BACKV{$1}!g; # process the \v tag s!\\'(.)!$BACKAP{$1}!g; # process the \' tag s!\^\^(..)!chr(hex($1))!eg; # convert things like ^^fc s!(\D)(?=\D)!${1}0!g; # insert zeroes s!^(?=\D)!0!; # and start with some digit ($tag = $_) =~ s!\d!!g; # get the string ($value = $_) =~ s!\D!!g; # and numbers apart $tag = cstolower($tag); # convert to lowercase # (if we knew locales are fine everywhere, # we could use them) if ($begin and $end) { $bothhyphen->{$tag} = $value; } elsif ($begin) { $beginhyphen->{$tag} = $value; } elsif ($end) { $endhyphen->{$tag} = $value; } else { $hyphen->{$tag} = $value; } } return 1; } sub process_hyphenation { my ($line, $exception) = @_; if ($line =~ /\}/) { return 0; } local $_ = $line; s!\\v\s+(.)!$BACKV{$+}!g; s!\\'(.)!$BACKAP{$+}!g; ($tag = $_) =~ s!-!!g; $tag = cstolower($tag); ($value = '0' . $_) =~ s![^-](?=[^-])!0!g; $value =~ s![^-]-!1!g; $value =~ s![^01]!0!g; $exception->{$tag} = $value; 1; } 1;