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   63809 use 5.006;
  6         48  
4 6     6   27 use strict;
  6         11  
  6         103  
5 6     6   24 use warnings;
  6         8  
  6         7725  
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.14';
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 4313492 my $text = shift;
125 215659 50       316216 return unless defined $text;
126 215659         1446126 $text =~ s/([\200-\377])/$ANSI_TO_ASCII_TRANSLITERATION{$1}/g;
127             #\octal => \200 = 128, \377 => 255
128 215659         466301 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 116568 local $_ = shift;
211 9992 50       25593 return unless defined;
212              
213 9992 100       152604 if (/[Aa]e/) {
214 5579         543045 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 5579         28397 s/(?<=[rtz])ae(?=n\b)/ä/g; # Eozän, Kapitän, Souverän
240            
241 5579         43669 s/phorae/phorä/g; # Epiphorä
242 5579         46115 s/kenae/kenä/g; # Mykenä
243 5579         45027 s/ovae\b/ovä/g;
244            
245 5579         123298 s/($town_with_a)är/$1aer/g;
246            
247 5579         75715 s/(?<=[mr])ä(?=ls?\b|li)/ae/g; # Mariä
248 5579         24049 s/(?<=\b[Pp]r)ae/ä/g; # Prä...
249 5579         18874 s/(?<=bd)ae(?=n)/ä/g; # Molybdän
250 5579         74974 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 5579         21711 s/\bAe(?!r[oiu])/Ä/gx; # Ae at beginning of a word, like Aerobic != Ära, Ären
265             }
266              
267 9992 100       151828 if (/[Oo]e/) {
268             # oe => ö
269 3110         203778 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 187806         792433 /$mutation{$1}/egx;
300            
301 3110         45895 s/($town_with_o)ör/$1oer/g;
302             }
303            
304 9992 100       78705 if (/[Uu]e/) {
305             # ue => ü, but take care for 'eue','äue', 'aue', 'que'
306 5371         1083259 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 451490         4310169 /$mutation{$1}/egx;
329            
330 5371         89157 s/(?<=[Zz])ue(?=g | n[dfgs] | c[hk] | be[lr] | rn[^t] | ri?ch | bl)/ü/gx;
331 5371         46677 s/(?<=z)ue(?=rnte?[mnrs]?t?\b)/ü/g;
332 5371         81642 s/(?<=\b[Aa]bz)ü(?=rnt)/ue/g; # Abzuerntende
333 5371         46112 s/vün\b/vuen/g;
334 5371         75169 s/(?<=ga)ü(?=r(in)?)\b/ue/g; # ...gauer like Argauer, Thurgauer, ...
335            
336 6     6   53 {no warnings;
  6         18  
  6         20211  
  5371         7737  
337 5371         399133 s/((?:${prefix}|en)s)?(([tT])ün(de?|\b))(?!chen|lein|lich)
338 6288 100       267361 /$1 ? "$1$2" : "$3uen$4"/xgeo;# Großtuende, but abstünde, Stündchen
339             }
340             s/($prefix s? t)ü(r(ische?[mnrs]?|
341 5371         186892 i?[ns](nen)?)?\b)/$1ue$2/gx;
342 5371 50       326629 s/($prefix t)ü(?=s?t\b|risch)/$1 ? "$1ue" : "$1ü"/gxe; # zurücktuest, großtuerisch
  1034         32696  
343 5371         22721 s/grünz/gruenz/g;
344 5371         190262 s/(?
345 5371         22213 s/zü(?!rich)([rs][befhioszö])/zue$1/g; # Zuerzählende != züricherisch
346            
347 5371         334439 s/([uU] e) (?=bt)/$mutation{$1}/egx; # Übte
  326         8786  
348 5371         77246 s/(?<=[Dd])ü(?=ll)/ue/g; # Duell
349 5371         40232 s/eürt/euert/g; # geneuert
350 5371         25701 s/reü(?=[nv]|s?t)/reue/g; # reuen
351            
352 5371         64408 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         98157 s/(?<=[a-zäöüß])ü(?=[A-ZÄÖÜ])/ue/g; # e.g. "IssueType"
382             }
383            
384 9992 100       30097 if (/ss/) {
385             # russ => ruß
386 4160         206223 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         689575 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         107806 s/(?<= [AaEe]u) # draußen
460             ss
461             (?! [äöü])
462             (?! e[ehg]) # Chaussee, ...seh
463             (?=\b|e|l)
464             /ß/gxo; # scheußlich
465              
466 4160         137852 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         77041 s/(?<=verg[äa])ss(?=e|\b)/ß/g; # vergäße
477              
478 4160         223637 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         57345 s/(äu|(?
490            
491 4160         77482 s/(?<=[bBeEnN][Ss]a)ss(?=\b|en)/ß/g; # absaß, beisammensaßen
492 4160         64536 s/($prefix)sass/$1saß/g;
493              
494 4160         187505 s/(?:(?<=[mM][ai])|(?<=[Ss]ü)|(?<=[Ss]tö)|(?<=[Ww]ei))ss(?=ge|lich)/ß/go;
495            
496 4160         81899 s/(?<=[Gg]ro) ss (?=t|$vocal) (?!ist)/ß/gx; # großtäte, groß-o...
497 4160         72051 s/(?<=[Ss]pa) ss (?!ion) (?!age) (?!iv)/ß/gx; # spaßig, but not Matthäuspassion
498              
499            
500 4160 100       12051 if (/ß/) {
501 3656         56250 s/(?<=[mM][uü])ß(?=te|en|er)/ss/go;
502 3656 100       188281 s/($prefix|en)?([Ss]a)ß([ea])/$1 ? "$1$2ß$3" : "$2ss$3"/goe;
  772         21536  
503             # Gefängnisinsasse, Sassafra != aufsaßen, beisammensaßen
504              
505 3656         37813 s/(?<=[rR] [aö]) (?
506            
507 3656         66314 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         31259 s/Rußki/Russki/g;
517            
518             #s/(?<=[rb])ß(?=[tpy])/ss/g;
519 3656         40953 s/(?<=$consonant)ß(?=$consonant|y)/ss/g;
520 3656         36416 s/(?<=[^i]e)ß(?=en)/ss/g;
521 3656         32710 s/(?<=[Aa]u)ß(?=end(?!i)|etz)/ss/g;
522 3656         21127 s/(?
523 3656         29993 s/(?<=[gG]lo)ß/ss/g;
524 3656         29426 s/(?<=sa)ß(?=in)/ss/g;
525 3656         46411 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         55373 s/Maße/Masse/g;
531 3656         17693 s/maß(?=el|ak|ig)/mass/g;
532 3656         13638 s/\bmaß(?=en\w)/mass/g;
533 3656         11921 s/(ten)maß/$1mass/g;
534 3656         29462 s/((?:\b|$prefix)flo)ß/$1ss/g;
535             }
536            
537 4160 100       55674 s/($prefix)?scho(ss|ß)/$1 ? "$1schoss" : "schoß"/ge;
  5224         59026  
538             }
539              
540             # symbols
541 9992         20977 s/\(R\)/®/g;
542 9992         16190 s/\(C\)/©/g;
543              
544             # special characters
545 9992         18291 s/<<(\D*?)>>/«$1»/g; # if there are numbers between,
546 9992         15705 s/>>(\D*?)<
547              
548             # foreign words
549 9992         61936 s/cademie/cadémie/g;
550 9992         55283 s/rancais/rançais/g;
551 9992         66138 s/leen/léen/g;
552 9992         48630 s/grement/grément/g;
553 9992         52946 s/lencon/lençon/g;
554 9992         49585 s/Ancien Regime/Ancien Régime/g;
555 9992         78250 s/Andre(?=s?\b)/André/g;
556 9992         36524 s/Apercu/Aperçu/g;
557 9992         66361 s/([aA])pres/$1près/g;
558 9992         24975 s/Apero/Apéro/g;
559 9992         51626 s/Aragon/Aragón/g;
560 9992         23201 s/\bdeco\b/déco/g;
561 9992         67074 s/socie(?=\b|s)/socié/g;
562 9992         48630 s/([aA])suncion/$1sunción/g;
563 9992         65743 s/([aA])ttache/$1ttaché/g;
564 9992         67615 s/Balpare/Balparé/g;
565 9992         26793 s/Bartok/Bartók/g;
566 9992         33984 s/Baumegrad/Baumégrad/g;
567 9992         67107 s/Beaute/Beauté/g;
568 9992         60732 s/Epoque/Époque/g;
569 9992         47303 s/Björnson/Bjørnson/g;
570 9992         33429 s/Bogota/Bogotá/g;
571 9992         37692 s/Bokmal/Bokmål/g;
572 9992         61152 s/Boucle/Bouclé/g;
573 9992         73491 s/rree/rrée/g;
574 9992         67223 s/Bruyere/Bruyère/g;
575 9992         72023 s/Bebe/Bébé/g;
576 9992         40789 s/echamel/échamel/g;
577 9992         50254 s/Beret/Béret/g;
578 9992         76000 s/([cC])afe/$1afé/g;
579 9992         71136 s/([cC])reme/$1rème/g;
580 9992         49718 s/alderon/alderón/g;
581 9992         53479 s/Camös/Camões/g;
582 9992         65981 s/anape/anapé/g;
583 9992         33583 s/Canoßa/Canossa/g;
584 9992         66310 s/celebre/célèbre/g;
585 9992         24102 s/tesimo/tésimo/g;
586 9992         63833 s/eparee/éparée/g;
587 9992         61238 s/Elysee/Élysée/g;
588 9992         70566 s/onniere/onnière/g;
589 9992         67730 s/Charite/Charité/g;
590 9992         74895 s/inee/inée/g;
591 9992         60802 s/hicoree/hicorée/g;
592 9992         37018 s/Chateau/Château/g;
593 9992         15133 s/Cigany/Cigány/g;
594 9992         32159 s/Cinecitta/Cinecittà/g;
595 9992         66382 s/Cliche/Cliché/g;
596 9992         61039 s/Cloisonne/Cloisonné/g;
597 9992         59212 s/Cloque/Cloqué/g;
598 9992         63874 s/dell\'Arte/dell´Arte/g;
599 9992         53942 s/Communique/Communiqué/g;
600 9992         58812 s/Consomme/Consommé/g;
601 9992         22640 s/d\'Ampezzo/d´Ampezzo/g;
602 9992         44109 s/d\'Etat/d´Etat/g;
603 9992         63808 s/Coupe/Coupé/g;
604 9992         17812 s/Cox\'Z/Cox´/g;
605 9992         56381 s/Craquele/Craquelé/g;
606 9992         71185 s/roise/roisé/g;
607 9992         31235 s/(?
608             (?
609             iere\b
610             /ière/g;
611              
612 9992         70696 s/([cC])reme/$1rème/g;
613 9992         64493 s/fraiche/fraîche/g;
614 9992         66346 s/Crepe/Crêpe/g;
615 9992         51986 s/Csikos/Csikós/g;
616 9992         49924 s/Csardas/Csárdás/g;
617 9992         79997 s/Cure/Curé/g;
618 9992         25663 s/Cadiz/Cádiz/g;
619 9992         22933 s/Centimo/Céntimo/g;
620 9992         63180 s/Cezanne/Cézanne/g;
621 9992         32667 s/Cordoba/Córdoba/g;
622              
623 9992         62612 s/Dauphine/Dauphiné/g;
624 9992         57345 s/Dekollete/Dekolleté/g;
625 9992         61934 s/ieces/ièces/g;
626 9992         20688 s/trochäuß/trochäuss/g;
627 9992         66548 s/Drape/Drapé/g;
628 9992         28837 s/müß(?=[et])/müss/g;
629 9992         26398 s/Dvorak/Dvorák/g;
630 9992         34636 s/([dD])eja/$1éjà/g;
631 9992         59017 s/habille/habillé/g;
632 9992         68496 s/Detente/Détente/g;
633              
634 9992         73013 s/Ekarte/Ekarté/g;
635 9992         23645 s/El Nino/El Niño/g;
636 9992         62740 s/Epingle/Epinglé/g;
637 9992         63884 s/Expose/Exposé/g;
638 9992         73948 s/Faure/Fauré/g;
639 9992         62029 s/Filler/Fillér/g;
640 9992         62777 s/Siecle/Siècle/g;
641 9992         41730 s/lößel/lössel/g;
642 9992         67992 s/Bergere/Bergère/g;
643 9992         63431 s/Fouche/Fouché/g;
644 9992         58460 s/Fouque/Fouqué/g;
645 9992         63866 s/elementaire/élémentaire/g;
646 9992         71951 s/ternite(s?)\b/ternité$1/g;
647 9992         66685 s/risee/risée/g;
648 9992         42631 s/roi(ß|ss)e/roissé/g;
649 9992         68139 s/\bFrotte(?=\b|s\b)/Frotté/g;
650 9992         70053 s/Fume/Fumé/g;
651 9992         52411 s/([Gg])arcon/$1arçon/g;
652 9992         55897 s/([Gg])efäss/$1efäß/g;
653 9992         60353 s/Gemechte/Gemèchte/g;
654 9992         61304 s/Geneve/Genève/g;
655 9992         64531 s/Glace/Glacé/g;
656 9992         55518 s/Godemiche/Godemiché/g;
657 9992         29096 s/Godthab/Godthåb/g;
658 9992         52872 s/(?<=[Gg])ö(?=th)/oe/g;
659 9992         70502 s/lame(?=\b|s)/lamé/g;
660 9992         75284 s/uyere/uyère/g;
661 9992         72308 s/Grege/Grège/g;
662 9992         52013 s/Gulyas/Gulyás/g;
663 9992         61909 s/abitue/abitué/g;
664 9992         63140 s/Haler/Halér/g;
665 9992         53159 s/ornuss/ornuß/g;
666 9992         39133 s/Horvath/Horváth/g;
667 9992         55476 s/Hottehue/Hottehü/g;
668 9992         27934 s/Hacek/Hácek/g;
669 9992         48434 s/matozön/matozoen/g;
670 9992         64529 s/chlosse(?![rsn])/chloße/g;
671 9992         67594 s/doree/dorée/g;
672 9992         64082 s/Jerome/Jérôme/g;
673 9992         15261 s/Kodaly/Kodály/g;
674 9992         18851 s/örzitiv/oerzitiv/g;
675             #s/nique/niqué/g;
676 9992         50358 s/Kalman/Kálmán/g;
677 9992         72185 s/iberte/iberté/g;
678 9992         62945 s/Egalite/Égalité/g;
679 9992         71692 s/Linne/Linné/g;
680 9992         57064 s/([fF])asss/$1aßs/g;
681 9992         68824 s/Lome/Lomé/g;
682 9992         69252 s/Makore/Makoré/g;
683 9992         59967 s/Mallarme/Mallarmé/g;
684 9992         69939 s/aree/arée/g;
685 9992         69066 s/Maitre/Maître/g;
686 9992         98464 s/([Mm]$vocal)liere\b/$1lière/g;
687 9992         69829 s/Mouline/Mouliné/g;
688 9992         55716 s/Mousterien/Moustérien/g;
689 9992         33857 s/Malaga/Málaga/g;
690 9992         70135 s/Meche/Mèche/g;
691 9992         62329 s/erimee/érimée/g;
692 9992         69557 s/eglige/egligé/g;
693 9992         72091 s/eaute/eauté/g;
694 9992         58621 s/egritude/égritude/g;
695 9992         64320 s/anache/anaché/g;
696 9992         54529 s/Pappmache/Pappmaché/g;
697 9992         33525 s/Parana/Paraná/g;
698 9992         50268 s/Pathetique/Pathétique/g;
699 9992         70662 s/Merite/Mérite/g;
700 9992         56886 s/([Pp])reuss/$1reuß/g;
701 9992         70058 s/otege/otegé/g;
702 9992         57755 s/recis/récis/g;
703 9992         43761 s/Pürilität/Puerilität/g;
704 9992         68123 s/Ratine/Ratiné/g;
705 9992         67708 s/Raye/Rayé/g;
706 9992         60639 s/Renforce/Renforcé/g;
707 9992         75009 s/Rene/René/g;
708 9992         32643 s/Revü/Revue/g;
709 9992         37072 s/Riksmal/Riksmål/g;
710 9992         16157 s/xupery/xupéry/g;
711 9992         60043 s/S(?:ä|ae)ns/Saëns/g;
712 9992         73640 s/Jose(?=s?\b)/José/g;
713 9992         65296 s/bernaise/bérnaise/g;
714 9992         25221 s/Sassnitz/Saßnitz/g;
715 9992         71001 s/Saone/Saône/g;
716 9992         48061 s/Schöntür/Schöntuer/g; # more probable
717 9992         38059 s/chößling/chössling/g;
718 9992         51848 s/Senor/Señor/g;
719 9992         60890 s/Skues/Sküs/g;
720 9992         57972 s/Souffle(?=s|\b)/Soufflé/g;
721 9992         56051 s/Spass/Spaß/g;
722 9992         67437 s/(?<=[Cc])oupe/oupé/g;
723 9992         38450 s/Stäl\b/Staël/g;
724 9992         24901 s/Suarez/Suárez/g;
725 9992         22710 s/Sao\b/São/g;
726 9992         68163 s/Tome(?=s|\b)/Tomé/g;
727 9992         64532 s/Seance/Séance/g;
728 9992         34630 s/Serac/Sérac/g;
729 9992         59492 s/Sevres/Sévres/g;
730 9992         43107 s/Stassfurt/Staßfurt/g;
731 9992         2212817 s/(?<=Troms)(ö|oe)/ø/g;
732 9992         69118 s/Trouvere/Trouvère/g;
733 9992         64764 s/Tönder/Tønder/g;
734 9992         70871 s/ariete/arieté/g;
735 9992         65841 s/Welline/Welliné/g;
736 9992         50296 s/Yucatan/Yucatán/g;
737 9992         98913 s/((?
738 9992         273642 s/((?
739 9992         116575 s/((?
740 9992         75328 s/(\A|\W)ässe/$1äße/g;
741 9992         107360 s/($prefix) (?
742             (?
743             flöß(e(n?|s?t))\b
744             /$1flöss$2/gx; # exception of rule
745 9992         85670 s/(${prefix}|\b)schöße/$1schösse/go; # also an exception
746 6     6   51 {no warnings; s/($prefix)?spröße/$1sprösse/go;}
  6         14  
  6         16634  
  9992         14621  
  9992         71446  
747 9992         86893 s/($prefix)dröße/$1drösse/g;
748 9992         71122 s/\bass(?=\b|en\b)/aß/go; # aß
749 9992         15914 s/\^2/²/go;
750 9992         15545 s/\^3/³/go;
751 9992         48067 s/gemecht/gemècht/go;
752 9992         57115 s/(?<=[Hh])ue\b/ü/g;
753 9992         63700 s/aßelbe/asselbe/g;
754 9992         49764 s/linnesch/linnésch/g;
755 9992         99659 s/(?<=\b[Mm]u)ss(?=t?\b)/ß/g;
756 9992         46657 s/mech(?=e|s?t)/mèch/g;
757 9992         58132 s/metallise/métallisé/g;
758 9992         47661 s/(?
759 9992         508118 s/(?<=\b[Oo]l)e\b/é/g;
760 9992         42262 s/peu(\W+)a(\W+)peu/peu$1à$2peu/g;
761 9992         47191 s/reussisch/reußisch/g;
762 9992         63490 s/sans gene\b/sans gêne/g;
763 9992         100270 s/(?<=\b[Ss]a)ss(?=(en|es?t)\b)/ß/g;
764 9992         40133 s/\bskal\b/skål/g;
765 9992         55118 s/(?<=\bst)ue(?=nde)/ü/g;
766 9992         50764 s/(?<=[Tt]sch)ue(?=s)/ü/g;
767 9992         16173 s/([Tt])ete-a-([Tt])ete/$1ête-à-$2ête/g;
768 9992         34909 s/voila/voilà/g;
769 9992         49116 s/Alandinseln/Ålandinseln/g;
770 9992         33259 s/Angström/Ångström/g;
771 9992         65671 s/Egalite/Égalité/g;
772 9992         69830 s/(?<=[Ll]and)buße/busse/g;
773 9992         104610 s/\b(?
774 9992         47279 s/(?
775 9992         43704 s/(?<=[Bb]ai)ß(?=e)/ss/g;
776 9992         41755 s/(?<=[Hh]au)ß(?=e)/ss/g;
777 9992         16666 s/\bue\./ü./g;
778 9992         22046 s/überfloß/überfloss/g;
779 9992         21720 s/\bloß(?!\w)/loss/g;
780 9992         35759 s/Ächm/Aechm/g; # e.g. Aechmea
781 9992         96752 s/(?<=[Aa]n)ä(?=ro)/ae/g;
782 9992         64258 s/präter/praeter/g;
783 9992         58750 s/Anaphorae/Anaphorä/g;
784 9992         59814 s/Bädeker/Baedeker/g;
785 9992         58013 s/Aspiratae/Aspiratä/g;
786 9992         53378 s/hamär(?=(?:[sn]|in|innen)?\b)/hamaer/g; # Bahamer, Bahamerin and similar
787 9992         96029 s/(?<=[Pp])ä(?=se)/ae/g; # Bel Paese
788 9992         54482 s/Cälius/Caelius/g;
789 9992         37270 s/(?<=Famul)ae\b/ä/g;
790 9992         92901 s/(?<=F)ä(?=ce)/ae/g; # Faeces
791 9992         65964 s/((Gan)?[Gg])raen/$1rän/g;
792 9992         96855 s/(?<=[gG]r)ä(?=c(?:um|as))/ae/g;
793 9992         40715 s/Häckel/Haeckel/g;
794 9992         60041 s/Intimae/Intimä/g;
795 9992         66115 s/Kannae/Kannä/g;
796 9992         49823 s/Klavikulae/Klavikulä/g;
797 9992         54989 s/Kolossae/Kolossä/g;
798 9992         48266 s/Konjunktivae/Konjunktivä/g;
799 9992         64351 s/Lärtes/Laertes/g;
800 9992         67879 s/ariae\b/ariä/g;
801 9992         54292 s/\bMäst(?![eu])/Maest/g;
802 9992         15723 s/räcox/raecox/g;
803 9992         39522 s/ichäl/ichael/g;
804 9992         35326 s/(?<=[Ss])ae(?=nger)/ä/g;
805 9992         95713 s/(?<=[Pp])ä(?=lla)/ae/g;
806 9992         47362 s/Phät/Phaet/g;
807 9992         43002 s/(?<=\b[Rr]a) # Raphael, Raffael ...
808             (ff?|ph)äl/$1ael/gx; # != Niagarafällen
809 9992         96154 s/($prefix)saesse/$1säße/g;
810 9992         128742 s/(?
811 9992         25530 s/Täkwondo/Taekwondo/g;
812 9992         61536 s/mondaen/mondän/g;
813 9992         14771 s/o\.ae\./o.ä./g;
814 9992         24346 s/Alö/Aloe/g;
815 9992         22721 s/Apnö/Apnoe/g;
816 9992         39403 s/Böing/Boeing/g;
817 9992         15480 s/öc\./oec./g;
818 9992         22813 s/Herö/Heroe/g;
819 9992         26551 s/Hök\b/Hoek/g;
820 9992         55533 s/zön\b/zoen/g;
821 9992         55953 s/obszoen/obszön/g;
822 9992         23617 s/Itzehö/Itzehoe/g;
823 9992         38159 s/Jöl/Joel/g;
824 9992         52053 s/(?<=[Kk])ö(?=du|x)/oe/g; # Koedukation, ...
825 9992         21971 s/Obö/Oboe/g;
826 9992         26731 s/(?<=i)oe(?=se?[mnr]?)/ö/g;
827 9992         52337 s/(?<=\b[Pp])ö(?=bene|[mt]|sie)(?!tt)/oe/g;
828 9992         81434 s/($prefix)pö(?=bene|[mt]|sie)(?!tt)/$1poe/g;
829 9992         24942 s/Prö(?=[^bps])/Proe/g;
830 9992         63267 s/stroeme/ströme/g;
831 9992         20847 s/Crusö/Crusoe/g;
832 9992         16567 s/Zö(?!\w)/Zoe/g;
833 9992         62744 s/söben/soeben/g;
834 9992         60789 s/Airbuße/Airbusse/g;
835 9992         58645 s/pioßes/piosses/g;
836 9992         20705 s/Cottbuß/Cottbuss/g;
837 9992         21124 s/Globuß/Globuss/g;
838 9992         60716 s/Beisaße/Beisasse/g;
839 9992         33714 s/Borußia/Borussia/g;
840 9992         21187 s/Braß/Brass/g;
841 9992         32497 s/Caißa/Caissa/g;
842 9992         58828 s/(?<=c$vocal)ß(?=$vocal)/ss/g;
843 9992         41537 s/(?<=[Bb]u)ß(?=erl)/ss/g;
844 9992         24253 s/(Cr?a)ß(?=ata|i|us)/$1ss/g;
845 9992         39592 s/(?<=[CZ]erberu)ß/ss/g;
846 9992         45056 s/Croißant/Croissant/g;
847 9992         55903 s/Digloßie/Diglossie/g;
848 9992         42286 s/(?<=\b[Ee]i)ß(?=\w)/ss/g;
849 9992         21021 s/Elsaß/Elsass/g;
850 9992         15892 s/ßé/ssé/g;
851 9992         63093 s/rimaße/rimasse/g;
852 9992         20035 s/oloß/oloss/g;
853 9992         39718 s/(?<=[Ll]ai)ß/ss/g; # Laissez-faire
854 9992         36843 s/aßachu/assachu/g;
855 9992         21639 s/fuß(?=l[ei])/fuss/g;
856 9992         23521 s/großo/grosso/g;
857 9992         40171 s/ktül/ktuel/g;
858 9992         85888 s/(?<=nn)ü(?=lle)/ue/g;
859 9992         86927 s/(?<=[gj])ü(?=z\b)/ue/g;
860 9992         69364 s/BDUe/BDÜ/g;
861 9992         57136 s/nün\b/nuen/g;
862 9992         33233 s/gü(?=(tt|rr)[ei])/gue/g;
863 9992         90913 s/(?<=\b[Bb]l)ü(?=(?!\w)|[bfgjp]|movie|stock|chip)/ue/g; # Blue- [cjb...] is untypical for german, blümen but is
864 9992         55030 s/(?<=[Mm]en)ue/ü/g;
865 9992         53697 s/Bünos/Buenos/g;
866 9992         32061 s/Dengü/Dengue/g;
867 9992         23646 s/nündo(?=\b|s)/nuendo/g;
868 9992         91203 s/(?<=b)ü(?=nt([ei]n(nen)?)?\b)/ue/g;
869 9992         33330 s/Dünja/Duenja/g;
870 9992         50757 s/(?<=[Dd])ütt/uett/g;
871 9992         37106 s/manül/manuel/g;
872 9992         84479 s/(?<=[Ff]ond)ü/ue/g;
873 9992         79860 s/Fürte/Fuerte/g;
874 9992         61372 s/Güricke/Guericke/g;
875 9992         84928 s/(?<=[Gg])ü(?=rill)/ue/g;
876 9992         33344 s/Gürnica/Guernica/g;
877 9992         85176 s/(?<=[vs]id)ü(?=n)/ue/g;
878 9992         24900 s/flünz/fluenz/g;
879 9992         52231 s/ongrün/ongruen/g;
880 9992         79040 s/tünte/tuente/g;
881 9992         69104 s/tülle/tuelle/g;
882 9992 100       57100 s/([\wäöüÄÖÜß]+t)üll/$1 eq lc($1) ? "$1uell" : "$1üll"/gex; #eventuell != Häkeltüll
  154         1788  
883 9992         35278 s/Eventüll/Eventuell/g;
884 9992         31290 s/Langü/Langue/g;
885 9992         35792 s/Manül/Manuel/g;
886 9992         33636 s/Migül/Miguel/g;
887 9992         46107 s/enütt/enuett/g;
888 9992         73129 s/gürite/guerite/g;
889 9992         39016 s/inünd/inuend/g;
890 9992         86366 s/(?<=[Gg])ü(?=st)/ue/g;
891 9992         84842 s/(?<=[Pp])ü(?=blo)/ue/g;
892 9992         84758 s/(?<=[Pp])ü(?=rto)/ue/g;
893 9992         33981 s/Reü(?=[nv])/Reue/g;
894 9992         33638 s/Samül/Samuel/g;
895 9992         69356 s/Süve/Sueve/g;
896 9992         24426 s/Süz/Suez/g;
897 9992         86606 s/(?<=[Tt])ü(?=rei)/ue/g;
898 9992         62179 s/Ürdingen/Uerdingen/g;
899 9992         62630 s/Ücker/Uecker/g;
900 9992         36972 s/süll/suell/g;
901 9992         33566 s/nnüll/nnuell/g;
902 9992         102499 s/(?
903 9992         38297 s/\beinzüng/einzueng/g;
904 9992         37618 s/\btü(?=s?t\b)/tue/g;
905 9992         21379 s/Zeiß/Zeiss/g; # I'm coming from Jena, Zeiss' hometown and that
906             # really looks better :-)
907 9992         40209 s/(?<=airma)ß/ss/g;
908 9992         34532 s/Däda/Daeda/g;
909 9992         32595 s/Büna/Buena/g;
910 9992         45471 s/(?<=can)ö/oe/g; # english for "Kanu"
911 9992         30677 s/(canv|carc)aß/$1ass/g; # english for "prüfend", ...
912 9992         33472 s/Caßandra/Cassandra/g;
913 9992         56192 s/Citr(oe|ö)n/Citroën/g;
914 9992         51948 s/\bdämon\b/daemon/g; # lowercase is wrong German (but not for "dämonenhaft"), thus it must be the english version
915 9992         5114246 s/([A-ZÄÖÜ]*)(Ae|Oe|Ue)\b/$1$mutation{$2}/g; # must be an abbreviation ending on Ä,Ö,Ü
916 9992         27122 s/joß/joss/g;
917 9992         16243 s/Sußex/Sussex/g;
918 9992         28980 s/(?
919 9992         61748 s/Malmoe/Malmö/g;
920 9992         53547 s/(fl|tr?)ünt\b/$1uent/g;
921 9992         75456 s/güse/guese/g;
922 9992         50935 s/(?<=[sh])ö(?=ver)/oe/g; # whomsever, whoever
923 9992         52783 s/potatös/potatoes/g;
924 9992         91155 s/(?<=\b[fd])ü(?=[lt]\b)/ue/g; # fuel, duel, duet, ...
925 9992         22295 s/Dreyfuß/Dreyfuss/g;
926 9992         96576 s/(?<=[Gg])ä(?=lic)/ae/g;
927 9992         99289 s/(?<=[Mm])ä(?=stro)/ae/g;
928 9992         52906 s/(?<=\b[dg])ö(?=s(\b|n))/oe/g; # does, goes
929 9992         46347 s/minüt\b/minuet/g;
930 9992         40134 s/(?<=trespa)ß/ss/g;
931 9992         83760 s/N(oe|ö)l\b/Noël/g;
932 9992         59489 s/\bgüss\b/guess/g;
933 9992         38450 s/mutül/mutuel/g;
934 9992         37607 s/öil/oeil/g;
935 9992         40884 s/müzzi/muezzi/g;
936 9992         14952 s/pösy/poesy/g;
937 9992         47237 s/(?<=[Tt]omat)ö/oe/g;
938 9992         45385 s/(?<=B)ö(?=gehold)/oe/g;
939 9992         64180 return $_;
940             }
941              
942             1;
943             __END__