File Coverage

blib/lib/Lingua/DE/ASCII.pm
Criterion Covered Total %
statement 479 479 100.0
branch 21 24 87.5
condition n/a
subroutine 7 7 100.0
pod 2 2 100.0
total 509 512 99.4


line stmt bran cond sub pod time code
1             package Lingua::DE::ASCII;
2              
3 6     6   20886 use 5.006;
  6         16  
4 6     6   19 use strict;
  6         6  
  6         84  
5 6     6   18 use warnings;
  6         11  
  6         6390  
6              
7             require Exporter;
8              
9             our @ISA = qw(Exporter);
10              
11             our @EXPORT = qw(to_ascii to_latin1);
12             our %EXPORT_TAGS = ( 'all' => [ @EXPORT ]);
13             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
14             our $VERSION = '0.12';
15              
16             our %ANSI_TO_ASCII_TRANSLITERATION = (qw(
17             ¡ !
18             ¢ ct
19             £ Lb
20             ¤ EUR
21             ¥ Yen
22             ¦ S
23             § §
24             ¨ s
25             ª a
26             « <<
27             ¬ --|
28             ­ -
29             ¯ -
30             ° °
31             ± +-
32             ² ^2
33             ³ ^3
34             » >>
35             ¼ 1/4
36             ½ 1/2
37             ¾ 3/4
38             ¿ ?
39             · .
40             ¹ ^1
41             º °
42             á a
43             Á A
44             à a
45             À A
46             â a
47             Â A
48             å a
49             Å A
50             ã a
51             Ã A
52             ä ae
53             Ä Ae
54             æ ae
55             Æ Ae
56             ç c
57             Ç C
58             Ð D
59             ð p
60             é e
61             É E
62             è e
63             È E
64             ê e
65             Ê E
66             ë e
67             Ë E
68             í i
69             Í I
70             ì i
71             Ì I
72             î i
73             Î I
74             ï i
75             Ï I
76             ñ n
77             Ñ N
78             ÷ o
79             ó o
80             Ó O
81             ò o
82             Ò O
83             ô o
84             Ô O
85             õ o
86             Õ O
87             ö oe
88             Ö Oe
89             ø oe
90             Ø Oe
91             ¶ P
92             ß ss
93             µ ue
94             ú u
95             Ú U
96             ù u
97             Ù U
98             û u
99             Û U
100             ü ue
101             Ü Ue
102             × x
103             ý y
104             Ý Y
105             ÿ y
106             þ th
107             Þ Th
108             ),
109             ("´" => "'",
110             "¸" => ",",
111             "®" => "(R)",
112             "©" => "(C)",
113             chr(160) => ' ')
114             );
115              
116             # remove all unknown chars
117             $ANSI_TO_ASCII_TRANSLITERATION{$_} = ''
118             for (
119             grep { !defined( $ANSI_TO_ASCII_TRANSLITERATION{$_} ) }
120             map { chr $_ } ( 128 .. 255 )
121             );
122              
123             sub to_ascii($) {
124 215659     215659 1 3737596 my $text = shift;
125 215659 50       238297 return unless defined $text;
126 215659         1133687 $text =~ s/([\200-\377])/$ANSI_TO_ASCII_TRANSLITERATION{$1}/g;
127             #\octal => \200 = 128, \377 => 255
128 215659         306738 return $text;
129             }
130              
131             my %mutation = qw(
132             ae ä
133             Ae Ä
134             oe ö
135             Oe Ö
136             ue ü
137             Ue Ü
138             );
139              
140             my $vocal = qr/[aeiouäöüAEIOUÄÖÜ]/;
141             my $consonant = qr/[bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ]/;
142             my $letter = qr/[abcdefghijklmnopqrstuvwxyzäöüABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ]/;
143              
144             my $prefix = qr/(?=[\wÄÖÜäöü]\w) # to improve speed
145              
146             (?:[Aa](?:[nb]|u[fs]|bend)|
147             [Bb]e(?:reit|i|isammen|vor|)|
148             [Dd](?:a(?>für|neben|rum|r|)|
149             icke?|
150             rin|
151             urch|
152             rei
153             )|
154             [Ee](?:r|
155             in|
156             nt|
157             )|
158             [Ff]e(?:hl|st)|
159             [Ff]rei|
160             (?:[Gg](?:erade|
161             leich|
162             roß|
163             ross)
164             )|
165             [Ll]os|
166             [Gg]e(?:heim(?:nis)?)?|
167             [Gg]enug|
168             [Gg]ut|
169             [Hh](?:alb|eraus|erum|in(?:(?:un)?ter)?)|
170             [Kk]rank|
171             [Kk]und|
172             [Mm]ehr|
173             [Mm]it|
174             [Nn]ach|
175             [Nn]icht|
176             [Nn]eun|
177             (?:[Ss](?:chön|till|tramm))|
178             [Tt]ot|
179             [Uu]m|
180             [Vv][eo]r|
181             [Vv]ier(?:tel)?|
182             [Ww]e[gh]|
183             [Ww]ichtig|
184             [Uu]n|
185             [Zz]u(?:rück|sammen)?|
186             [Zz]wei|
187             [Üü]ber
188             )
189             /x;
190              
191             my $town_with_a = qr/[Ff]uld|
192             [Aa]lton|
193             [Gg]han|
194             [Gg]oth|
195             [Ll]ausch|
196             [Mm]oden|
197             [Nn]izz|
198             [Pp]anam|
199             [Pp]arm|
200             [Rr]ig|
201             [Ss]myrn|
202             [Ss]ofi/x;
203              
204             my $town_with_o = qr/[Kk]air|
205             [Oo]sl|
206             [Tt]og|
207             [Tt]oki/x;
208            
209             sub to_latin1($) {
210 9992     9992 1 72669 local $_ = shift;
211 9992 50       19410 return unless defined;
212              
213 9992 100       167927 if (/[Aa]e/) {
214 5612         535201 s/ (?
215             (?
216             (?
217             (?
218             (?
219             (?
220             (?
221             (?
222             (?
223             (?
224             (?
225            
226             ae
227            
228             (?=[\wß\.]) # no ä at the end of a word
229            
230             (?!rleb) # e.g. Ahaerlebnis
231             (?!rreg[^i]) # Malariaerreger
232             (?!n\b) # even not if in plural
233             (?!pid) # Choleraepidemie
234             (?!in) # Kameraeinstellung
235             (?!lit) # dingsda-elit
236             (?!lem) # ...element
237             /ä/gx;
238              
239 5612         48001 s/(?<=[rtz])ae(?=n\b)/ä/g; # Eozän, Kapitän, Souverän
240            
241 5612         31807 s/phorae/phorä/g; # Epiphorä
242 5612         36555 s/kenae/kenä/g; # Mykenä
243 5612         39903 s/ovae\b/ovä/g;
244            
245 5612         129956 s/($town_with_a)är/$1aer/g;
246            
247 5612         86963 s/(?<=[mr])ä(?=ls?\b|li)/ae/g; # Mariä
248 5612         44576 s/(?<=\b[Pp]r)ae/ä/g; # Prä...
249 5612         41993 s/(?<=bd)ae(?=n)/ä/g; # Molybdän
250 5612         86306 s/(?<=[^Aa]ns)
251             (?
252             (?
253             ä
254             (?![uetg]) # Mensaessen != Ameisensäure, Ansäen, Ansägen
255             (?![fm]t| # Bratensäfte, ...ämter
256             ngs| # ...-ängste
257             r[gz]| # ...-särge, ...-ärzte
258             c[kh]| # ...-säcke
259             n[dgk]e| # ...-änderung, ...-änge, ... -sänke
260             [lhß]e #säle, ... sähe, säße
261             )
262             /ae/gx;
263            
264 5612         52472 s/\bAe(?!r[oiu])/Ä/gx; # Ae at beginning of a word, like Aerobic != Ära, Ären
265             }
266              
267 9992 100       165635 if (/[Oo]e/) {
268             # oe => ö
269 3135         187267 s/(?
270             (?
271             (?
272             (?
273             (?
274             (?
275             (?
276             (?
277             (?
278             (?
279             (?
280             (?
281             (?
282             (?
283             (?
284             (?
285             (?
286             ( [oO] e )
287             (?=[\wß\.]) # ö not at the end of words
288             (?! [uy])
289             (?!ffi[^gn]) # Koeffizent != Höffige, Schöffin, ...effekt
290             (?!ffek) # ..effekt
291             (?!rot) # örot
292             (?!le[cm]) # element
293             (?!rgo) # ergometer
294             (?!mpf) # empfang
295             (?!ia) # typical for latin words e.g. pharmacopoeia
296             (?!last) # elastic
297             (?![fv]sk[iy]) # Dostoevsky e.g.
298             (?! c$vocal) # economic, ...
299 187986         644774 /$mutation{$1}/egx;
300            
301 3135         61850 s/($town_with_o)ör/$1oer/g;
302             }
303            
304 9992 100       81529 if (/[Uu]e/) {
305             # ue => ü, but take care for 'eue','äue', 'aue', 'que'
306 5371         767749 s/(?:(?
307             (?<=nde) |
308             (?<=ga) | # Jogaübung
309             (?<=era) | # kameraüberwachte
310             (?<=ve) | # Reserveübung
311             (?<=deo) | # videoüber...
312             (?<=ldo) | # Saldoüber...
313             (?<=(?
314             (?<=$vocal ne)| # Routineüberprüfung
315             (?<=[Vv]orne) # vorneüber
316             )
317             (?
318             (?
319             (?
320             ( [uU] e )
321             (?= [\wß\-]) # no ü at the end of a word
322             (?! [iy]) # Zueilende - Ü-...
323             (?! llst\w) # Spirituellste
324             (?! nce) # influence e.g.
325             (?! ntia)
326             (?! s?day) # English days
327             (?! some) # ...
328 450994         3069276 /$mutation{$1}/egx;
329            
330 5371         108066 s/(?<=[Zz])ue(?=g | n[dfgs] | c[hk] | be[lr] | rn[^t] | ri?ch | bl)/ü/gx;
331 5371         70356 s/(?<=z)ue(?=rnte?[mnrs]?t?\b)/ü/g;
332 5371         94058 s/(?<=\b[Aa]bz)ü(?=rnt)/ue/g; # Abzuerntende
333 5371         57473 s/vün\b/vuen/g;
334 5371         91165 s/(?<=ga)ü(?=r(in)?)\b/ue/g; # ...gauer like Argauer, Thurgauer, ...
335            
336 6     6   35 {no warnings;
  6         12  
  6         14676  
  5371         4386  
337 5371         377102 s/((?:${prefix}|en)s)?(([tT])ün(de?|\b))(?!chen|lein|lich)
338 6208 100       228595 /$1 ? "$1$2" : "$3uen$4"/xgeo;# Großtuende, but abstünde, Stündchen
339             }
340             s/($prefix s? t)ü(r(ische?[mnrs]?|
341 5371         183592 i?[ns](nen)?)?\b)/$1ue$2/gx;
342 5371 50       303327 s/($prefix t)ü(?=s?t\b|risch)/$1 ? "$1ue" : "$1ü"/gxe; # zurücktuest, großtuerisch
  1052         31207  
343 5371         37640 s/grünz/gruenz/g;
344 5371         167601 s/(?
345 5371         35393 s/zü(?!rich)([rs][befhioszö])/zue$1/g; # Zuerzählende != züricherisch
346            
347 5371         329743 s/([uU] e) (?=bt)/$mutation{$1}/egx; # Übte
  327         8589  
348 5371         92954 s/(?<=[Dd])ü(?=ll)/ue/g; # Duell
349 5371         47304 s/eürt/euert/g; # geneuert
350 5371         56922 s/reü(?=[nv]|s?t)/reue/g; # reuen
351            
352 5371         61726 s/
353             ([Au]ssen|
354             [Dd]oppel|
355             [Dd]reh|
356             [Ee]ingangs|
357             [Ee]ntree|
358             [Ee]tagen|
359             [Ff]all|
360             [Gg]eheim|
361             [Hh]aus|
362             [Hh]inter|
363             [Kk]eller|
364             [Kk]irchen|
365             [Kk]orridor|
366             [Nn]ot|
367             [Oo]fen|
368             [Pp]endel|
369             [Ss]aal|
370             (?:[Ss]ch(?:iebe|
371             rank|
372             wing))|
373             [Ss]eiten|
374             [Tt]apeten|
375             [Vv]erbindungs|
376             [Vv]order|
377             [Ww]agen|
378             [Ww]ohnungs|
379             [Zz]wischen) tuer (?!isch)/$1tür/gx;
380              
381 5371         112103 s/(?<=[a-zäöüß])ü(?=[A-ZÄÖÜ])/ue/g; # e.g. "IssueType"
382             }
383            
384 9992 100       22833 if (/ss/) {
385             # russ => ruß
386 4160         184785 s/(?<=(?
387             ss
388             (?! el) (?! le) # Brüssel, Brüssler
389             (?! isch) # Russisch
390             (?! land) # Rußland
391             (?! tau)
392             (?! [oy])
393             (?! ia)
394             /ß/gx;
395            
396             # ss => ß with many exceptions
397 4160         584906 s/(?<= $letter{2})
398             (?
399             (?
400             (?
401             (?
402             (?
403             (?
404             (?
405             (?
406             (?
407             (?
408             (?
409             (?
410             (?
411             (?
412             (?
413             (?
414             (?
415             (?
416             (?
417             (?
418             (?
419             (?
420              
421             ss
422              
423             (?! ch )
424             (?! isch ) # genössisch
425             (?! t[äöo])
426             (?! tr[ao]) # Davisstraße, but Schweißtreibende, ...-stroh
427             (?! treif)
428             (?! tur) # Eissturm, but Schweißtuch
429             (?! tü(?:ck|[hr])) # Beweisstück, Bischofsstühle, Kursstürze, but Schweißtücher
430             (?! tau?[bd]) # Preisstabilität, ...-stadt
431             (?! ist) # Diätassistentin
432             (?! te[pu]) # ...steppe, ...steuern
433             (?! eins?\b) # ...-sein
434             (?! eit)
435             (?! ett)
436             (?! i[vl]) # Massiv, Fossil
437             (?! l?ich) # grässlich ...sicherung
438             (?! äge) # Kreissäge
439             (?! ä[tu]) # Siegessäule, Tagessätze
440             (?! ier) # Kürassier
441             (?! ag) # Massage, lossagen
442             (?! ard) # Bussard
443             (?! p [äöüi]) # Käs-spätzle, # ...-spitze
444             (?! pr[eäai]) # losspräche, sprechen, sprach
445             (?! [oy])
446             (?! eh) # ...-seh, setzen
447             (?! itz) # ...-sitz
448             (?! ist)
449             (?! ees?\b) # ... -see
450             (?! aise) # foreign words don't have an ß
451             (?! age)
452             (?! agte) # ...-sagte
453             (?! upp) # ...-suppe
454             (?! anc) # Renaissance
455             (?! egn) # ...-segne
456             (?! eur) # Connosseur or so
457             /ß/gxo;
458            
459 4160         88295 s/(?<= [AaEe]u) # draußen
460             ss
461             (?! [äöü])
462             (?! e[ehg]) # Chaussee, ...seh
463             (?=\b|e|l)
464             /ß/gxo; # scheußlich
465              
466 4160         104086 s/((?<=[fs][äöüÄÖÜ]) |
467             (?<=[Ss]p[aä])
468             ) # ends on long vocal plus ss, like
469             ss # Gefäß != Schluss
470             (?! [äöü])
471             (?! er) # Gefäße != Fässer
472             (?! iv)
473             (?=\b|e|$consonant) # end of word or plural or new composite (Gefäßverschluss)
474             /ß/gxo;
475            
476 4160         67096 s/(?<=verg[äa])ss(?=e|\b)/ß/g; # vergäße
477              
478 4160         185317 s/(?
479             (?
480             (?
481             ((?<=o) |(?<=ie)) # Floß, groß, Grießbrei, Nuß, but no Ross-Schlächter
482             ss
483             (?! ch)
484             (?! t? [äöü])
485             (?! teu)
486             (?! pr[äeai]) # losspräche
487             (?=\b|es|$consonant)
488             /ß/gxo;
489 4160         47008 s/(äu|(?
490            
491 4160         66277 s/(?<=[bBeEnN][Ss]a)ss(?=\b|en)/ß/g; # absaß, beisammensaßen
492 4160         66115 s/($prefix)sass/$1saß/g;
493              
494 4160         130517 s/(?:(?<=[mM][ai])|(?<=[Ss]ü)|(?<=[Ss]tö)|(?<=[Ww]ei))ss(?=ge|lich)/ß/go;
495            
496 4160         70561 s/(?<=[Gg]ro) ss (?=t|$vocal) (?!ist)/ß/gx; # großtäte, groß-o...
497 4160         62977 s/(?<=[Ss]pa) ss (?!ion) (?!age) (?!iv)/ß/gx; # spaßig, but not Matthäuspassion
498              
499            
500 4160 100       15135 if (/ß/) {
501 3656         71136 s/(?<=[mM][uü])ß(?=te|en|er)/ss/go;
502 3656 100       177503 s/($prefix|en)?([Ss]a)ß([ea])/$1 ? "$1$2ß$3" : "$2ss$3"/goe;
  760         17432  
503             # Gefängnisinsasse, Sassafra != aufsaßen, beisammensaßen
504              
505 3656         55141 s/(?<=[rR] [aö]) (?
506            
507 3656         80521 s/(?<=(?
508             (?
509             (?
510             (?
511             [Rr]u
512             )
513             ß
514             (?=[ei](?![sg])(?>nnen|n|)(\b|\S{5,}))
515             /ss/gxo; # Russe, Russin, != Pruße, != Gruß, != Berußen, != Entrußen, != Rußes, != Rußige
516 3656         34887 s/Rußki/Russki/g;
517            
518             #s/(?<=[rb])ß(?=[tpy])/ss/g;
519 3656         58390 s/(?<=$consonant)ß(?=$consonant|y)/ss/g;
520 3656         52534 s/(?<=[^i]e)ß(?=en)/ss/g;
521 3656         50349 s/(?<=[Aa]u)ß(?=end(?!i)|etz)/ss/g;
522 3656         37830 s/(?
523 3656         48653 s/(?<=[gG]lo)ß/ss/g;
524 3656         48555 s/(?<=sa)ß(?=in)/ss/g;
525 3656         62166 s/(?<=\b[Mm][aou])
526             ß
527             (?!et) # maßet
528             (?=$vocal$consonant|[ae][iy]|eu)
529             /ss/gx; # Massai, Massaker, Massel, Mossul, Musselin
530 3656         50317 s/Maße/Masse/g;
531 3656         52668 s/maß(?=el|ak|ig)/mass/g;
532 3656         51366 s/\bmaß(?=en\w)/mass/g;
533 3656         29153 s/(ten)maß/$1mass/g;
534 3656         55742 s/((?:\b|$prefix)flo)ß/$1ss/g;
535             }
536            
537 4160 100       72259 s/($prefix)?scho(ss|ß)/$1 ? "$1schoss" : "schoß"/ge;
  5244         53203  
538             }
539              
540             # symbols
541 9992         63614 s/\(R\)/®/g;
542 9992         61091 s/\(C\)/©/g;
543              
544             # special characters
545 9992         23332 s/<<(\D*?)>>/«$1»/g; # if there are numbers between,
546 9992         23087 s/>>(\D*?)<
547              
548             # foreign words
549 9992         43493 s/cademie/cadémie/g;
550 9992         40147 s/rancais/rançais/g;
551 9992         65751 s/leen/léen/g;
552 9992         41613 s/grement/grément/g;
553 9992         42306 s/lencon/lençon/g;
554 9992         29397 s/Ancien Regime/Ancien Régime/g;
555 9992         60611 s/Andre(?=s?\b)/André/g;
556 9992         41983 s/Apercu/Aperçu/g;
557 9992         67999 s/([aA])pres/$1près/g;
558 9992         44885 s/Apero/Apéro/g;
559 9992         41037 s/Aragon/Aragón/g;
560 9992         51385 s/\bdeco\b/déco/g;
561 9992         54332 s/socie(?=\b|s)/socié/g;
562 9992         38005 s/([aA])suncion/$1sunción/g;
563 9992         48893 s/([aA])ttache/$1ttaché/g;
564 9992         45783 s/Balpare/Balparé/g;
565 9992         38857 s/Bartok/Bartók/g;
566 9992         31169 s/Baumegrad/Baumégrad/g;
567 9992         51870 s/Beaute/Beauté/g;
568 9992         45222 s/Epoque/Époque/g;
569 9992         33811 s/Björnson/Bjørnson/g;
570 9992         36694 s/Bogota/Bogotá/g;
571 9992         37859 s/Bokmal/Bokmål/g;
572 9992         46988 s/Boucle/Bouclé/g;
573 9992         63418 s/rree/rrée/g;
574 9992         43705 s/Bruyere/Bruyère/g;
575 9992         61866 s/Bebe/Bébé/g;
576 9992         37730 s/echamel/échamel/g;
577 9992         51264 s/Beret/Béret/g;
578 9992         78157 s/([cC])afe/$1afé/g;
579 9992         63307 s/([cC])reme/$1rème/g;
580 9992         39980 s/alderon/alderón/g;
581 9992         47401 s/Camös/Camões/g;
582 9992         53114 s/anape/anapé/g;
583 9992         37237 s/Canoßa/Canossa/g;
584 9992         43996 s/celebre/célèbre/g;
585 9992         39275 s/tesimo/tésimo/g;
586 9992         46726 s/eparee/éparée/g;
587 9992         46993 s/Elysee/Élysée/g;
588 9992         47711 s/onniere/onnière/g;
589 9992         50198 s/Charite/Charité/g;
590 9992         65786 s/inee/inée/g;
591 9992         42473 s/hicoree/hicorée/g;
592 9992         36954 s/Chateau/Château/g;
593 9992         36381 s/Cigany/Cigány/g;
594 9992         29991 s/Cinecitta/Cinecittà/g;
595 9992         49332 s/Cliche/Cliché/g;
596 9992         37084 s/Cloisonne/Cloisonné/g;
597 9992         44416 s/Cloque/Cloqué/g;
598 9992         39226 s/dell\'Arte/dell´Arte/g;
599 9992         32738 s/Communique/Communiqué/g;
600 9992         38800 s/Consomme/Consommé/g;
601 9992         28580 s/d\'Ampezzo/d´Ampezzo/g;
602 9992         38127 s/d\'Etat/d´Etat/g;
603 9992         51141 s/Coupe/Coupé/g;
604 9992         38648 s/Cox\'Z/Cox´/g;
605 9992         37312 s/Craquele/Craquelé/g;
606 9992         58047 s/roise/roisé/g;
607 9992         16170 s/(?
608             (?
609             iere\b
610             /ière/g;
611              
612 9992         62921 s/([cC])reme/$1rème/g;
613 9992         46680 s/fraiche/fraîche/g;
614 9992         52201 s/Crepe/Crêpe/g;
615 9992         41492 s/Csikos/Csikós/g;
616 9992         37917 s/Csardas/Csárdás/g;
617 9992         67230 s/Cure/Curé/g;
618 9992         40605 s/Cadiz/Cádiz/g;
619 9992         34256 s/Centimo/Céntimo/g;
620 9992         41935 s/Cezanne/Cézanne/g;
621 9992         32468 s/Cordoba/Córdoba/g;
622              
623 9992         39851 s/Dauphine/Dauphiné/g;
624 9992         37845 s/Dekollete/Dekolleté/g;
625 9992         54422 s/ieces/ièces/g;
626 9992         29000 s/trochäuß/trochäuss/g;
627 9992         53017 s/Drape/Drapé/g;
628 9992         68277 s/müß(?=[et])/müss/g;
629 9992         36898 s/Dvorak/Dvorák/g;
630 9992         66218 s/([dD])eja/$1éjà/g;
631 9992         41779 s/habille/habillé/g;
632 9992         46505 s/Detente/Détente/g;
633              
634 9992         52348 s/Ekarte/Ekarté/g;
635 9992         34255 s/El Nino/El Niño/g;
636 9992         43856 s/Epingle/Epinglé/g;
637 9992         47796 s/Expose/Exposé/g;
638 9992         57065 s/Faure/Fauré/g;
639 9992         48626 s/Filler/Fillér/g;
640 9992         45834 s/Siecle/Siècle/g;
641 9992         49815 s/lößel/lössel/g;
642 9992         43923 s/Bergere/Bergère/g;
643 9992         47884 s/Fouche/Fouché/g;
644 9992         45109 s/Fouque/Fouqué/g;
645 9992         36102 s/elementaire/élémentaire/g;
646 9992         49703 s/ternite(s?)\b/ternité$1/g;
647 9992         56275 s/risee/risée/g;
648 9992         67095 s/roi(ß|ss)e/roissé/g;
649 9992         51005 s/\bFrotte(?=\b|s\b)/Frotté/g;
650 9992         61863 s/Fume/Fumé/g;
651 9992         46851 s/([Gg])arcon/$1arçon/g;
652 9992         48872 s/([Gg])efäss/$1efäß/g;
653 9992         41518 s/Gemechte/Gemèchte/g;
654 9992         46477 s/Geneve/Genève/g;
655 9992         53390 s/Glace/Glacé/g;
656 9992         37102 s/Godemiche/Godemiché/g;
657 9992         34129 s/Godthab/Godthåb/g;
658 9992         72025 s/(?<=[Gg])ö(?=th)/oe/g;
659 9992         62667 s/lame(?=\b|s)/lamé/g;
660 9992         58274 s/uyere/uyère/g;
661 9992         57917 s/Grege/Grège/g;
662 9992         42376 s/Gulyas/Gulyás/g;
663 9992         46911 s/abitue/abitué/g;
664 9992         55622 s/Haler/Halér/g;
665 9992         44440 s/ornuss/ornuß/g;
666 9992         34679 s/Horvath/Horváth/g;
667 9992         37404 s/Hottehue/Hottehü/g;
668 9992         44607 s/Hacek/Hácek/g;
669 9992         35214 s/matozön/matozoen/g;
670 9992         46944 s/chlosse(?![rsn])/chloße/g;
671 9992         53131 s/doree/dorée/g;
672 9992         46697 s/Jerome/Jérôme/g;
673 9992         34220 s/Kodaly/Kodály/g;
674 9992         32524 s/örzitiv/oerzitiv/g;
675             #s/nique/niqué/g;
676 9992         39921 s/Kalman/Kálmán/g;
677 9992         52433 s/iberte/iberté/g;
678 9992         44676 s/Egalite/Égalité/g;
679 9992         55564 s/Linne/Linné/g;
680 9992         56799 s/([fF])asss/$1aßs/g;
681 9992         61042 s/Lome/Lomé/g;
682 9992         48904 s/Makore/Makoré/g;
683 9992         40001 s/Mallarme/Mallarmé/g;
684 9992         62822 s/aree/arée/g;
685 9992         51687 s/Maitre/Maître/g;
686 9992         81478 s/([Mm]$vocal)liere\b/$1lière/g;
687 9992         44464 s/Mouline/Mouliné/g;
688 9992         38874 s/Mousterien/Moustérien/g;
689 9992         36538 s/Malaga/Málaga/g;
690 9992         56041 s/Meche/Mèche/g;
691 9992         46045 s/erimee/érimée/g;
692 9992         49967 s/eglige/egligé/g;
693 9992         57495 s/eaute/eauté/g;
694 9992         41457 s/egritude/égritude/g;
695 9992         47848 s/anache/anaché/g;
696 9992         35889 s/Pappmache/Pappmaché/g;
697 9992         37802 s/Parana/Paraná/g;
698 9992         32475 s/Pathetique/Pathétique/g;
699 9992         51671 s/Merite/Mérite/g;
700 9992         51132 s/([Pp])reuss/$1reuß/g;
701 9992         55738 s/otege/otegé/g;
702 9992         53221 s/recis/récis/g;
703 9992         30485 s/Pürilität/Puerilität/g;
704 9992         48381 s/Ratine/Ratiné/g;
705 9992         60060 s/Raye/Rayé/g;
706 9992         39098 s/Renforce/Renforcé/g;
707 9992         64191 s/Rene/René/g;
708 9992         51408 s/Revü/Revue/g;
709 9992         34569 s/Riksmal/Riksmål/g;
710 9992         38387 s/xupery/xupéry/g;
711 9992         73868 s/S(?:ä|ae)ns/Saëns/g;
712 9992         65809 s/Jose(?=s?\b)/José/g;
713 9992         44146 s/bernaise/bérnaise/g;
714 9992         31421 s/Sassnitz/Saßnitz/g;
715 9992         54953 s/Saone/Saône/g;
716 9992         35484 s/Schöntür/Schöntuer/g; # more probable
717 9992         32345 s/chößling/chössling/g;
718 9992         48244 s/Senor/Señor/g;
719 9992         53815 s/Skues/Sküs/g;
720 9992         40378 s/Souffle(?=s|\b)/Soufflé/g;
721 9992         47366 s/Spass/Spaß/g;
722 9992         60013 s/(?<=[Cc])oupe/oupé/g;
723 9992         51535 s/Stäl\b/Staël/g;
724 9992         40778 s/Suarez/Suárez/g;
725 9992         61359 s/Sao\b/São/g;
726 9992         61034 s/Tome(?=s|\b)/Tomé/g;
727 9992         48275 s/Seance/Séance/g;
728 9992         44887 s/Serac/Sérac/g;
729 9992         49498 s/Sevres/Sévres/g;
730 9992         33129 s/Stassfurt/Staßfurt/g;
731 9992         2143150 s/(?<=Troms)(ö|oe)/ø/g;
732 9992         42067 s/Trouvere/Trouvère/g;
733 9992         52199 s/Tönder/Tønder/g;
734 9992         52608 s/ariete/arieté/g;
735 9992         43435 s/Welline/Welliné/g;
736 9992         36762 s/Yucatan/Yucatán/g;
737 9992         92723 s/((?
738 9992         252974 s/((?
739 9992         105268 s/((?
740 9992         64063 s/(\A|\W)ässe/$1äße/g;
741 9992         88105 s/($prefix) (?
742             (?
743             flöß(e(n?|s?t))\b
744             /$1flöss$2/gx; # exception of rule
745 9992         66763 s/(${prefix}|\b)schöße/$1schösse/go; # also an exception
746 6     6   32 {no warnings; s/($prefix)?spröße/$1sprösse/go;}
  6         6  
  6         12237  
  9992         8399  
  9992         54595  
747 9992         70564 s/($prefix)dröße/$1drösse/g;
748 9992         82848 s/\bass(?=\b|en\b)/aß/go; # aß
749 9992         28660 s/\^2/²/go;
750 9992         29020 s/\^3/³/go;
751 9992         40155 s/gemecht/gemècht/go;
752 9992         84650 s/(?<=[Hh])ue\b/ü/g;
753 9992         47909 s/aßelbe/asselbe/g;
754 9992         40259 s/linnesch/linnésch/g;
755 9992         79483 s/(?<=\b[Mm]u)ss(?=t?\b)/ß/g;
756 9992         58612 s/mech(?=e|s?t)/mèch/g;
757 9992         38795 s/metallise/métallisé/g;
758 9992         63219 s/(?
759 9992         507195 s/(?<=\b[Oo]l)e\b/é/g;
760 9992         69310 s/peu(\W+)a(\W+)peu/peu$1à$2peu/g;
761 9992         36055 s/reussisch/reußisch/g;
762 9992         38669 s/sans gene\b/sans gêne/g;
763 9992         78749 s/(?<=\b[Ss]a)ss(?=(en|es?t)\b)/ß/g;
764 9992         53458 s/\bskal\b/skål/g;
765 9992         83335 s/(?<=\bst)ue(?=nde)/ü/g;
766 9992         78018 s/(?<=[Tt]sch)ue(?=s)/ü/g;
767 9992         37611 s/([Tt])ete-a-([Tt])ete/$1ête-à-$2ête/g;
768 9992         44227 s/voila/voilà/g;
769 9992         31317 s/Alandinseln/Ålandinseln/g;
770 9992         32302 s/Angström/Ångström/g;
771 9992         45327 s/Egalite/Égalité/g;
772 9992         61320 s/(?<=[Ll]and)buße/busse/g;
773 9992         119153 s/\b(?
774 9992         31573 s/(?
775 9992         58551 s/(?<=[Bb]ai)ß(?=e)/ss/g;
776 9992         57338 s/(?<=[Hh]au)ß(?=e)/ss/g;
777 9992         64607 s/\bue\./ü./g;
778 9992         30862 s/überfloß/überfloss/g;
779 9992         62091 s/\bloß(?!\w)/loss/g;
780 9992         50646 s/Ächm/Aechm/g; # e.g. Aechmea
781 9992         113071 s/(?<=[Aa]n)ä(?=ro)/ae/g;
782 9992         51002 s/präter/praeter/g;
783 9992         37157 s/Anaphorae/Anaphorä/g;
784 9992         44169 s/Bädeker/Baedeker/g;
785 9992         37034 s/Aspiratae/Aspiratä/g;
786 9992         47191 s/hamär(?=(?:[sn]|in|innen)?\b)/hamaer/g; # Bahamer, Bahamerin and similar
787 9992         114910 s/(?<=[Pp])ä(?=se)/ae/g; # Bel Paese
788 9992         43180 s/Cälius/Caelius/g;
789 9992         67553 s/(?<=Famul)ae\b/ä/g;
790 9992         115038 s/(?<=F)ä(?=ce)/ae/g; # Faeces
791 9992         65389 s/((Gan)?[Gg])raen/$1rän/g;
792 9992         114580 s/(?<=[gG]r)ä(?=c(?:um|as))/ae/g;
793 9992         42086 s/Häckel/Haeckel/g;
794 9992         42934 s/Intimae/Intimä/g;
795 9992         47598 s/Kannae/Kannä/g;
796 9992         32458 s/Klavikulae/Klavikulä/g;
797 9992         38100 s/Kolossae/Kolossä/g;
798 9992         29698 s/Konjunktivae/Konjunktivä/g;
799 9992         51734 s/Lärtes/Laertes/g;
800 9992         53527 s/ariae\b/ariä/g;
801 9992         58334 s/\bMäst(?![eu])/Maest/g;
802 9992         39892 s/räcox/raecox/g;
803 9992         44290 s/ichäl/ichael/g;
804 9992         66899 s/(?<=[Ss])ae(?=nger)/ä/g;
805 9992         114303 s/(?<=[Pp])ä(?=lla)/ae/g;
806 9992         54126 s/Phät/Phaet/g;
807 9992         56186 s/(?<=\b[Rr]a) # Raphael, Raffael ...
808             (ff?|ph)äl/$1ael/gx; # != Niagarafällen
809 9992         72400 s/($prefix)saesse/$1säße/g;
810 9992         150526 s/(?
811 9992         30833 s/Täkwondo/Taekwondo/g;
812 9992         43827 s/mondaen/mondän/g;
813 9992         42692 s/o\.ae\./o.ä./g;
814 9992         63337 s/Alö/Aloe/g;
815 9992         49540 s/Apnö/Apnoe/g;
816 9992         46924 s/Böing/Boeing/g;
817 9992         60067 s/öc\./oec./g;
818 9992         52954 s/Herö/Heroe/g;
819 9992         61964 s/Hök\b/Hoek/g;
820 9992         69506 s/zön\b/zoen/g;
821 9992         42829 s/obszoen/obszön/g;
822 9992         40586 s/Itzehö/Itzehoe/g;
823 9992         65647 s/Jöl/Joel/g;
824 9992         69583 s/(?<=[Kk])ö(?=du|x)/oe/g; # Koedukation, ...
825 9992         61175 s/Obö/Oboe/g;
826 9992         66142 s/(?<=i)oe(?=se?[mnr]?)/ö/g;
827 9992         71521 s/(?<=\b[Pp])ö(?=bene|[mt]|sie)(?!tt)/oe/g;
828 9992         90595 s/($prefix)pö(?=bene|[mt]|sie)(?!tt)/$1poe/g;
829 9992         64874 s/Prö(?=[^bps])/Proe/g;
830 9992         42696 s/stroeme/ströme/g;
831 9992         43310 s/Crusö/Crusoe/g;
832 9992         32982 s/Zö(?!\w)/Zoe/g;
833 9992         56334 s/söben/soeben/g;
834 9992         42961 s/Airbuße/Airbusse/g;
835 9992         47187 s/pioßes/piosses/g;
836 9992         32055 s/Cottbuß/Cottbuss/g;
837 9992         38564 s/Globuß/Globuss/g;
838 9992         42291 s/Beisaße/Beisasse/g;
839 9992         33923 s/Borußia/Borussia/g;
840 9992         49696 s/Braß/Brass/g;
841 9992         42187 s/Caißa/Caissa/g;
842 9992         75920 s/(?<=c$vocal)ß(?=$vocal)/ss/g;
843 9992         57257 s/(?<=[Bb]u)ß(?=erl)/ss/g;
844 9992         41911 s/(Cr?a)ß(?=ata|i|us)/$1ss/g;
845 9992         58135 s/(?<=[CZ]erberu)ß/ss/g;
846 9992         34584 s/Croißant/Croissant/g;
847 9992         37832 s/Digloßie/Diglossie/g;
848 9992         59899 s/(?<=\b[Ee]i)ß(?=\w)/ss/g;
849 9992         42114 s/Elsaß/Elsass/g;
850 9992         30858 s/ßé/ssé/g;
851 9992         46880 s/rimaße/rimasse/g;
852 9992         48449 s/oloß/oloss/g;
853 9992         57789 s/(?<=[Ll]ai)ß/ss/g; # Laissez-faire
854 9992         38316 s/aßachu/assachu/g;
855 9992         63086 s/fuß(?=l[ei])/fuss/g;
856 9992         40851 s/großo/grosso/g;
857 9992         52939 s/ktül/ktuel/g;
858 9992         106220 s/(?<=nn)ü(?=lle)/ue/g;
859 9992         105353 s/(?<=[gj])ü(?=z\b)/ue/g;
860 9992         59522 s/BDUe/BDÜ/g;
861 9992         69062 s/nün\b/nuen/g;
862 9992         47787 s/gü(?=(tt|rr)[ei])/gue/g;
863 9992         110032 s/(?<=\b[Bb]l)ü(?=(?!\w)|[bfgjp]|movie|stock|chip)/ue/g; # Blue- [cjb...] is untypical for german, blümen but is
864 9992         81214 s/(?<=[Mm]en)ue/ü/g;
865 9992         48869 s/Bünos/Buenos/g;
866 9992         45725 s/Dengü/Dengue/g;
867 9992         42551 s/nündo(?=\b|s)/nuendo/g;
868 9992         111248 s/(?<=b)ü(?=nt([ei]n(nen)?)?\b)/ue/g;
869 9992         42083 s/Dünja/Duenja/g;
870 9992         68140 s/(?<=[Dd])ütt/uett/g;
871 9992         45365 s/manül/manuel/g;
872 9992         102951 s/(?<=[Ff]ond)ü/ue/g;
873 9992         61355 s/Fürte/Fuerte/g;
874 9992         42258 s/Güricke/Guericke/g;
875 9992         103172 s/(?<=[Gg])ü(?=rill)/ue/g;
876 9992         35647 s/Gürnica/Guernica/g;
877 9992         104204 s/(?<=[vs]id)ü(?=n)/ue/g;
878 9992         43382 s/flünz/fluenz/g;
879 9992         41857 s/ongrün/ongruen/g;
880 9992         63394 s/tünte/tuente/g;
881 9992         56455 s/tülle/tuelle/g;
882 9992 100       66136 s/([\wäöüÄÖÜß]+t)üll/$1 eq lc($1) ? "$1uell" : "$1üll"/gex; #eventuell != Häkeltüll
  140         1592  
883 9992         35790 s/Eventüll/Eventuell/g;
884 9992         43910 s/Langü/Langue/g;
885 9992         45020 s/Manül/Manuel/g;
886 9992         43210 s/Migül/Miguel/g;
887 9992         46467 s/enütt/enuett/g;
888 9992         52866 s/gürite/guerite/g;
889 9992         45952 s/inünd/inuend/g;
890 9992         103442 s/(?<=[Gg])ü(?=st)/ue/g;
891 9992         102724 s/(?<=[Pp])ü(?=blo)/ue/g;
892 9992         104120 s/(?<=[Pp])ü(?=rto)/ue/g;
893 9992         67515 s/Reü(?=[nv])/Reue/g;
894 9992         43469 s/Samül/Samuel/g;
895 9992         60954 s/Süve/Sueve/g;
896 9992         61399 s/Süz/Suez/g;
897 9992         106167 s/(?<=[Tt])ü(?=rei)/ue/g;
898 9992         42568 s/Ürdingen/Uerdingen/g;
899 9992         54564 s/Ücker/Uecker/g;
900 9992         51793 s/süll/suell/g;
901 9992         43135 s/nnüll/nnuell/g;
902 9992         118232 s/(?
903 9992         34896 s/\beinzüng/einzueng/g;
904 9992         54749 s/\btü(?=s?t\b)/tue/g;
905 9992         52884 s/Zeiß/Zeiss/g; # I'm coming from Jena, Zeiss' hometown and that
906             # really looks better :-)
907 9992         57486 s/(?<=airma)ß/ss/g;
908 9992         50293 s/Däda/Daeda/g;
909 9992         53826 s/Büna/Buena/g;
910 9992         67191 s/(?<=can)ö/oe/g; # english for "Kanu"
911 9992         45907 s/(canv|carc)aß/$1ass/g; # english for "prüfend", ...
912 9992         33271 s/Caßandra/Cassandra/g;
913 9992         57433 s/Citr(oe|ö)n/Citroën/g;
914 9992         47169 s/\bdämon\b/daemon/g; # lowercase is wrong German (but not for "dämonenhaft"), thus it must be the english version
915 9992         4086319 s/([A-ZÄÖÜ]*)(Ae|Oe|Ue)\b/$1$mutation{$2}/g; # must be an abbreviation ending on Ä,Ö,Ü
916 9992         62459 s/joß/joss/g;
917 9992         43254 s/Sußex/Sussex/g;
918 9992         68581 s/(?
919 9992         45926 s/Malmoe/Malmö/g;
920 9992         72547 s/(fl|tr?)ünt\b/$1uent/g;
921 9992         67935 s/güse/guese/g;
922 9992         69805 s/(?<=[sh])ö(?=ver)/oe/g; # whomsever, whoever
923 9992         40284 s/potatös/potatoes/g;
924 9992         111762 s/(?<=\b[fd])ü(?=[lt]\b)/ue/g; # fuel, duel, duet, ...
925 9992         33341 s/Dreyfuß/Dreyfuss/g;
926 9992         115191 s/(?<=[Gg])ä(?=lic)/ae/g;
927 9992         116902 s/(?<=[Mm])ä(?=stro)/ae/g;
928 9992         68737 s/(?<=\b[dg])ö(?=s(\b|n))/oe/g; # does, goes
929 9992         48355 s/minüt\b/minuet/g;
930 9992         57617 s/(?<=trespa)ß/ss/g;
931 9992         94371 s/N(oe|ö)l\b/Noël/g;
932 9992         57130 s/\bgüss\b/guess/g;
933 9992         43928 s/mutül/mutuel/g;
934 9992         65361 s/öil/oeil/g;
935 9992         42437 s/müzzi/muezzi/g;
936 9992         49073 s/pösy/poesy/g;
937 9992         66314 s/(?<=[Tt]omat)ö/oe/g;
938 9992         67561 s/(?<=B)ö(?=gehold)/oe/g;
939 9992         53724 return $_;
940             }
941              
942             1;
943             __END__