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   76357 use 5.006;
  6         52  
4 6     6   30 use strict;
  6         12  
  6         116  
5 6     6   26 use warnings;
  6         10  
  6         8845  
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.13';
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 4327920 my $text = shift;
125 215659 50       376324 return unless defined $text;
126 215659         1492006 $text =~ s/([\200-\377])/$ANSI_TO_ASCII_TRANSLITERATION{$1}/g;
127             #\octal => \200 = 128, \377 => 255
128 215659         538504 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 96125 local $_ = shift;
211 9992 50       23116 return unless defined;
212              
213 9992 100       147770 if (/[Aa]e/) {
214 5607         577122 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 5607         27135 s/(?<=[rtz])ae(?=n\b)/ä/g; # Eozän, Kapitän, Souverän
240            
241 5607         42896 s/phorae/phorä/g; # Epiphorä
242 5607         44795 s/kenae/kenä/g; # Mykenä
243 5607         44395 s/ovae\b/ovä/g;
244            
245 5607         128949 s/($town_with_a)är/$1aer/g;
246            
247 5607         79943 s/(?<=[mr])ä(?=ls?\b|li)/ae/g; # Mariä
248 5607         23004 s/(?<=\b[Pp]r)ae/ä/g; # Prä...
249 5607         17996 s/(?<=bd)ae(?=n)/ä/g; # Molybdän
250 5607         79571 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 5607         21194 s/\bAe(?!r[oiu])/Ä/gx; # Ae at beginning of a word, like Aerobic != Ära, Ären
265             }
266              
267 9992 100       147565 if (/[Oo]e/) {
268             # oe => ö
269 3110         202413 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 187664         774729 /$mutation{$1}/egx;
300            
301 3110         44758 s/($town_with_o)ör/$1oer/g;
302             }
303            
304 9992 100       79659 if (/[Uu]e/) {
305             # ue => ü, but take care for 'eue','äue', 'aue', 'que'
306 5371         1047678 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 452192         4151070 /$mutation{$1}/egx;
329            
330 5371         88397 s/(?<=[Zz])ue(?=g | n[dfgs] | c[hk] | be[lr] | rn[^t] | ri?ch | bl)/ü/gx;
331 5371         44308 s/(?<=z)ue(?=rnte?[mnrs]?t?\b)/ü/g;
332 5371         76773 s/(?<=\b[Aa]bz)ü(?=rnt)/ue/g; # Abzuerntende
333 5371         44794 s/vün\b/vuen/g;
334 5371         73453 s/(?<=ga)ü(?=r(in)?)\b/ue/g; # ...gauer like Argauer, Thurgauer, ...
335            
336 6     6   57 {no warnings;
  6         21  
  6         22362  
  5371         7928  
337 5371         403530 s/((?:${prefix}|en)s)?(([tT])ün(de?|\b))(?!chen|lein|lich)
338 6294 100       253507 /$1 ? "$1$2" : "$3uen$4"/xgeo;# Großtuende, but abstünde, Stündchen
339             }
340             s/($prefix s? t)ü(r(ische?[mnrs]?|
341 5371         183861 i?[ns](nen)?)?\b)/$1ue$2/gx;
342 5371 50       323244 s/($prefix t)ü(?=s?t\b|risch)/$1 ? "$1ue" : "$1ü"/gxe; # zurücktuest, großtuerisch
  1054         31889  
343 5371         23026 s/grünz/gruenz/g;
344 5371         184975 s/(?
345 5371         21722 s/zü(?!rich)([rs][befhioszö])/zue$1/g; # Zuerzählende != züricherisch
346            
347 5371         324116 s/([uU] e) (?=bt)/$mutation{$1}/egx; # Übte
  332         9218  
348 5371         76261 s/(?<=[Dd])ü(?=ll)/ue/g; # Duell
349 5371         39166 s/eürt/euert/g; # geneuert
350 5371         25361 s/reü(?=[nv]|s?t)/reue/g; # reuen
351            
352 5371         63045 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         95555 s/(?<=[a-zäöüß])ü(?=[A-ZÄÖÜ])/ue/g; # e.g. "IssueType"
382             }
383            
384 9992 100       28569 if (/ss/) {
385             # russ => ruß
386 4160         192519 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         630528 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         101930 s/(?<= [AaEe]u) # draußen
460             ss
461             (?! [äöü])
462             (?! e[ehg]) # Chaussee, ...seh
463             (?=\b|e|l)
464             /ß/gxo; # scheußlich
465              
466 4160         129783 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         73269 s/(?<=verg[äa])ss(?=e|\b)/ß/g; # vergäße
477              
478 4160         208210 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         56686 s/(äu|(?
490            
491 4160         74455 s/(?<=[bBeEnN][Ss]a)ss(?=\b|en)/ß/g; # absaß, beisammensaßen
492 4160         63313 s/($prefix)sass/$1saß/g;
493              
494 4160         170927 s/(?:(?<=[mM][ai])|(?<=[Ss]ü)|(?<=[Ss]tö)|(?<=[Ww]ei))ss(?=ge|lich)/ß/go;
495            
496 4160         77277 s/(?<=[Gg]ro) ss (?=t|$vocal) (?!ist)/ß/gx; # großtäte, groß-o...
497 4160         66387 s/(?<=[Ss]pa) ss (?!ion) (?!age) (?!iv)/ß/gx; # spaßig, but not Matthäuspassion
498              
499            
500 4160 100       11908 if (/ß/) {
501 3656         54416 s/(?<=[mM][uü])ß(?=te|en|er)/ss/go;
502 3656 100       174004 s/($prefix|en)?([Ss]a)ß([ea])/$1 ? "$1$2ß$3" : "$2ss$3"/goe;
  742         16631  
503             # Gefängnisinsasse, Sassafra != aufsaßen, beisammensaßen
504              
505 3656         34441 s/(?<=[rR] [aö]) (?
506            
507 3656         61683 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         31006 s/Rußki/Russki/g;
517            
518             #s/(?<=[rb])ß(?=[tpy])/ss/g;
519 3656         38814 s/(?<=$consonant)ß(?=$consonant|y)/ss/g;
520 3656         33222 s/(?<=[^i]e)ß(?=en)/ss/g;
521 3656         30364 s/(?<=[Aa]u)ß(?=end(?!i)|etz)/ss/g;
522 3656         20376 s/(?
523 3656         28481 s/(?<=[gG]lo)ß/ss/g;
524 3656         28074 s/(?<=sa)ß(?=in)/ss/g;
525 3656         44000 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         54334 s/Maße/Masse/g;
531 3656         16259 s/maß(?=el|ak|ig)/mass/g;
532 3656         12847 s/\bmaß(?=en\w)/mass/g;
533 3656         11592 s/(ten)maß/$1mass/g;
534 3656         28288 s/((?:\b|$prefix)flo)ß/$1ss/g;
535             }
536            
537 4160 100       57377 s/($prefix)?scho(ss|ß)/$1 ? "$1schoss" : "schoß"/ge;
  5298         53180  
538             }
539              
540             # symbols
541 9992         19826 s/\(R\)/®/g;
542 9992         15539 s/\(C\)/©/g;
543              
544             # special characters
545 9992         15743 s/<<(\D*?)>>/«$1»/g; # if there are numbers between,
546 9992         13917 s/>>(\D*?)<
547              
548             # foreign words
549 9992         59332 s/cademie/cadémie/g;
550 9992         52285 s/rancais/rançais/g;
551 9992         62928 s/leen/léen/g;
552 9992         46669 s/grement/grément/g;
553 9992         49998 s/lencon/lençon/g;
554 9992         48528 s/Ancien Regime/Ancien Régime/g;
555 9992         75699 s/Andre(?=s?\b)/André/g;
556 9992         34764 s/Apercu/Aperçu/g;
557 9992         63937 s/([aA])pres/$1près/g;
558 9992         24869 s/Apero/Apéro/g;
559 9992         48124 s/Aragon/Aragón/g;
560 9992         21164 s/\bdeco\b/déco/g;
561 9992         65406 s/socie(?=\b|s)/socié/g;
562 9992         46510 s/([aA])suncion/$1sunción/g;
563 9992         63892 s/([aA])ttache/$1ttaché/g;
564 9992         66062 s/Balpare/Balparé/g;
565 9992         25784 s/Bartok/Bartók/g;
566 9992         32156 s/Baumegrad/Baumégrad/g;
567 9992         66020 s/Beaute/Beauté/g;
568 9992         57301 s/Epoque/Époque/g;
569 9992         44323 s/Björnson/Bjørnson/g;
570 9992         31546 s/Bogota/Bogotá/g;
571 9992         36504 s/Bokmal/Bokmål/g;
572 9992         59879 s/Boucle/Bouclé/g;
573 9992         69579 s/rree/rrée/g;
574 9992         65109 s/Bruyere/Bruyère/g;
575 9992         70486 s/Bebe/Bébé/g;
576 9992         38449 s/echamel/échamel/g;
577 9992         49911 s/Beret/Béret/g;
578 9992         74734 s/([cC])afe/$1afé/g;
579 9992         68516 s/([cC])reme/$1rème/g;
580 9992         48170 s/alderon/alderón/g;
581 9992         51191 s/Camös/Camões/g;
582 9992         64509 s/anape/anapé/g;
583 9992         30853 s/Canoßa/Canossa/g;
584 9992         64760 s/celebre/célèbre/g;
585 9992         22502 s/tesimo/tésimo/g;
586 9992         60883 s/eparee/éparée/g;
587 9992         58742 s/Elysee/Élysée/g;
588 9992         68330 s/onniere/onnière/g;
589 9992         65767 s/Charite/Charité/g;
590 9992         70968 s/inee/inée/g;
591 9992         58448 s/hicoree/hicorée/g;
592 9992         36154 s/Chateau/Château/g;
593 9992         13421 s/Cigany/Cigány/g;
594 9992         29939 s/Cinecitta/Cinecittà/g;
595 9992         63790 s/Cliche/Cliché/g;
596 9992         59270 s/Cloisonne/Cloisonné/g;
597 9992         56889 s/Cloque/Cloqué/g;
598 9992         61951 s/dell\'Arte/dell´Arte/g;
599 9992         51372 s/Communique/Communiqué/g;
600 9992         57862 s/Consomme/Consommé/g;
601 9992         21555 s/d\'Ampezzo/d´Ampezzo/g;
602 9992         42079 s/d\'Etat/d´Etat/g;
603 9992         61491 s/Coupe/Coupé/g;
604 9992         14874 s/Cox\'Z/Cox´/g;
605 9992         54926 s/Craquele/Craquelé/g;
606 9992         69411 s/roise/roisé/g;
607 9992         29650 s/(?
608             (?
609             iere\b
610             /ière/g;
611              
612 9992         68603 s/([cC])reme/$1rème/g;
613 9992         61499 s/fraiche/fraîche/g;
614 9992         63871 s/Crepe/Crêpe/g;
615 9992         49304 s/Csikos/Csikós/g;
616 9992         47888 s/Csardas/Csárdás/g;
617 9992         75729 s/Cure/Curé/g;
618 9992         25033 s/Cadiz/Cádiz/g;
619 9992         20586 s/Centimo/Céntimo/g;
620 9992         61537 s/Cezanne/Cézanne/g;
621 9992         30768 s/Cordoba/Córdoba/g;
622              
623 9992         59855 s/Dauphine/Dauphiné/g;
624 9992         56967 s/Dekollete/Dekolleté/g;
625 9992         59806 s/ieces/ièces/g;
626 9992         19117 s/trochäuß/trochäuss/g;
627 9992         63232 s/Drape/Drapé/g;
628 9992         25647 s/müß(?=[et])/müss/g;
629 9992         26626 s/Dvorak/Dvorák/g;
630 9992         33148 s/([dD])eja/$1éjà/g;
631 9992         57604 s/habille/habillé/g;
632 9992         66772 s/Detente/Détente/g;
633              
634 9992         71436 s/Ekarte/Ekarté/g;
635 9992         21810 s/El Nino/El Niño/g;
636 9992         59838 s/Epingle/Epinglé/g;
637 9992         61532 s/Expose/Exposé/g;
638 9992         71505 s/Faure/Fauré/g;
639 9992         60173 s/Filler/Fillér/g;
640 9992         59510 s/Siecle/Siècle/g;
641 9992         38323 s/lößel/lössel/g;
642 9992         65164 s/Bergere/Bergère/g;
643 9992         60803 s/Fouche/Fouché/g;
644 9992         56219 s/Fouque/Fouqué/g;
645 9992         62487 s/elementaire/élémentaire/g;
646 9992         69091 s/ternite(s?)\b/ternité$1/g;
647 9992         64485 s/risee/risée/g;
648 9992         41759 s/roi(ß|ss)e/roissé/g;
649 9992         66182 s/\bFrotte(?=\b|s\b)/Frotté/g;
650 9992         67584 s/Fume/Fumé/g;
651 9992         50211 s/([Gg])arcon/$1arçon/g;
652 9992         54473 s/([Gg])efäss/$1efäß/g;
653 9992         59858 s/Gemechte/Gemèchte/g;
654 9992         59438 s/Geneve/Genève/g;
655 9992         60970 s/Glace/Glacé/g;
656 9992         53883 s/Godemiche/Godemiché/g;
657 9992         27481 s/Godthab/Godthåb/g;
658 9992         51462 s/(?<=[Gg])ö(?=th)/oe/g;
659 9992         68799 s/lame(?=\b|s)/lamé/g;
660 9992         71823 s/uyere/uyère/g;
661 9992         70507 s/Grege/Grège/g;
662 9992         49535 s/Gulyas/Gulyás/g;
663 9992         59977 s/abitue/abitué/g;
664 9992         61927 s/Haler/Halér/g;
665 9992         51027 s/ornuss/ornuß/g;
666 9992         38004 s/Horvath/Horváth/g;
667 9992         52830 s/Hottehue/Hottehü/g;
668 9992         24517 s/Hacek/Hácek/g;
669 9992         46782 s/matozön/matozoen/g;
670 9992         64083 s/chlosse(?![rsn])/chloße/g;
671 9992         64726 s/doree/dorée/g;
672 9992         62568 s/Jerome/Jérôme/g;
673 9992         13214 s/Kodaly/Kodály/g;
674 9992         17807 s/örzitiv/oerzitiv/g;
675             #s/nique/niqué/g;
676 9992         47130 s/Kalman/Kálmán/g;
677 9992         70545 s/iberte/iberté/g;
678 9992         61308 s/Egalite/Égalité/g;
679 9992         69685 s/Linne/Linné/g;
680 9992         54964 s/([fF])asss/$1aßs/g;
681 9992         67818 s/Lome/Lomé/g;
682 9992         67299 s/Makore/Makoré/g;
683 9992         58926 s/Mallarme/Mallarmé/g;
684 9992         67573 s/aree/arée/g;
685 9992         67235 s/Maitre/Maître/g;
686 9992         97202 s/([Mm]$vocal)liere\b/$1lière/g;
687 9992         65937 s/Mouline/Mouliné/g;
688 9992         53670 s/Mousterien/Moustérien/g;
689 9992         32503 s/Malaga/Málaga/g;
690 9992         66734 s/Meche/Mèche/g;
691 9992         60486 s/erimee/érimée/g;
692 9992         68310 s/eglige/egligé/g;
693 9992         72237 s/eaute/eauté/g;
694 9992         64863 s/egritude/égritude/g;
695 9992         62503 s/anache/anaché/g;
696 9992         52540 s/Pappmache/Pappmaché/g;
697 9992         32034 s/Parana/Paraná/g;
698 9992         49660 s/Pathetique/Pathétique/g;
699 9992         83264 s/Merite/Mérite/g;
700 9992         54503 s/([Pp])reuss/$1reuß/g;
701 9992         68184 s/otege/otegé/g;
702 9992         54488 s/recis/récis/g;
703 9992         41774 s/Pürilität/Puerilität/g;
704 9992         65630 s/Ratine/Ratiné/g;
705 9992         65519 s/Raye/Rayé/g;
706 9992         59345 s/Renforce/Renforcé/g;
707 9992         74381 s/Rene/René/g;
708 9992         30287 s/Revü/Revue/g;
709 9992         35002 s/Riksmal/Riksmål/g;
710 9992         13231 s/xupery/xupéry/g;
711 9992         68105 s/S(?:ä|ae)ns/Saëns/g;
712 9992         71007 s/Jose(?=s?\b)/José/g;
713 9992         63955 s/bernaise/bérnaise/g;
714 9992         23572 s/Sassnitz/Saßnitz/g;
715 9992         69205 s/Saone/Saône/g;
716 9992         46552 s/Schöntür/Schöntuer/g; # more probable
717 9992         36191 s/chößling/chössling/g;
718 9992         51263 s/Senor/Señor/g;
719 9992         59844 s/Skues/Sküs/g;
720 9992         55944 s/Souffle(?=s|\b)/Soufflé/g;
721 9992         52098 s/Spass/Spaß/g;
722 9992         65135 s/(?<=[Cc])oupe/oupé/g;
723 9992         37522 s/Stäl\b/Staël/g;
724 9992         22773 s/Suarez/Suárez/g;
725 9992         22254 s/Sao\b/São/g;
726 9992         66569 s/Tome(?=s|\b)/Tomé/g;
727 9992         63891 s/Seance/Séance/g;
728 9992         33250 s/Serac/Sérac/g;
729 9992         55124 s/Sevres/Sévres/g;
730 9992         42491 s/Stassfurt/Staßfurt/g;
731 9992         2162148 s/(?<=Troms)(ö|oe)/ø/g;
732 9992         65834 s/Trouvere/Trouvère/g;
733 9992         62570 s/Tönder/Tønder/g;
734 9992         68251 s/ariete/arieté/g;
735 9992         63753 s/Welline/Welliné/g;
736 9992         47125 s/Yucatan/Yucatán/g;
737 9992         92129 s/((?
738 9992         251250 s/((?
739 9992         112557 s/((?
740 9992         71503 s/(\A|\W)ässe/$1äße/g;
741 9992         104144 s/($prefix) (?
742             (?
743             flöß(e(n?|s?t))\b
744             /$1flöss$2/gx; # exception of rule
745 9992         81337 s/(${prefix}|\b)schöße/$1schösse/go; # also an exception
746 6     6   49 {no warnings; s/($prefix)?spröße/$1sprösse/go;}
  6         13  
  6         18694  
  9992         13252  
  9992         68261  
747 9992         84884 s/($prefix)dröße/$1drösse/g;
748 9992         66160 s/\bass(?=\b|en\b)/aß/go; # aß
749 9992         14842 s/\^2/²/go;
750 9992         14273 s/\^3/³/go;
751 9992         46211 s/gemecht/gemècht/go;
752 9992         54001 s/(?<=[Hh])ue\b/ü/g;
753 9992         62160 s/aßelbe/asselbe/g;
754 9992         47057 s/linnesch/linnésch/g;
755 9992         90700 s/(?<=\b[Mm]u)ss(?=t?\b)/ß/g;
756 9992         45128 s/mech(?=e|s?t)/mèch/g;
757 9992         58536 s/metallise/métallisé/g;
758 9992         44211 s/(?
759 9992         505485 s/(?<=\b[Oo]l)e\b/é/g;
760 9992         39737 s/peu(\W+)a(\W+)peu/peu$1à$2peu/g;
761 9992         45023 s/reussisch/reußisch/g;
762 9992         61473 s/sans gene\b/sans gêne/g;
763 9992         93850 s/(?<=\b[Ss]a)ss(?=(en|es?t)\b)/ß/g;
764 9992         38737 s/\bskal\b/skål/g;
765 9992         52651 s/(?<=\bst)ue(?=nde)/ü/g;
766 9992         49644 s/(?<=[Tt]sch)ue(?=s)/ü/g;
767 9992         14323 s/([Tt])ete-a-([Tt])ete/$1ête-à-$2ête/g;
768 9992         32990 s/voila/voilà/g;
769 9992         46362 s/Alandinseln/Ålandinseln/g;
770 9992         33120 s/Angström/Ångström/g;
771 9992         63698 s/Egalite/Égalité/g;
772 9992         67648 s/(?<=[Ll]and)buße/busse/g;
773 9992         100923 s/\b(?
774 9992         44270 s/(?
775 9992         37823 s/(?<=[Bb]ai)ß(?=e)/ss/g;
776 9992         37235 s/(?<=[Hh]au)ß(?=e)/ss/g;
777 9992         13652 s/\bue\./ü./g;
778 9992         19916 s/überfloß/überfloss/g;
779 9992         18772 s/\bloß(?!\w)/loss/g;
780 9992         32799 s/Ächm/Aechm/g; # e.g. Aechmea
781 9992         99260 s/(?<=[Aa]n)ä(?=ro)/ae/g;
782 9992         63136 s/präter/praeter/g;
783 9992         55889 s/Anaphorae/Anaphorä/g;
784 9992         55813 s/Bädeker/Baedeker/g;
785 9992         56031 s/Aspiratae/Aspiratä/g;
786 9992         52314 s/hamär(?=(?:[sn]|in|innen)?\b)/hamaer/g; # Bahamer, Bahamerin and similar
787 9992         99894 s/(?<=[Pp])ä(?=se)/ae/g; # Bel Paese
788 9992         51935 s/Cälius/Caelius/g;
789 9992         35046 s/(?<=Famul)ae\b/ä/g;
790 9992         100999 s/(?<=F)ä(?=ce)/ae/g; # Faeces
791 9992         63359 s/((Gan)?[Gg])raen/$1rän/g;
792 9992         99109 s/(?<=[gG]r)ä(?=c(?:um|as))/ae/g;
793 9992         38880 s/Häckel/Haeckel/g;
794 9992         58149 s/Intimae/Intimä/g;
795 9992         62668 s/Kannae/Kannä/g;
796 9992         47753 s/Klavikulae/Klavikulä/g;
797 9992         52385 s/Kolossae/Kolossä/g;
798 9992         46369 s/Konjunktivae/Konjunktivä/g;
799 9992         60408 s/Lärtes/Laertes/g;
800 9992         66233 s/ariae\b/ariä/g;
801 9992         51485 s/\bMäst(?![eu])/Maest/g;
802 9992         14550 s/räcox/raecox/g;
803 9992         37203 s/ichäl/ichael/g;
804 9992         33607 s/(?<=[Ss])ae(?=nger)/ä/g;
805 9992         99139 s/(?<=[Pp])ä(?=lla)/ae/g;
806 9992         46605 s/Phät/Phaet/g;
807 9992         42561 s/(?<=\b[Rr]a) # Raphael, Raffael ...
808             (ff?|ph)äl/$1ael/gx; # != Niagarafällen
809 9992         90813 s/($prefix)saesse/$1säße/g;
810 9992         133058 s/(?
811 9992         23245 s/Täkwondo/Taekwondo/g;
812 9992         58487 s/mondaen/mondän/g;
813 9992         12896 s/o\.ae\./o.ä./g;
814 9992         22343 s/Alö/Aloe/g;
815 9992         21252 s/Apnö/Apnoe/g;
816 9992         38300 s/Böing/Boeing/g;
817 9992         14283 s/öc\./oec./g;
818 9992         21188 s/Herö/Heroe/g;
819 9992         24357 s/Hök\b/Hoek/g;
820 9992         54194 s/zön\b/zoen/g;
821 9992         54920 s/obszoen/obszön/g;
822 9992         22067 s/Itzehö/Itzehoe/g;
823 9992         35892 s/Jöl/Joel/g;
824 9992         49783 s/(?<=[Kk])ö(?=du|x)/oe/g; # Koedukation, ...
825 9992         20242 s/Obö/Oboe/g;
826 9992         25262 s/(?<=i)oe(?=se?[mnr]?)/ö/g;
827 9992         50869 s/(?<=\b[Pp])ö(?=bene|[mt]|sie)(?!tt)/oe/g;
828 9992         77725 s/($prefix)pö(?=bene|[mt]|sie)(?!tt)/$1poe/g;
829 9992         23954 s/Prö(?=[^bps])/Proe/g;
830 9992         60861 s/stroeme/ströme/g;
831 9992         20630 s/Crusö/Crusoe/g;
832 9992         15803 s/Zö(?!\w)/Zoe/g;
833 9992         59730 s/söben/soeben/g;
834 9992         58396 s/Airbuße/Airbusse/g;
835 9992         56650 s/pioßes/piosses/g;
836 9992         19655 s/Cottbuß/Cottbuss/g;
837 9992         19278 s/Globuß/Globuss/g;
838 9992         56463 s/Beisaße/Beisasse/g;
839 9992         31745 s/Borußia/Borussia/g;
840 9992         18792 s/Braß/Brass/g;
841 9992         29965 s/Caißa/Caissa/g;
842 9992         54283 s/(?<=c$vocal)ß(?=$vocal)/ss/g;
843 9992         38161 s/(?<=[Bb]u)ß(?=erl)/ss/g;
844 9992         22780 s/(Cr?a)ß(?=ata|i|us)/$1ss/g;
845 9992         36864 s/(?<=[CZ]erberu)ß/ss/g;
846 9992         44663 s/Croißant/Croissant/g;
847 9992         54888 s/Digloßie/Diglossie/g;
848 9992         36804 s/(?<=\b[Ee]i)ß(?=\w)/ss/g;
849 9992         19415 s/Elsaß/Elsass/g;
850 9992         14710 s/ßé/ssé/g;
851 9992         60461 s/rimaße/rimasse/g;
852 9992         17985 s/oloß/oloss/g;
853 9992         35743 s/(?<=[Ll]ai)ß/ss/g; # Laissez-faire
854 9992         34305 s/aßachu/assachu/g;
855 9992         19615 s/fuß(?=l[ei])/fuss/g;
856 9992         21514 s/großo/grosso/g;
857 9992         39250 s/ktül/ktuel/g;
858 9992         83963 s/(?<=nn)ü(?=lle)/ue/g;
859 9992         83324 s/(?<=[gj])ü(?=z\b)/ue/g;
860 9992         67608 s/BDUe/BDÜ/g;
861 9992         53807 s/nün\b/nuen/g;
862 9992         31554 s/gü(?=(tt|rr)[ei])/gue/g;
863 9992         88579 s/(?<=\b[Bb]l)ü(?=(?!\w)|[bfgjp]|movie|stock|chip)/ue/g; # Blue- [cjb...] is untypical for german, blümen but is
864 9992         52583 s/(?<=[Mm]en)ue/ü/g;
865 9992         51671 s/Bünos/Buenos/g;
866 9992         31801 s/Dengü/Dengue/g;
867 9992         22463 s/nündo(?=\b|s)/nuendo/g;
868 9992         87353 s/(?<=b)ü(?=nt([ei]n(nen)?)?\b)/ue/g;
869 9992         32024 s/Dünja/Duenja/g;
870 9992         51336 s/(?<=[Dd])ütt/uett/g;
871 9992         36050 s/manül/manuel/g;
872 9992         82015 s/(?<=[Ff]ond)ü/ue/g;
873 9992         75755 s/Fürte/Fuerte/g;
874 9992         58736 s/Güricke/Guericke/g;
875 9992         82256 s/(?<=[Gg])ü(?=rill)/ue/g;
876 9992         30101 s/Gürnica/Guernica/g;
877 9992         82514 s/(?<=[vs]id)ü(?=n)/ue/g;
878 9992         24551 s/flünz/fluenz/g;
879 9992         49755 s/ongrün/ongruen/g;
880 9992         75920 s/tünte/tuente/g;
881 9992         66960 s/tülle/tuelle/g;
882 9992 100       55501 s/([\wäöüÄÖÜß]+t)üll/$1 eq lc($1) ? "$1uell" : "$1üll"/gex; #eventuell != Häkeltüll
  170         2251  
883 9992         34432 s/Eventüll/Eventuell/g;
884 9992         29963 s/Langü/Langue/g;
885 9992         35154 s/Manül/Manuel/g;
886 9992         30941 s/Migül/Miguel/g;
887 9992         44649 s/enütt/enuett/g;
888 9992         70634 s/gürite/guerite/g;
889 9992         38002 s/inünd/inuend/g;
890 9992         83245 s/(?<=[Gg])ü(?=st)/ue/g;
891 9992         82923 s/(?<=[Pp])ü(?=blo)/ue/g;
892 9992         81860 s/(?<=[Pp])ü(?=rto)/ue/g;
893 9992         29886 s/Reü(?=[nv])/Reue/g;
894 9992         32003 s/Samül/Samuel/g;
895 9992         67999 s/Süve/Sueve/g;
896 9992         22771 s/Süz/Suez/g;
897 9992         83774 s/(?<=[Tt])ü(?=rei)/ue/g;
898 9992         60712 s/Ürdingen/Uerdingen/g;
899 9992         60879 s/Ücker/Uecker/g;
900 9992         35631 s/süll/suell/g;
901 9992         31279 s/nnüll/nnuell/g;
902 9992         106829 s/(?
903 9992         37933 s/\beinzüng/einzueng/g;
904 9992         36276 s/\btü(?=s?t\b)/tue/g;
905 9992         19388 s/Zeiß/Zeiss/g; # I'm coming from Jena, Zeiss' hometown and that
906             # really looks better :-)
907 9992         35877 s/(?<=airma)ß/ss/g;
908 9992         31916 s/Däda/Daeda/g;
909 9992         29701 s/Büna/Buena/g;
910 9992         44586 s/(?<=can)ö/oe/g; # english for "Kanu"
911 9992         29038 s/(canv|carc)aß/$1ass/g; # english for "prüfend", ...
912 9992         31702 s/Caßandra/Cassandra/g;
913 9992         54587 s/Citr(oe|ö)n/Citroën/g;
914 9992         50880 s/\bdämon\b/daemon/g; # lowercase is wrong German (but not for "dämonenhaft"), thus it must be the english version
915 9992         5082708 s/([A-ZÄÖÜ]*)(Ae|Oe|Ue)\b/$1$mutation{$2}/g; # must be an abbreviation ending on Ä,Ö,Ü
916 9992         25077 s/joß/joss/g;
917 9992         13920 s/Sußex/Sussex/g;
918 9992         27823 s/(?
919 9992         61070 s/Malmoe/Malmö/g;
920 9992         52106 s/(fl|tr?)ünt\b/$1uent/g;
921 9992         71892 s/güse/guese/g;
922 9992         49219 s/(?<=[sh])ö(?=ver)/oe/g; # whomsever, whoever
923 9992         50885 s/potatös/potatoes/g;
924 9992         88798 s/(?<=\b[fd])ü(?=[lt]\b)/ue/g; # fuel, duel, duet, ...
925 9992         20142 s/Dreyfuß/Dreyfuss/g;
926 9992         101022 s/(?<=[Gg])ä(?=lic)/ae/g;
927 9992         103953 s/(?<=[Mm])ä(?=stro)/ae/g;
928 9992         51767 s/(?<=\b[dg])ö(?=s(\b|n))/oe/g; # does, goes
929 9992         45323 s/minüt\b/minuet/g;
930 9992         36838 s/(?<=trespa)ß/ss/g;
931 9992         81957 s/N(oe|ö)l\b/Noël/g;
932 9992         56958 s/\bgüss\b/guess/g;
933 9992         36293 s/mutül/mutuel/g;
934 9992         36031 s/öil/oeil/g;
935 9992         39517 s/müzzi/muezzi/g;
936 9992         13300 s/pösy/poesy/g;
937 9992         45808 s/(?<=[Tt]omat)ö/oe/g;
938 9992         43080 s/(?<=B)ö(?=gehold)/oe/g;
939 9992         57337 return $_;
940             }
941              
942             1;
943             __END__