diff options
author | Karl Berry <karl@freefriends.org> | 2017-03-05 21:39:00 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-03-05 21:39:00 +0000 |
commit | a1533bc54fb7e03d4fbe31dc260f56a93df96382 (patch) | |
tree | 0d4c1ca4f38ca462974fdeb7ff9ffd6af3fec6a0 /Master/texmf-dist/tex/latex/phonenumbers | |
parent | c83a6978f6e5eb7456783ecb1401896859d19b4d (diff) |
phonenumbers (5mar17)
git-svn-id: svn://tug.org/texlive/trunk@43405 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/phonenumbers')
4 files changed, 383 insertions, 191 deletions
diff --git a/Master/texmf-dist/tex/latex/phonenumbers/DE_Ortsnamen.tex b/Master/texmf-dist/tex/latex/phonenumbers/DE_Ortsnamen.tex index 8009d51aaff..efaa76ab13a 100644 --- a/Master/texmf-dist/tex/latex/phonenumbers/DE_Ortsnamen.tex +++ b/Master/texmf-dist/tex/latex/phonenumbers/DE_Ortsnamen.tex @@ -1,5 +1,5 @@ % phonenumbers package: German place names -% Datum: 22. August 2016 +% Datum: 5. März 2017 \tl_const:cn {c_phone_DE_ortsname_0201_tl} {Essen} \tl_const:cn {c_phone_DE_ortsname_0202_tl} {Wuppertal} \tl_const:cn {c_phone_DE_ortsname_0203_tl} {Duisburg} @@ -1154,7 +1154,7 @@ \tl_const:cn {c_phone_DE_ortsname_036042_tl} {Tonna} \tl_const:cn {c_phone_DE_ortsname_036043_tl} {Kirchheilingen} \tl_const:cn {c_phone_DE_ortsname_03605_tl} {Leinefelde} -\tl_const:cn {c_phone_DE_ortsname_03606_tl} {Heiligenstadt~Heilbad} +\tl_const:cn {c_phone_DE_ortsname_03606_tl} {Heilbad~Heiligenstadt} \tl_const:cn {c_phone_DE_ortsname_036071_tl} {Teistungen} \tl_const:cn {c_phone_DE_ortsname_036072_tl} {Wei\ss enborn-L\"uderode} \tl_const:cn {c_phone_DE_ortsname_036074_tl} {Worbis} @@ -1477,35 +1477,35 @@ \tl_const:cn {c_phone_DE_ortsname_038203_tl} {Bad~Doberan} \tl_const:cn {c_phone_DE_ortsname_038204_tl} {Broderstorf} \tl_const:cn {c_phone_DE_ortsname_038205_tl} {Tessin~bei~Rostock} -\tl_const:cn {c_phone_DE_ortsname_038206_tl} {Graal-M\"uritz~Seeheilbad} +\tl_const:cn {c_phone_DE_ortsname_038206_tl} {Seeheilbad~Graal-M\"uritz} \tl_const:cn {c_phone_DE_ortsname_038207_tl} {St\"abelow} \tl_const:cn {c_phone_DE_ortsname_038208_tl} {Kavelstorf} \tl_const:cn {c_phone_DE_ortsname_038209_tl} {Sanitz~bei~Rostock} \tl_const:cn {c_phone_DE_ortsname_03821_tl} {Ribnitz-Damgarten} -\tl_const:cn {c_phone_DE_ortsname_038220_tl} {Wustrow~Ostseebad} +\tl_const:cn {c_phone_DE_ortsname_038220_tl} {Ostseebad~Wustrow} \tl_const:cn {c_phone_DE_ortsname_038221_tl} {Marlow} \tl_const:cn {c_phone_DE_ortsname_038222_tl} {Semlow} \tl_const:cn {c_phone_DE_ortsname_038223_tl} {Saal~Vorpommern} \tl_const:cn {c_phone_DE_ortsname_038224_tl} {Gresenhorst} \tl_const:cn {c_phone_DE_ortsname_038225_tl} {Trinwillershagen} -\tl_const:cn {c_phone_DE_ortsname_038226_tl} {Dierhagen~Ostseebad} +\tl_const:cn {c_phone_DE_ortsname_038226_tl} {Ostseebad~Dierhagen} \tl_const:cn {c_phone_DE_ortsname_038227_tl} {L\"udershagen~bei~Barth} \tl_const:cn {c_phone_DE_ortsname_038228_tl} {Dettmannsdorf-K\"olzow} \tl_const:cn {c_phone_DE_ortsname_038229_tl} {Bad~S\"ulze} \tl_const:cn {c_phone_DE_ortsname_038231_tl} {Barth} -\tl_const:cn {c_phone_DE_ortsname_038232_tl} {Zingst~Ostseebad} -\tl_const:cn {c_phone_DE_ortsname_038233_tl} {Prerow~Ostseebad} +\tl_const:cn {c_phone_DE_ortsname_038232_tl} {Ostseebad~Zingst} +\tl_const:cn {c_phone_DE_ortsname_038233_tl} {Ostseebad~Prerow} \tl_const:cn {c_phone_DE_ortsname_038234_tl} {Born~auf~dem~Dar\ss} \tl_const:cn {c_phone_DE_ortsname_038292_tl} {Kr\"opelin} -\tl_const:cn {c_phone_DE_ortsname_038293_tl} {K\"uhlungsborn~Ostseebad} +\tl_const:cn {c_phone_DE_ortsname_038293_tl} {Ostseebad~K\"uhlungsborn} \tl_const:cn {c_phone_DE_ortsname_038294_tl} {Neubukow} \tl_const:cn {c_phone_DE_ortsname_038295_tl} {Satow~bei~Bad~Doberan} -\tl_const:cn {c_phone_DE_ortsname_038296_tl} {Rerik~Ostseebad} +\tl_const:cn {c_phone_DE_ortsname_038296_tl} {Ostseebad~Rerik} \tl_const:cn {c_phone_DE_ortsname_038297_tl} {Moitin} \tl_const:cn {c_phone_DE_ortsname_038300_tl} {Insel~Hiddensee} \tl_const:cn {c_phone_DE_ortsname_038301_tl} {Putbus} \tl_const:cn {c_phone_DE_ortsname_038302_tl} {Sagard} -\tl_const:cn {c_phone_DE_ortsname_038303_tl} {Sellin~Ostseebad} +\tl_const:cn {c_phone_DE_ortsname_038303_tl} {Ostseebad~Sellin} \tl_const:cn {c_phone_DE_ortsname_038304_tl} {Garz~R\"ugen} \tl_const:cn {c_phone_DE_ortsname_038305_tl} {Gingst} \tl_const:cn {c_phone_DE_ortsname_038306_tl} {Samtens} @@ -1542,12 +1542,12 @@ \tl_const:cn {c_phone_DE_ortsname_038375_tl} {Koserow} \tl_const:cn {c_phone_DE_ortsname_038376_tl} {Zirchow} \tl_const:cn {c_phone_DE_ortsname_038377_tl} {Zinnowitz} -\tl_const:cn {c_phone_DE_ortsname_038378_tl} {Heringsdorf~Seebad} +\tl_const:cn {c_phone_DE_ortsname_038378_tl} {Seebad~Heringsdorf} \tl_const:cn {c_phone_DE_ortsname_038379_tl} {Benz~Usedom} \tl_const:cn {c_phone_DE_ortsname_03838_tl} {Bergen~auf~R\"ugen} \tl_const:cn {c_phone_DE_ortsname_038391_tl} {Altenkirchen~R\"ugen} \tl_const:cn {c_phone_DE_ortsname_038392_tl} {Sassnitz} -\tl_const:cn {c_phone_DE_ortsname_038393_tl} {Binz~Ostseebad} +\tl_const:cn {c_phone_DE_ortsname_038393_tl} {Ostseebad~Binz} \tl_const:cn {c_phone_DE_ortsname_03841_tl} {Wismar~Mecklenburg} \tl_const:cn {c_phone_DE_ortsname_038422_tl} {Neukloster} \tl_const:cn {c_phone_DE_ortsname_038423_tl} {Bad~Kleinen} diff --git a/Master/texmf-dist/tex/latex/phonenumbers/US_Ortsnamen.tex b/Master/texmf-dist/tex/latex/phonenumbers/US_Ortsnamen.tex index ae590826a51..58acd84125c 100644 --- a/Master/texmf-dist/tex/latex/phonenumbers/US_Ortsnamen.tex +++ b/Master/texmf-dist/tex/latex/phonenumbers/US_Ortsnamen.tex @@ -1,5 +1,5 @@ % phonenumbers package: place names of the North American Numbering Plan -% Datum: 6. November 2016 +% Datum: 5. März 2017 \tl_const:cn {c_phone_US_ortsname_201_tl} {New~Jersey} \tl_const:cn {c_phone_US_ortsname_202_tl} {Washington,~D.\,C.} \tl_const:cn {c_phone_US_ortsname_203_tl} {Connecticut} @@ -19,6 +19,7 @@ \tl_const:cn {c_phone_US_ortsname_218_tl} {Minnesota} \tl_const:cn {c_phone_US_ortsname_219_tl} {Indiana} \tl_const:cn {c_phone_US_ortsname_220_tl} {Ohio} +\tl_const:cn {c_phone_US_ortsname_223_tl} {Pennsylvania} \tl_const:cn {c_phone_US_ortsname_224_tl} {Illinois} \tl_const:cn {c_phone_US_ortsname_225_tl} {Louisiana} \tl_const:cn {c_phone_US_ortsname_226_tl} {Ontario} @@ -126,6 +127,7 @@ \tl_const:cn {c_phone_US_ortsname_441_tl} {Bermuda} \tl_const:cn {c_phone_US_ortsname_442_tl} {California} \tl_const:cn {c_phone_US_ortsname_443_tl} {Maryland} +\tl_const:cn {c_phone_US_ortsname_445_tl} {Pennsylvania} \tl_const:cn {c_phone_US_ortsname_450_tl} {Quebec} \tl_const:cn {c_phone_US_ortsname_458_tl} {Oregon} \tl_const:cn {c_phone_US_ortsname_463_tl} {Indiana} diff --git a/Master/texmf-dist/tex/latex/phonenumbers/US_Vorwahlen.tex b/Master/texmf-dist/tex/latex/phonenumbers/US_Vorwahlen.tex index 6eaea3a6b7f..7457f6aed9a 100644 --- a/Master/texmf-dist/tex/latex/phonenumbers/US_Vorwahlen.tex +++ b/Master/texmf-dist/tex/latex/phonenumbers/US_Vorwahlen.tex @@ -1,5 +1,5 @@ % phonenumbers package: area codes of the North American Numbering Plan -% Datum: 6. November 2016 +% Datum: 5. März 2017 \clist_const:Nn \c_phone_US_ortsvorwahlliste_clist {201, 202, 203, @@ -19,6 +19,7 @@ 218, 219, 220, +223, 224, 225, 226, @@ -126,6 +127,7 @@ 441, 442, 443, +445, 450, 458, 463, @@ -388,6 +390,7 @@ 214, 215, 220, +223, 224, 226, 234, @@ -408,9 +411,8 @@ 305, 310, 312, -% 315, Bisher 7D, 10D ab 11. März 2017 (Einführung von 680 in New York) +315, 317, -% 321, "Home NPA local calls are 7D in Brevard County" 330, 331, 332, @@ -443,6 +445,7 @@ 438, 442, 443, +445, 450, 458, 463, @@ -497,6 +500,7 @@ 713, 714, 715, +% 717, Bisher 7D, 10D ab 26. September 2017 (Einführung von 445 in Pennsylvania) 718, 720, 724, diff --git a/Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty b/Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty index 67a6ecb95fa..1c1ca5ad2ae 100644 --- a/Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty +++ b/Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty @@ -2,8 +2,8 @@ % LaTeX-Paket zur Formatierung von Telefonnummern % LaTeX package for formatting telephone numbers % Autor: K. Wehr -% Version: 1.1.1 -% Datum: 13. November 2016 +% Version: 1.2 +% Datum: 5. März 2017 % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -15,7 +15,7 @@ \RequirePackage{expl3} -\ProvidesExplPackage {phonenumbers} {2016/11/13} {1.1.1} {Telephone number package} +\ProvidesExplPackage {phonenumbers} {2017/03/05} {1.2} {Telephone number package} \RequirePackage{xparse} \RequirePackage{l3keys2e} @@ -24,6 +24,8 @@ \clist_const:Nn \c_phone_ziffern_clist {0,1,2,3,4,5,6,7,8,9} \tl_const:Nn \c_phone_bindestrich_tl {\kern1pt - \kern1pt} +\tl_const:Nn \c_phone_schraegstrich_tl {\kern1pt \slash \kern1pt} +\tl_const:Nn \c_phone_pluszeichen_tl {+ \kern1pt} \str_new:N \l_phone_land_str \str_new:N \l_phone_heimatland_str @@ -31,10 +33,12 @@ \str_new:N \l_phone_vorwahldarstellung_str \str_new:N \l_phone_vorwahltrennung_str \str_new:N \l_phone_heimatvorwahl_str -\str_new:N \l_phone_bereinigte_eingabe_str +\str_new:N \l_phone_bereinigte_nummer_str +\str_new:N \l_phone_bereinigte_durchwahl_str \str_new:N \l_phone_linktext_str \int_new:N \l_phone_ziffernzahl_int +\int_new:N \l_phone_nummerlaenge_int \tl_new:N \l_phone_ausgabetext_tl \tl_new:N \l_phone_formatierte_nummer_tl @@ -44,6 +48,8 @@ \bool_new:N \l_phone_eingabe_leer_bool \bool_new:N \l_phone_durchwahl_leer_bool \bool_new:N \l_phone_nummer_verlinken_bool +\bool_new:N \l_phone_erstes_zeichen_bool +\bool_new:N \l_phone_plusnummer_bool \cs_generate_variant:Nn \str_if_eq:nnT {xnT} \cs_generate_variant:Nn \str_if_eq:nnTF {xnTF} @@ -52,10 +58,7 @@ \cs_generate_variant:Nn \str_case:nnTF {VnTF,xnTF} \cs_generate_variant:Nn \str_put_right:Nn {NV} \cs_generate_variant:Nn \tl_put_right:Nn {Nv} -\cs_generate_variant:Nn \msg_new:nnn {nnx} -\cs_generate_variant:Nn \msg_info:nnn {nnV} \cs_generate_variant:Nn \msg_info:nnnn {nnnv} -\cs_generate_variant:Nn \msg_warning:nnnn {nnnx} \msg_new:nnn {phonenumbers} {illegal~character} @@ -103,6 +106,16 @@ extension~(Durchwahl)~of~#1~phone~number~ignored~\msg_line_context: } +\msg_new:nnn {phonenumbers} {home~country~set} + { + home~country~set~to~\l_phone_heimatland_str\ \msg_line_context: + } + +\msg_new:nnn {phonenumbers} {home~country~cleared} + { + home~country~\l_phone_heimatland_str\ has~been~deleted~\msg_line_context: + } + \msg_new:nnn {phonenumbers} {home~area~code~set} { Your~home~is~in~#2~(area~code~#1)~according~to~line~\msg_line_number:. @@ -110,7 +123,7 @@ \msg_new:nnn {phonenumbers} {home~area~code~cleared} { - home~area~code~#1~was~deleted~\msg_line_context: + home~area~code~\l_phone_heimatvorwahl_str\ has~been~deleted~\msg_line_context: } \msg_new:nnn {phonenumbers} {invalid~home~area~code} @@ -118,15 +131,27 @@ #1~unknown~as~#2~geographic~area~code~(Ortsvorwahl)~\msg_line_context: } +\msg_new:nnn {phonenumbers} {invalid~country~code} + { + illegal~country~code~\msg_line_context: + } + +\msg_new:nnn {phonenumbers} {country~code~only} + { + phone~number~consists~of~a~country~code~only~\msg_line_context: + } \cs_new:Npn \phone_landesadjektiv:n #1 { - \str_case:nn {#1} + \str_case:nnF {#1} { {DE} {German} {FR} {French} {US} {American} } + { + not~supported + } } \cs_generate_variant:Nn \phone_landesadjektiv:n {V} @@ -144,6 +169,33 @@ \keys_define:nn {phonenumbers} { + home-country .choices:nn = {DE,FR,US,none} + { + \str_if_eq:VnTF \l_keys_choice_tl {none} + { + \str_if_empty:NF \l_phone_heimatland_str + { + \msg_info:nn {phonenumbers} {home~country~cleared} + \str_clear:N \l_phone_heimatland_str + } + } + { + \str_set_eq:NN \l_phone_heimatland_str \l_keys_choice_tl + \msg_info:nn {phonenumbers} {home~country~set} + } + + \str_if_empty:NF \l_phone_heimatvorwahl_str + { + \msg_info:nn {phonenumbers} {home~area~code~cleared} + \str_clear:N \l_phone_heimatvorwahl_str + } + }, + home-country .initial:n = none, + home-country .value_required:n = true + } + +\keys_define:nn {phonenumbers} + { foreign .choices:nn = {off,european,american,international} { \str_set_eq:NN \l_phone_auslandsvorwahltyp_str \l_keys_choice_tl @@ -196,25 +248,30 @@ { \str_if_empty:NF \l_phone_heimatvorwahl_str { - \msg_info:nnV {phonenumbers} {home~area~code~cleared} \l_phone_heimatvorwahl_str + \msg_info:nn {phonenumbers} {home~area~code~cleared} \str_clear:N \l_phone_heimatvorwahl_str } } { - \str_case:VnF {\l_phone_land_str} + \str_if_empty:NT \l_phone_heimatland_str + { + \str_set_eq:NN \l_phone_heimatland_str \l_phone_land_str + \msg_info:nn {phonenumbers} {home~country~set} + } + + \str_case:VnF {\l_phone_heimatland_str} { {FR} {\phone_FR_heimatvorwahl_festlegen:n {#1}} {US} {\phone_US_heimatvorwahl_festlegen:n {#1}} } { - \clist_if_in:cnTF {c_phone_\l_phone_land_str _ortsvorwahlliste_clist} {#1} + \clist_if_in:cnTF {c_phone_\l_phone_heimatland_str _ortsvorwahlliste_clist} {#1} { - \str_set_eq:NN \l_phone_heimatland_str \l_phone_land_str \str_set:Nn \l_phone_heimatvorwahl_str {#1} - \msg_info:nnnv {phonenumbers} {home~area~code~set} {#1} {c_phone_\l_phone_land_str _ortsname_#1_tl} + \msg_info:nnnv {phonenumbers} {home~area~code~set} {#1} {c_phone_\l_phone_heimatland_str _ortsname_#1_tl} } { - \msg_warning:nnnx {phonenumbers} {invalid~home~area~code} {#1} {\phone_landesadjektiv:V \l_phone_land_str} + \msg_warning:nnnx {phonenumbers} {invalid~home~area~code} {#1} {\phone_landesadjektiv:V \l_phone_heimatland_str} } } } @@ -224,7 +281,7 @@ } -\cs_new:Npn \phone_gruppierte_ziffernfolge_ausgeben:n #1 +\cs_new:Npn \phone_gruppierte_ziffernfolge_schreiben:n #1 { \int_set:Nn \l_phone_ziffernzahl_int {\tl_count:n {#1}} \tl_clear:N \l_phone_formatierte_nummer_tl @@ -243,10 +300,11 @@ \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_formatierte_nummer_tl } -\cs_generate_variant:Nn \phone_gruppierte_ziffernfolge_ausgeben:n {V,x} +\cs_generate_variant:Nn \phone_gruppierte_ziffernfolge_schreiben:n {V,x} -\cs_new:Npn \phone_auslandsvorwahl_ausgeben:n #1 +% #1: Landeskennzahl +\cs_new:Npn \phone_auslandsvorwahl_schreiben:n #1 { \str_case:VnTF \l_phone_land_str { @@ -256,59 +314,142 @@ { \str_case:Vn \l_phone_auslandsvorwahltyp_str { - {international} {\tl_put_right:Nn \l_phone_ausgabetext_tl {+#1}} - {european} {\phone_gruppierte_ziffernfolge_ausgeben:n {00#1}} - {american} {\phone_gruppierte_ziffernfolge_ausgeben:n {011#1}} + {international} {\tl_put_right:Nn \l_phone_ausgabetext_tl {\c_phone_pluszeichen_tl #1}} + {european} {\phone_gruppierte_ziffernfolge_schreiben:n {00#1}} + {american} {\phone_gruppierte_ziffernfolge_schreiben:n {011#1}} } } { \tl_put_right:Nx \l_phone_ausgabetext_tl { - \str_case:Vn \l_phone_auslandsvorwahltyp_str + \str_case:VnF \l_phone_auslandsvorwahltyp_str { - {international} {+ #1} {european} {00 #1} {american} {011 #1} } + { + \c_phone_pluszeichen_tl #1 + } } } } -\cs_generate_variant:Nn \phone_auslandsvorwahl_ausgeben:n {x} +\cs_generate_variant:Nn \phone_auslandsvorwahl_schreiben:n {x,V} -% #1: eingebene Nummer, #2: Handelt es sich um eine Durchwahl? -\cs_new:Npn \phone_eingabe_ueberpruefen:nN #1#2 +% #1: eingebene Nummer +\cs_new:Npn \phone_nummer_ueberpruefen:n #1 { \tl_if_blank:nTF {#1} { - \bool_if:NTF #2 + \msg_warning:nn {phonenumbers} {empty~input} + \bool_set_true:N \l_phone_eingabe_leer_bool + } + { + \bool_set_false:N \l_phone_eingabe_leer_bool + } + + \str_clear:N \l_phone_bereinigte_nummer_str + + \bool_set_true:N \l_phone_erstes_zeichen_bool + \bool_set_false:N \l_phone_plusnummer_bool + + \tl_map_inline:nn {#1} + { + \clist_if_in:NnTF \c_phone_ziffern_clist {##1} { - \msg_warning:nn {phonenumbers} {empty~extension} - \bool_set_true:N \l_phone_durchwahl_leer_bool + \str_put_right:Nn \l_phone_bereinigte_nummer_str {##1} } { - \msg_warning:nn {phonenumbers} {empty~input} - \bool_set_true:N \l_phone_eingabe_leer_bool + \bool_if:NTF \l_phone_erstes_zeichen_bool + { + \bool_set_true:N \l_phone_plusnummer_bool + } + { + \msg_warning:nnx {phonenumbers} {illegal~character} {##1} + } } + + \bool_set_false:N \l_phone_erstes_zeichen_bool } + + \bool_if:NT \l_phone_plusnummer_bool { - \bool_if:NTF #2 + \int_set:Nn \l_tmpa_int {\str_count:N \l_phone_bereinigte_nummer_str} + + \int_compare:nNnTF {\l_tmpa_int} > {1} { - \bool_set_false:N \l_phone_durchwahl_leer_bool + \str_if_eq:xnTF {\str_head:N \l_phone_bereinigte_nummer_str} {1} + { + \str_set:Nn \l_phone_land_str {US} + \str_set:Nx \l_phone_bereinigte_nummer_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {2} {-1}} + } + { + \int_compare:nNnTF {\l_tmpa_int} > {2} + { + \str_case:xnTF {\str_range:Nnn \l_phone_bereinigte_nummer_str {1} {2}} + { + {49} {\str_set:Nn \l_phone_land_str {DE}} + {33} {\str_set:Nn \l_phone_land_str {FR}} + } + { + \str_set:Nx \l_phone_bereinigte_nummer_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {3} {-1}} + \str_put_left:Nn \l_phone_bereinigte_nummer_str {0} + } + { + \int_compare:nNnTF {\l_tmpa_int} > {3} + { + \str_case:xnTF {\str_range:Nnn \l_phone_bereinigte_nummer_str {1} {3}} + { + {262} {\str_set:Nx \l_phone_bereinigte_nummer_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {4} {-1}}} + {508} { } % Saint-Pierre-et-Miquelon + {590} {\str_set:Nx \l_phone_bereinigte_nummer_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {4} {-1}}} + {594} {\str_set:Nx \l_phone_bereinigte_nummer_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {4} {-1}}} + {596} {\str_set:Nx \l_phone_bereinigte_nummer_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {4} {-1}}} + } + { + \str_set:Nn \l_phone_land_str {FR} + \str_put_left:Nn \l_phone_bereinigte_nummer_str {0} + } + { + \str_clear:N \l_phone_land_str % Länge größer 3, nicht mit 262, 508, 590, 594 oder 596 beginnend + } + } + { + \str_clear:N \l_phone_land_str % Länge 3, nicht mit 49 oder 33 beginnend + } + } + } + { + \str_clear:N \l_phone_land_str % Länge 2, nicht mit 1 beginnend + } + } } { - \bool_set_false:N \l_phone_eingabe_leer_bool + \str_clear:N \l_phone_land_str % Länge kleiner oder gleich 1 } } + } + +% #1: eingebene Durchwahl +\cs_new:Npn \phone_durchwahl_ueberpruefen:n #1 + { + \tl_if_blank:nTF {#1} + { + \msg_warning:nn {phonenumbers} {empty~extension} + \bool_set_true:N \l_phone_durchwahl_leer_bool + } + { + \bool_set_false:N \l_phone_durchwahl_leer_bool + } - \str_clear:N \l_phone_bereinigte_eingabe_str + \str_clear:N \l_phone_bereinigte_durchwahl_str \tl_map_inline:nn {#1} { \clist_if_in:NnTF \c_phone_ziffern_clist {##1} { - \str_put_right:Nn \l_phone_bereinigte_eingabe_str {##1} + \str_put_right:Nn \l_phone_bereinigte_durchwahl_str {##1} } { \msg_warning:nnx {phonenumbers} {illegal~character} {##1} @@ -316,6 +457,7 @@ } } + \cs_new:Npn \phone_nummerntext_ausgeben: { \bool_if:nTF {\l_phone_nummer_verlinken_bool && !\str_if_empty_p:N \l_phone_linktext_str} @@ -333,56 +475,39 @@ } } -\cs_new:Npn \phone_nummer_ohne_durchwahl_ausgeben:n #1 +\cs_new:Npn \phone_nummer_ohne_durchwahl_ausgeben: { - \phone_eingabe_ueberpruefen:nN {#1} \c_false_bool - \bool_if:NF \l_phone_eingabe_leer_bool { - \str_case:Vn \l_phone_land_str + \str_case:VnF \l_phone_land_str { - {DE} {\phone_DE_nummer_ausgeben:V \l_phone_bereinigte_eingabe_str} - {FR} {\phone_FR_nummer_ausgeben:V \l_phone_bereinigte_eingabe_str} - {US} {\phone_US_nummer_ausgeben:V \l_phone_bereinigte_eingabe_str} + {DE} {\phone_DE_nummer_schreiben:} + {FR} {\phone_FR_nummer_schreiben:} + {US} {\phone_US_nummer_schreiben:} + } + { + \phone_SONST_nummer_schreiben: } } \phone_nummerntext_ausgeben: } -% #1: Nummer, #2: Durchwahl -\cs_new:Npn \phone_nummer_mit_durchwahl_ausgeben:nn #1#2 +\cs_new:Npn \phone_nummer_mit_durchwahl_ausgeben: { \str_if_eq:VnTF \l_phone_land_str {DE} { - \phone_eingabe_ueberpruefen:nN {#1} \c_false_bool - \str_set_eq:NN \l_tmpa_str \l_phone_bereinigte_eingabe_str - - \phone_eingabe_ueberpruefen:nN {#2} \c_true_bool - \str_set_eq:NN \l_phone_DE_durchwahl_str \l_phone_bereinigte_eingabe_str - - \phone_DE_nummer_ausgeben:V \l_tmpa_str + \phone_DE_nummer_schreiben: \phone_nummerntext_ausgeben: } { - \str_set:Nx \l_tmpa_str - { - \str_case:Vn \l_phone_land_str - { - {FR} {French} - {US} {American} - } - } - - \phone_eingabe_ueberpruefen:nN {#2} \c_true_bool - \bool_if:NF \l_phone_durchwahl_leer_bool { - \msg_warning:nnx {phonenumbers} {illegal~extension} {\l_tmpa_str} + \msg_warning:nnx {phonenumbers} {illegal~extension} {\phone_landesadjektiv:V \l_phone_land_str} } - \phone_nummer_ohne_durchwahl_ausgeben:n {#1} + \phone_nummer_ohne_durchwahl_ausgeben: } } @@ -412,8 +537,8 @@ \str_case:VnTF \l_phone_land_str { - {DE} {\phone_DE_gruppierte_vorwahl_ausgeben:nN {##1} \c_true_bool} - {FR} {\phone_gruppierte_ziffernfolge_ausgeben:n {##1}} + {DE} {\phone_DE_gruppierte_vorwahl_schreiben:nN {##1} \c_true_bool} + {FR} {\phone_gruppierte_ziffernfolge_schreiben:n {##1}} } { \tl_use:N \l_phone_ausgabetext_tl @@ -446,12 +571,15 @@ \keys_set:nn {phonenumbers} {#1} } + \phone_nummer_ueberpruefen:n {#2} + \IfValueTF {#3} { - \phone_nummer_mit_durchwahl_ausgeben:nn {#2} {#3} + \phone_durchwahl_ueberpruefen:n {#3} + \phone_nummer_mit_durchwahl_ausgeben: } { - \phone_nummer_ohne_durchwahl_ausgeben:n {#2} + \phone_nummer_ohne_durchwahl_ausgeben: } \group_end: } @@ -480,6 +608,26 @@ \group_end: } +\file_input:n {Landeskennzahlen} + +\NewDocumentCommand \CountryCodes { } + { + \bool_set_false:N \l_phone_zeilenumbruch_bool + + \clist_map_inline:Nn \c_phone_landeskennzahlenliste_clist + { + \bool_if:NTF \l_phone_zeilenumbruch_bool + { + \\ + } + { + \bool_set_true:N \l_phone_zeilenumbruch_bool + } + + ##1 + } + } + %%%%%%%%%%%%%%%%%%%% DEUTSCHLAND %%%%%%%%%%%%%%%%%%%% @@ -490,7 +638,6 @@ \clist_concat:NNN \c_phone_DE_vorwahlliste_clist \c_phone_DE_ortsvorwahlliste_clist \c_phone_DE_sondervorwahlliste_clist \str_new:N \l_phone_DE_vorwahl_str -\str_new:N \l_phone_DE_durchwahl_str \int_new:N \l_phone_DE_hauptnummerlaenge_int \bool_new:N \l_phone_DE_teilnehmerrufnummer_gueltig_bool @@ -511,7 +658,7 @@ % #1: Vorwahl, #2: Soll die führende null ausgegeben werden? -\cs_new:Npn \phone_DE_gruppierte_vorwahl_ausgeben:nN #1#2 +\cs_new:Npn \phone_DE_gruppierte_vorwahl_schreiben:nN #1#2 { \int_compare:nNnTF {\str_count:n {#1}} = {5} { @@ -522,10 +669,10 @@ { \bool_if:nTF {#2} { - \phone_gruppierte_ziffernfolge_ausgeben:V \l_tmpa_str + \phone_gruppierte_ziffernfolge_schreiben:V \l_tmpa_str } { - \phone_gruppierte_ziffernfolge_ausgeben:x {\str_tail:N \l_tmpa_str} + \phone_gruppierte_ziffernfolge_schreiben:x {\str_tail:N \l_tmpa_str} } \tl_put_right:Nn \l_phone_ausgabetext_tl {\,} @@ -534,43 +681,43 @@ { \bool_if:nTF {#2} { - \phone_gruppierte_ziffernfolge_ausgeben:n {#1} + \phone_gruppierte_ziffernfolge_schreiben:n {#1} } { - \phone_gruppierte_ziffernfolge_ausgeben:x {\str_tail:n {#1}} + \phone_gruppierte_ziffernfolge_schreiben:x {\str_tail:n {#1}} } } } { \bool_if:nTF {#2} { - \phone_gruppierte_ziffernfolge_ausgeben:n {#1} + \phone_gruppierte_ziffernfolge_schreiben:n {#1} } { - \phone_gruppierte_ziffernfolge_ausgeben:x {\str_tail:n {#1}} + \phone_gruppierte_ziffernfolge_schreiben:x {\str_tail:n {#1}} } } } % #1: Vorwahl, #2: Soll die führende null ausgegeben werden? -\cs_new:Npn \phone_DE_geklammerte_vorwahl_ausgeben:nN #1#2 +\cs_new:Npn \phone_DE_geklammerte_vorwahl_schreiben:nN #1#2 { % Klammern werden nur bei Ortsvorwahlen gesetzt \clist_if_in:NnTF \c_phone_DE_ortsvorwahlliste_clist {#1} { \tl_put_right:Nn \l_phone_ausgabetext_tl {(} - \phone_DE_gruppierte_vorwahl_ausgeben:nN {#1} #2 + \phone_DE_gruppierte_vorwahl_schreiben:nN {#1} #2 \tl_put_right:Nn \l_phone_ausgabetext_tl {)} } { - \phone_DE_gruppierte_vorwahl_ausgeben:nN {#1} #2 + \phone_DE_gruppierte_vorwahl_schreiben:nN {#1} #2 } } % #1: Vorwahl, #2: Folgt eine Rufnummer? -\cs_new:Npn \phone_DE_vorwahl_ausgeben:nN #1 #2 +\cs_new:Npn \phone_DE_vorwahl_schreiben:nN #1 #2 { - \str_if_eq:VnTF \l_phone_auslandsvorwahltyp_str {off} + \bool_if:nTF {\str_if_eq_p:Vn \l_phone_auslandsvorwahltyp_str {off} || \str_if_eq_p:Vn \l_phone_heimatland_str {DE}} { \clist_if_in:NnT \c_phone_DE_sondervorwahlliste_clist {#1} { @@ -590,11 +737,11 @@ { \str_if_eq:VnTF \l_phone_vorwahltrennung_str {brackets} { - \phone_DE_geklammerte_vorwahl_ausgeben:nN {#1} \c_true_bool + \phone_DE_geklammerte_vorwahl_schreiben:nN {#1} \c_true_bool \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl } { - \phone_DE_gruppierte_vorwahl_ausgeben:nN {#1} \c_true_bool + \phone_DE_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool \tl_put_right:Nx \l_phone_ausgabetext_tl { @@ -604,13 +751,13 @@ {hyphen} {\c_phone_bindestrich_tl} } { - \slash + \c_phone_schraegstrich_tl } } } } { - \phone_DE_gruppierte_vorwahl_ausgeben:nN {#1} \c_true_bool + \phone_DE_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool } } {place} @@ -627,7 +774,7 @@ \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_DE_ortsname_#1_tl} } { - \phone_DE_gruppierte_vorwahl_ausgeben:nN {#1} \c_true_bool + \phone_DE_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool } \tl_put_right:Nx \l_phone_ausgabetext_tl @@ -639,7 +786,7 @@ {hyphen} {\c_phone_bindestrich_tl} } { - \slash + \c_phone_schraegstrich_tl } } } @@ -649,7 +796,7 @@ \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_DE_ortsname_#1_tl} } { - \phone_DE_gruppierte_vorwahl_ausgeben:nN {#1} \c_true_bool + \phone_DE_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool } } } @@ -663,7 +810,7 @@ \str_if_eq:VnTF \l_phone_vorwahltrennung_str {brackets} { - \phone_DE_geklammerte_vorwahl_ausgeben:nN {#1} \c_true_bool + \phone_DE_geklammerte_vorwahl_schreiben:nN {#1} \c_true_bool \bool_if:NT #2 { @@ -671,7 +818,7 @@ } } { - \phone_DE_gruppierte_vorwahl_ausgeben:nN {#1} \c_true_bool + \phone_DE_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool \bool_if:NT #2 { @@ -683,7 +830,7 @@ {hyphen} {\c_phone_bindestrich_tl} } { - \slash + \c_phone_schraegstrich_tl } } } @@ -693,16 +840,16 @@ } } { - \phone_auslandsvorwahl_ausgeben:n {49} + \phone_auslandsvorwahl_schreiben:n {49} \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl \str_if_eq:VnTF \l_phone_vorwahltrennung_str {brackets} { - \phone_DE_geklammerte_vorwahl_ausgeben:nN {#1} \c_false_bool + \phone_DE_geklammerte_vorwahl_schreiben:nN {#1} \c_false_bool } { - \phone_DE_gruppierte_vorwahl_ausgeben:nN {#1} \c_false_bool + \phone_DE_gruppierte_vorwahl_schreiben:nN {#1} \c_false_bool } \bool_if:NT #2 @@ -719,7 +866,7 @@ } } -\cs_generate_variant:Nn \phone_DE_vorwahl_ausgeben:nN {Vx} +\cs_generate_variant:Nn \phone_DE_vorwahl_schreiben:nN {Vx} % #1: Nummer, #2: Mindestlänge, #3: Höchstlänge, #4: Nummernart @@ -747,7 +894,7 @@ { \int_set:Nn \l_tmpa_int {\str_count:N #1} \int_add:Nn \l_tmpa_int {\str_count:n {#2}} - \int_add:Nn \l_tmpa_int {\str_count:N \l_phone_DE_durchwahl_str} + \int_add:Nn \l_tmpa_int {\str_count:N \l_phone_bereinigte_durchwahl_str} \int_compare:nNnTF {\l_tmpa_int} > {12} { @@ -755,7 +902,7 @@ } { \int_set:Nn \l_tmpa_int {\str_count:n {#2}} - \int_add:Nn \l_tmpa_int {\str_count:N \l_phone_DE_durchwahl_str} + \int_add:Nn \l_tmpa_int {\str_count:N \l_phone_bereinigte_durchwahl_str} \int_compare:nNnTF {\l_tmpa_int} < {3} { @@ -774,7 +921,7 @@ } % #1: Vorwahl, #2: Teilnehmerrufnummer -\cs_new:Npn \phone_DE_teilnehmerrufnummer_ausgeben:Nn #1 #2 +\cs_new:Npn \phone_DE_teilnehmerrufnummer_schreiben:Nn #1 #2 { % Überprüfen der Nummernlänge \str_if_empty:NTF #1 @@ -850,7 +997,7 @@ { % Für gültige Nummern mit Vorwahl Linktext schreiben: \str_put_right:Nn \l_phone_linktext_str {#2} - \str_put_right:NV \l_phone_linktext_str \l_phone_DE_durchwahl_str + \str_put_right:NV \l_phone_linktext_str \l_phone_bereinigte_durchwahl_str } { % Für ungültige Nummern mit Vorwahl Linktext löschen: @@ -860,27 +1007,27 @@ \bool_if:NTF \l_phone_DE_teilnehmerrufnummer_gueltig_bool { - \phone_gruppierte_ziffernfolge_ausgeben:n {#2} + \phone_gruppierte_ziffernfolge_schreiben:n {#2} } { \str_put_right:Nn \l_phone_ausgabetext_tl {#2} } - \str_if_empty:NF \l_phone_DE_durchwahl_str + \str_if_empty:NF \l_phone_bereinigte_durchwahl_str { \tl_put_right:NV \l_phone_ausgabetext_tl \c_phone_bindestrich_tl - \phone_gruppierte_ziffernfolge_ausgeben:V \l_phone_DE_durchwahl_str + \phone_gruppierte_ziffernfolge_schreiben:V \l_phone_bereinigte_durchwahl_str } } -\cs_generate_variant:Nn \phone_DE_teilnehmerrufnummer_ausgeben:Nn {Nx} +\cs_generate_variant:Nn \phone_DE_teilnehmerrufnummer_schreiben:Nn {Nx,NV} -\cs_new_protected:Npn \phone_DE_nummer_ausgeben:n #1 +\cs_new_protected:Npn \phone_DE_nummer_schreiben: { - \str_if_eq:xnTF {\str_head:n {#1}} {0} + \str_if_eq:xnTF {\str_head:N \l_phone_bereinigte_nummer_str} {0} { - \int_set:Nn \l_phone_DE_hauptnummerlaenge_int {\str_count:n {#1}} + \int_set:Nn \l_phone_DE_hauptnummerlaenge_int {\str_count:N \l_phone_bereinigte_nummer_str} \bool_set_false:N \l_phone_vorwahl_gefunden_bool @@ -890,20 +1037,20 @@ { \int_compare:nT {\l_phone_DE_hauptnummerlaenge_int >= ##1} { - \str_set:Nx \l_phone_DE_vorwahl_str {\str_range:nnn {#1} {1} {##1}} + \str_set:Nx \l_phone_DE_vorwahl_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {1} {##1}} \clist_if_in:NVT \c_phone_DE_vorwahlliste_clist \l_phone_DE_vorwahl_str { \bool_set_true:N \l_phone_vorwahl_gefunden_bool - \phone_DE_vorwahl_ausgeben:Vx \l_phone_DE_vorwahl_str {\int_compare_p:nNn {##1} < {\l_phone_DE_hauptnummerlaenge_int}} + \phone_DE_vorwahl_schreiben:Vx \l_phone_DE_vorwahl_str {\int_compare_p:nNn {##1} < {\l_phone_DE_hauptnummerlaenge_int}} \int_compare:nNnTF {##1} = {\l_phone_DE_hauptnummerlaenge_int} { \msg_warning:nnn {phonenumbers} {missing~subscriber~number} {German} } { - \phone_DE_teilnehmerrufnummer_ausgeben:Nx \l_phone_DE_vorwahl_str {\str_range:nnn {#1} {##1 + 1} {-1}} + \phone_DE_teilnehmerrufnummer_schreiben:Nx \l_phone_DE_vorwahl_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {##1 + 1} {-1}} } } } @@ -913,17 +1060,15 @@ \bool_if:nF {\l_phone_vorwahl_gefunden_bool} { \msg_warning:nnn {phonenumbers} {invalid~area~code} {German} - #1 - \str_use:N \l_phone_DE_durchwahl_str + \str_use:N \l_phone_bereinigte_nummer_str + \str_use:N \l_phone_bereinigte_durchwahl_str } } { - \phone_DE_teilnehmerrufnummer_ausgeben:Nn \c_empty_tl {#1} + \phone_DE_teilnehmerrufnummer_schreiben:NV \c_empty_tl \l_phone_bereinigte_nummer_str } } -\cs_generate_variant:Nn \phone_DE_nummer_ausgeben:n {V} - %%%%%%%%%%%%%%%%%%%% FRANKREICH %%%%%%%%%%%%%%%%%%%% @@ -933,8 +1078,6 @@ \clist_new:N \c_phone_FR_vorwahlliste_clist \clist_concat:NNN \c_phone_FR_vorwahlliste_clist \c_phone_FR_ortsvorwahlliste_clist \c_phone_FR_sondervorwahlliste_clist -\int_new:N \l_phone_FR_nummerlaenge_int - \msg_new:nnn {phonenumbers} {FR/illegal~home~area~code} { The~only~legal~home~area~code~in~France~is~0508~(Saint-Pierre-et-Miquelon).~#1~cannot~be~set~as~home~area~code~\msg_line_context:. @@ -954,7 +1097,6 @@ % In Frankreich ist nur 0508 für Saint-Pierre-et-Miquelon als Heimatvorwahl erlaubt: \str_if_eq:nnTF {#1} {0508} { - \str_set:Nn \l_phone_heimatland_str {FR} \str_set:Nn \l_phone_heimatvorwahl_str {#1} \msg_info:nnnv {phonenumbers} {home~area~code~set} {#1} {c_phone_FR_ortsname_#1_tl} } @@ -995,9 +1137,9 @@ } % #1: Vorwahl -\cs_new:Npn \phone_FR_vorwahl_ausgeben:n #1 +\cs_new:Npn \phone_FR_vorwahl_schreiben:n #1 { - \str_if_eq:VnTF \l_phone_auslandsvorwahltyp_str {off} + \bool_if:nTF {\str_if_eq_p:Vn \l_phone_auslandsvorwahltyp_str {off} || \str_if_eq_p:Vn \l_phone_heimatland_str {FR}} { \clist_if_in:NnT \c_phone_FR_sondervorwahlliste_clist {#1} { @@ -1013,7 +1155,7 @@ { {number} { - \phone_gruppierte_ziffernfolge_ausgeben:n {#1} + \phone_gruppierte_ziffernfolge_schreiben:n {#1} \tl_put_right:Nn \l_phone_ausgabetext_tl {\,} } {place} @@ -1024,7 +1166,7 @@ \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl } { - \phone_gruppierte_ziffernfolge_ausgeben:n {#1} + \phone_gruppierte_ziffernfolge_schreiben:n {#1} \tl_put_right:Nn \l_phone_ausgabetext_tl {\,} } } @@ -1036,19 +1178,20 @@ \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl } - \phone_gruppierte_ziffernfolge_ausgeben:n {#1} + \phone_gruppierte_ziffernfolge_schreiben:n {#1} \tl_put_right:NV \l_phone_ausgabetext_tl {\,} } } } } { - \phone_auslandsvorwahl_ausgeben:x {\phone_FR_ermittle_landeskennzahl:n {#1}} + \phone_auslandsvorwahl_schreiben:x {\phone_FR_ermittle_landeskennzahl:n {#1}} + \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl \str_if_eq:nnF {#1} {0508} % in Saint-Pierre-et-Miquelon entfällt die Ortsvorwahl { - \phone_gruppierte_ziffernfolge_ausgeben:x {\str_tail:n {#1}} + \phone_gruppierte_ziffernfolge_schreiben:x {\str_tail:n {#1}} \tl_put_right:Nn \l_phone_ausgabetext_tl {\,} } } @@ -1061,47 +1204,47 @@ } } -\cs_generate_variant:Nn \phone_FR_vorwahl_ausgeben:n {V} +\cs_generate_variant:Nn \phone_FR_vorwahl_schreiben:n {V} -\cs_new:Npn \phone_FR_nummer_ausgeben:n #1 +\cs_new:Npn \phone_FR_nummer_schreiben: { - \int_set:Nn \l_phone_FR_nummerlaenge_int {\str_count:n {#1}} + \int_set:Nn \l_phone_nummerlaenge_int {\str_count:N \l_phone_bereinigte_nummer_str} - \int_compare:nNnTF {\l_phone_FR_nummerlaenge_int} < {10} + \int_compare:nNnTF {\l_phone_nummerlaenge_int} < {10} { - \str_if_eq:xnTF {\str_head:n {#1}} {3} + \str_if_eq:xnTF {\str_head:N \l_phone_bereinigte_nummer_str} {3} { - \int_compare:nNnTF {\l_phone_FR_nummerlaenge_int} < {4} + \int_compare:nNnTF {\l_phone_nummerlaenge_int} < {4} { \msg_warning:nnnn {phonenumbers} {number~too~short} {French~short} {4} - \tl_put_right:Nn \l_phone_ausgabetext_tl {#1} + \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str } { - \int_compare:nNnTF {\l_phone_FR_nummerlaenge_int} > {4} + \int_compare:nNnTF {\l_phone_nummerlaenge_int} > {4} { \msg_warning:nnnn {phonenumbers} {number~too~long} {French~short} {4} - \tl_put_right:Nn \l_phone_ausgabetext_tl {#1} + \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str } { - \phone_gruppierte_ziffernfolge_ausgeben:n {#1} - \str_put_right:Nn \l_phone_linktext_str {#1} + \phone_gruppierte_ziffernfolge_schreiben:V \l_phone_bereinigte_nummer_str + \str_put_right:NV \l_phone_linktext_str \l_phone_bereinigte_nummer_str } } } { \msg_warning:nnnn {phonenumbers} {number~too~short} {French} {10} - \tl_put_right:Nn \l_phone_ausgabetext_tl {#1} + \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str } } { - \int_compare:nNnTF {\l_phone_FR_nummerlaenge_int} > {10} + \int_compare:nNnTF {\l_phone_nummerlaenge_int} > {10} { \msg_warning:nnnn {phonenumbers} {number~too~long} {French} {10} - \tl_put_right:Nn \l_phone_ausgabetext_tl {#1} + \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str } { - \str_if_eq:xnTF {\str_head:n {#1}} {0} + \str_if_eq:xnTF {\str_head:N \l_phone_bereinigte_nummer_str} {0} { \bool_set_false:N \l_phone_vorwahl_gefunden_bool @@ -1109,18 +1252,18 @@ { \bool_if:nF {\l_phone_vorwahl_gefunden_bool} { - \int_compare:nT {\l_phone_FR_nummerlaenge_int >= ##1} + \int_compare:nT {\l_phone_nummerlaenge_int >= ##1} { - \str_set:Nx \l_tmpa_str {\str_range:nnn {#1} {1} {##1}} + \str_set:Nx \l_tmpa_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {1} {##1}} \clist_if_in:NVT \c_phone_FR_vorwahlliste_clist \l_tmpa_str { \bool_set_true:N \l_phone_vorwahl_gefunden_bool - \phone_FR_vorwahl_ausgeben:V \l_tmpa_str + \phone_FR_vorwahl_schreiben:V \l_tmpa_str - \str_set:Nx \l_tmpb_str {\str_range:nnn {#1} {##1 + 1} {-1}} - \phone_gruppierte_ziffernfolge_ausgeben:V \l_tmpb_str + \str_set:Nx \l_tmpb_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {##1 + 1} {-1}} + \phone_gruppierte_ziffernfolge_schreiben:V \l_tmpb_str \str_put_right:NV \l_phone_linktext_str \l_tmpb_str } } @@ -1130,19 +1273,17 @@ \bool_if:nF {\l_phone_vorwahl_gefunden_bool} { \msg_warning:nnn {phonenumbers} {invalid~area~code} {French} - \tl_put_right:Nn \l_phone_ausgabetext_tl {#1} + \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str } } { \msg_warning:nn {phonenumbers/FR} {missing~zero} - \tl_put_right:Nn \l_phone_ausgabetext_tl {#1} + \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str } } } } -\cs_generate_variant:Nn \phone_FR_nummer_ausgeben:n {V} - %%%%%%%%%%%%%%%%%%%% NORDAMERIKA %%%%%%%%%%%%%%%%%%%% @@ -1189,16 +1330,15 @@ % #1: Heimatvorwahl \cs_new:Npn \phone_US_heimatvorwahl_festlegen:n #1 { - \clist_if_in:NnTF {\c_phone_US_ortsvorwahlliste_clist} {#1} + \clist_if_in:NnTF \c_phone_US_ortsvorwahlliste_clist {#1} { - \clist_if_in:NnTF {\c_phone_US_ortsvorwahlliste_ten_digits_clist} {#1} + \clist_if_in:NnTF \c_phone_US_ortsvorwahlliste_ten_digits_clist {#1} { % 10-Ziffern-Wählen erforderlich: \msg_warning:nnn {phonenumbers/US} {illegal~home~area~code} {#1} } { % 7-Ziffern-Wählen möglich, Heimatvorwahl setzen: - \str_set:Nn \l_phone_heimatland_str {US} \str_set:Nn \l_phone_heimatvorwahl_str {#1} \msg_info:nnnv {phonenumbers} {home~area~code~set} {#1} {c_phone_US_ortsname_#1_tl} } @@ -1210,9 +1350,9 @@ } % #1: Vorwahl, #2: Folgt eine Rufnummer? -\cs_new:Npn \phone_US_vorwahl_ausgeben:nN #1 #2 +\cs_new:Npn \phone_US_vorwahl_schreiben:nN #1 #2 { - \str_if_eq:VnTF \l_phone_auslandsvorwahltyp_str {off} + \bool_if:nTF {\str_if_eq_p:Vn \l_phone_auslandsvorwahltyp_str {off} || \str_if_eq_p:Vn \l_phone_heimatland_str {US}} { \bool_if:nF {\str_if_eq_p:Vn \l_phone_heimatland_str {US} && \str_if_eq_p:Vn \l_phone_heimatvorwahl_str {#1}} { @@ -1344,9 +1484,10 @@ } } { - \phone_auslandsvorwahl_ausgeben:n {1} + \phone_auslandsvorwahl_schreiben:n {1} - \tl_put_right:Nn \l_phone_ausgabetext_tl {\c_space_tl #1} + \tl_put_right:Nn \l_phone_ausgabetext_tl {\c_space_tl} + \tl_put_right:Nn \l_phone_ausgabetext_tl {#1} \bool_if:NT #2 { @@ -1361,11 +1502,11 @@ } } -\cs_generate_variant:Nn \phone_US_vorwahl_ausgeben:nN {VN} +\cs_generate_variant:Nn \phone_US_vorwahl_schreiben:nN {VN} % #1: Ortsvorwahl, #2: Vermittlungsstellennummer -\cs_new:Npn \phone_US_vermittlungsstellennummer_ausgeben:nn #1 #2 +\cs_new:Npn \phone_US_vermittlungsstellennummer_schreiben:nn #1 #2 { \str_case:xnTF {\str_head:n {#2}} { @@ -1406,7 +1547,7 @@ \tl_put_right:Nn \l_phone_ausgabetext_tl {#2} - \str_if_eq:VnTF \l_phone_auslandsvorwahltyp_str {off} + \bool_if:nTF {\str_if_eq_p:Vn \l_phone_auslandsvorwahltyp_str {off} || \str_if_eq_p:Vn \l_phone_heimatland_str {US}} { \tl_put_right:NV \l_phone_ausgabetext_tl \c_phone_bindestrich_tl } @@ -1427,50 +1568,50 @@ } } -\cs_generate_variant:Nn \phone_US_vermittlungsstellennummer_ausgeben:nn {Vx} +\cs_generate_variant:Nn \phone_US_vermittlungsstellennummer_schreiben:nn {Vx} -\cs_new:Npn \phone_US_nummer_ausgeben:n #1 +\cs_new:Npn \phone_US_nummer_schreiben: { - \int_case:nnF {\str_count:n {#1}} + \int_case:nnF {\str_count:N \l_phone_bereinigte_nummer_str} { {3} { - \clist_if_in:NnTF \c_phone_US_vorwahlliste_clist {#1} + \clist_if_in:NVTF \c_phone_US_vorwahlliste_clist \l_phone_bereinigte_nummer_str { \msg_warning:nnn {phonenumbers} {missing~subscriber~number} {American} } { - \msg_warning:nnn {phonenumbers/US} {invalid~area~code} {#1} + \msg_warning:nnV {phonenumbers/US} {invalid~area~code} \l_phone_bereinigte_nummer_str } - \phone_US_vorwahl_ausgeben:nN {#1} \c_false_bool + \phone_US_vorwahl_schreiben:VN \l_phone_bereinigte_nummer_str \c_false_bool } {7} { - \phone_US_vermittlungsstellennummer_ausgeben:Vx \c_empty_tl {\str_range:nnn {#1} {1} {3}} + \phone_US_vermittlungsstellennummer_schreiben:Vx \c_empty_tl {\str_range:Nnn \l_phone_bereinigte_nummer_str {1} {3}} - \tl_put_right:Nx \l_phone_ausgabetext_tl {\str_range:nnn {#1} {4} {7}} + \tl_put_right:Nx \l_phone_ausgabetext_tl {\str_range:Nnn \l_phone_bereinigte_nummer_str {4} {7}} } {10} { - \str_set:Nx \l_tmpa_str {\str_range:nnn {#1} {1} {3}} + \str_set:Nx \l_tmpa_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {1} {3}} \clist_if_in:NVF \c_phone_US_vorwahlliste_clist \l_tmpa_str { \msg_warning:nnx {phonenumbers/US} {invalid~area~code} {\l_tmpa_str} } - \phone_US_vorwahl_ausgeben:VN \l_tmpa_str \c_true_bool + \phone_US_vorwahl_schreiben:VN \l_tmpa_str \c_true_bool - \phone_US_vermittlungsstellennummer_ausgeben:Vx \l_tmpa_str {\str_range:nnn {#1} {4} {6}} + \phone_US_vermittlungsstellennummer_schreiben:Vx \l_tmpa_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {4} {6}} - \tl_put_right:Nx \l_phone_ausgabetext_tl {\str_range:nnn {#1} {7} {10}} - \str_put_right:Nx \l_phone_linktext_str {\str_range:nnn {#1} {7} {10}} + \tl_put_right:Nx \l_phone_ausgabetext_tl {\str_range:Nnn \l_phone_bereinigte_nummer_str {7} {10}} + \str_put_right:Nx \l_phone_linktext_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {7} {10}} } } { - \int_compare:nNnTF {\str_count:n {#1}} < {10} + \int_compare:nNnTF {\str_count:N \l_phone_bereinigte_nummer_str} < {10} { \msg_warning:nnnn {phonenumbers} {number~too~short} {American} {10} } @@ -1478,11 +1619,56 @@ \msg_warning:nnnn {phonenumbers} {number~too~long} {American} {10} } - \tl_put_right:Nn \l_phone_ausgabetext_tl {#1} + \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str } } -\cs_generate_variant:Nn \phone_US_nummer_ausgeben:n {V} + +%%%%%%%%%%%%%%%%%%%% SONSTIGE LÄNDER %%%%%%%%%%%%%%%%%%%% + +\cs_new:Npn \phone_SONST_nummer_schreiben: + { + \int_set:Nn \l_phone_nummerlaenge_int {\str_count:N \l_phone_bereinigte_nummer_str} + + \bool_set_false:N \l_phone_vorwahl_gefunden_bool + + \int_step_inline:nnnn {3} {-1} {1} + { + \bool_if:nF {\l_phone_vorwahl_gefunden_bool} + { + \int_compare:nT {\l_phone_nummerlaenge_int >= ##1} + { + \str_set:Nx \l_tmpa_str {\str_range:Nnn \l_phone_bereinigte_nummer_str {1} {##1}} + + \clist_if_in:NVT \c_phone_landeskennzahlenliste_clist \l_tmpa_str + { + \bool_set_true:N \l_phone_vorwahl_gefunden_bool + + \phone_auslandsvorwahl_schreiben:V \l_tmpa_str + + \int_compare:nNnTF {##1} = {\l_phone_nummerlaenge_int} + { + \msg_warning:nn {phonenumbers} {country~code~only} + } + { + \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl + \tl_put_right:Nx \l_phone_ausgabetext_tl {\str_range:Nnn \l_phone_bereinigte_nummer_str {##1 + 1} {-1}} + + \str_put_right:Nn \l_phone_linktext_str {+} + \str_put_right:NV \l_phone_linktext_str \l_phone_bereinigte_nummer_str + } + } + } + } + } + + \bool_if:nF {\l_phone_vorwahl_gefunden_bool} + { + \msg_warning:nnn {phonenumbers} {invalid~country~code} + \tl_put_right:NV \l_phone_ausgabetext_tl \c_phone_pluszeichen_tl + \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str + } + } \ProcessKeysPackageOptions {phonenumbers} |