summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty')
-rw-r--r--Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty2044
1 files changed, 312 insertions, 1732 deletions
diff --git a/Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty b/Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty
index b1a24faf768..658aaa3b50d 100644
--- a/Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty
+++ b/Master/texmf-dist/tex/latex/phonenumbers/phonenumbers.sty
@@ -1,10 +1,8 @@
-% phonenumbers.sty
-% LaTeX-Paket zur Formatierung von Telefonnummern
+% phonenumbers package: phonenumbers.sty
% LaTeX package for formatting telephone numbers
-% Autor: K. Wehr
-% Version: 2.4
-% Datum: 13. Mai 2022
-
+% Author: K. Wehr
+% Version: 2.5
+% Date: 2022-07-01
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -12,15 +10,230 @@
% http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
+\NeedsTeXFormat{LaTeX2e}[2021-11-15]
+\ProvidesExplPackage {phonenumbers} {2022-07-01} {2.5} {Telephone number package}
-
-\ProvidesExplPackage {phonenumbers} {2022-05-13} {2.4} {Telephone number package}
-
-\RequirePackage{l3keys2e}
-\RequirePackage{ltxcmds}
+\RequirePackage {l3keys2e}
\clist_const:Nn \c_phone_ziffern_clist {0,1,2,3,4,5,6,7,8,9}
\clist_const:Nn \c_phone_gliederungszeichen_clist {(,),[,],/}
+\clist_const:Nn \c_phone_landeskennzahlen_clist {1,
+20,
+211,
+212,
+213,
+216,
+218,
+220,
+221,
+222,
+223,
+224,
+225,
+226,
+227,
+228,
+229,
+230,
+231,
+232,
+233,
+234,
+235,
+236,
+237,
+238,
+239,
+240,
+241,
+242,
+243,
+244,
+245,
+246,
+247,
+248,
+249,
+250,
+251,
+252,
+253,
+254,
+255,
+256,
+257,
+258,
+260,
+261,
+262,
+263,
+264,
+265,
+266,
+267,
+268,
+269,
+27,
+290,
+291,
+297,
+298,
+299,
+30,
+31,
+32,
+33,
+34,
+350,
+351,
+352,
+353,
+354,
+355,
+356,
+357,
+358,
+359,
+36,
+370,
+371,
+372,
+373,
+374,
+375,
+376,
+377,
+378,
+379,
+380,
+381,
+382,
+383,
+385,
+386,
+387,
+388,
+389,
+39,
+40,
+41,
+420,
+421,
+423,
+43,
+44,
+45,
+46,
+47,
+48,
+49,
+500,
+501,
+502,
+503,
+504,
+505,
+506,
+507,
+508,
+509,
+51,
+52,
+53,
+54,
+55,
+56,
+57,
+58,
+590,
+591,
+592,
+593,
+594,
+595,
+596,
+597,
+598,
+599,
+60,
+61,
+62,
+63,
+64,
+65,
+66,
+670,
+672,
+673,
+674,
+675,
+676,
+677,
+678,
+679,
+680,
+681,
+682,
+683,
+685,
+686,
+687,
+688,
+689,
+690,
+691,
+692,
+7,
+800,
+808,
+81,
+82,
+84,
+850,
+852,
+853,
+855,
+856,
+86,
+870,
+878,
+880,
+881,
+882,
+883,
+886,
+888,
+90,
+91,
+92,
+93,
+94,
+95,
+960,
+961,
+962,
+963,
+964,
+965,
+966,
+967,
+968,
+971,
+972,
+973,
+974,
+975,
+976,
+977,
+979,
+98,
+991,
+992,
+993,
+994,
+995,
+996,
+998}
\tl_const:Nn \c_phone_bindestrich_tl { \kern 1pt - \kern 1pt }
\tl_const:Nn \c_phone_schraegstrich_tl { \kern 1pt \slash \kern 1pt }
@@ -39,8 +252,11 @@
\str_new:N \l_phone_linktext_str
\int_new:N \l_phone_ziffernzahl_int
-\int_new:N \l_phone_nummerlaenge_int
+\int_new:N \l_phone_nummernlaenge_int
\int_new:N \l_phone_gruppierungsminimum_int
+\int_new:N \l_phone_hauptnummernlaenge_int % Nummernlänge im nationalen Format ohne Durchwahl
+\int_new:N \l_phone_vorwahllaenge_int
+\int_new:N \l_phone_bindestrichposition_int
\tl_new:N \l_phone_ausgabetext_tl
\tl_new:N \l_phone_formatierte_nummer_tl
@@ -51,6 +267,10 @@
\bool_new:N \l_phone_durchwahl_leer_bool
\bool_new:N \l_phone_nummer_verlinken_bool
\bool_new:N \l_phone_teilnehmerrufnummer_gueltig_bool
+\bool_new:N \l_phone_erstes_zeichen_bool
+\bool_new:N \l_phone_zweites_zeichen_bool
+\bool_new:N \l_phone_auslandsnummer_bool
+\bool_new:N \l_phone_null_am_anfang_bool
\cs_generate_variant:Nn \str_if_eq:nnT {xnT}
\cs_generate_variant:Nn \str_if_eq:nnF {xnF}
@@ -64,7 +284,6 @@
\cs_generate_variant:Nn \msg_warning:nnn {onn}
\cs_generate_variant:Nn \msg_warning:nnn {nnV}
-
\msg_new:nnn {phonenumbers} {illegal character}
{
illegal~character~'#1'~in~phone~number~
@@ -86,7 +305,13 @@
\msg_new:nnn {phonenumbers} {illegal extension}
{
extension~(Durchwahl)~of~
- \phone_landesadjektiv:V \l_phone_land_str
+ \str_if_empty:NTF \l_phone_land_str
+ {
+ unsupported
+ }
+ {
+ \use:c { c_phone_ \l_phone_land_str _landesadjektiv_tl }
+ }
\c_space_tl
phone~number~ignored~
\msg_line_context:
@@ -94,7 +319,7 @@
\msg_new:nnn {phonenumbers} {odd extension}
{
- \phone_landesadjektiv:V \l_phone_land_str
+ \use:c { c_phone_ \l_phone_land_str _landesadjektiv_tl }
\c_space_tl
non-geographic~number~should~not~contain~an~extension~(Durchwahl)~
\msg_line_context:
@@ -103,7 +328,7 @@
\msg_new:nnn {phonenumbers} {subscriber number too short}
{
subscriber~number~(Teilnehmerrufnummer)~has~less~than~#1~digits~in~
- \phone_landesadjektiv:V \l_phone_land_str
+ \use:c { c_phone_ \l_phone_land_str _landesadjektiv_tl }
\c_space_tl
phone~number~
\msg_line_context:
@@ -112,7 +337,7 @@
\msg_new:nnn {phonenumbers} {subscriber number too long}
{
subscriber~number~(Teilnehmerrufnummer)~has~more~than~#1~digits~in~
- \phone_landesadjektiv:V \l_phone_land_str
+ \use:c { c_phone_ \l_phone_land_str _landesadjektiv_tl }
\c_space_tl
phone~number~
\msg_line_context:
@@ -121,7 +346,7 @@
\msg_new:nnn {phonenumbers} {illegal start of subscriber number}
{
subscriber~number~(Teilnehmerrufnummer)~starts~with~#1~in~
- \phone_landesadjektiv:V \l_phone_land_str
+ \use:c { c_phone_ \l_phone_land_str _landesadjektiv_tl }
\c_space_tl
phone~number~
\msg_line_context:
@@ -130,7 +355,7 @@
\msg_new:nnn {phonenumbers} {missing subscriber number}
{
no~subscriber~number~(Teilnehmerrufnummer)~given~in~
- \phone_landesadjektiv:V \l_phone_land_str
+ \use:c { c_phone_ \l_phone_land_str _landesadjektiv_tl }
\c_space_tl
phone~number~
\msg_line_context:
@@ -139,7 +364,7 @@
\msg_new:nnn {phonenumbers} {invalid area code}
{
unknown~area~code~(Vorwahl)~in~
- \phone_landesadjektiv:V \l_phone_land_str
+ \use:c { c_phone_ \l_phone_land_str _landesadjektiv_tl }
\c_space_tl
phone~number~
\msg_line_context:
@@ -147,7 +372,7 @@
\msg_new:nnn {phonenumbers} {number too short}
{
- \phone_landesadjektiv:V \l_phone_land_str
+ \use:c { c_phone_ \l_phone_land_str _landesadjektiv_tl }
\c_space_tl
#1~number~has~less~than~#2~digits~
\msg_line_context:
@@ -155,7 +380,7 @@
\msg_new:nnn {phonenumbers} {number too long}
{
- \phone_landesadjektiv:V \l_phone_land_str
+ \use:c { c_phone_ \l_phone_land_str _landesadjektiv_tl }
\c_space_tl
#1~number~has~more~than~#2~digits~
\msg_line_context:
@@ -181,7 +406,7 @@
\msg_new:nnn {phonenumbers} {home area code set}
{
Your~home~is~in~
- \tl_use:c {c_phone_\l_phone_heimatland_str _ortsname_#1_tl}
+ \tl_use:c { c_phone_ \l_phone_heimatland_str _ortsname_ #1 _tl }
\c_space_tl
(area~code~#1)~according~to~line~
\msg_line_number:.
@@ -198,7 +423,7 @@
\msg_new:nnn {phonenumbers} {invalid home area code}
{
#1~unknown~as~
- \phone_landesadjektiv:V \l_phone_heimatland_str
+ \use:c { c_phone_ \l_phone_heimatland_str _landesadjektiv_tl }
\c_space_tl
geographic~area~code~(Ortsvorwahl)~
\msg_line_context:
@@ -216,24 +441,6 @@
\msg_line_context:
}
-\cs_new:Npn \phone_landesadjektiv:n #1
- {
- \str_case:nnF {#1}
- {
- {DE} {German}
- {AT} {Austrian}
- {FR} {French}
- {UK} {British}
- {US} {North~American}
- }
- {
- unsupported
- }
- }
-
-\cs_generate_variant:Nn \phone_landesadjektiv:n {V}
-
-
\keys_define:nn {phonenumbers}
{
country .choices:nn = {DE,AT,FR,UK,US}
@@ -331,7 +538,7 @@
{
home-area-code .code:n =
{
- \str_if_eq:nnTF {#1}{none}
+ \str_if_eq:nnTF {#1} {none}
{
\str_if_empty:NF \l_phone_heimatvorwahl_str
{
@@ -346,7 +553,7 @@
\msg_info:nn {phonenumbers} {home country set}
}
- \phone_heimatvorwahl_erlaubt:nT {#1}
+ \use:c { phone_ \l_phone_heimatland_str _heimatvorwahl_erlaubt:nT } {#1}
{
% Auslassen der Vorwahl möglich, Heimatvorwahl setzen:
\str_set:Nn \l_phone_heimatvorwahl_str {#1}
@@ -368,57 +575,6 @@
group-min .value_required:n = true
}
-
-% Prüfe, ob eine Vorwahl als Heimatvorwahl zulässig ist.
-% #1: Heimatvorwahl
-\prg_new_protected_conditional:Npnn \phone_heimatvorwahl_erlaubt:n #1 {T}
- {
- \clist_if_in:cnTF {c_phone_\l_phone_heimatland_str _ortsvorwahlen_clist} {#1}
- {
- \str_case:VnF \l_phone_heimatland_str
- {
- % alle deutschen Ortsvorwahlen können Heimatvorwahl sein
- {DE} { \prg_return_true: }
- % alle österreichischen Ortsvorwahlen können Heimatvorwahl sein
- {AT} { \prg_return_true: }
- % in Frankreich kann nur 0508 Heimatvorwahl sein
- {FR}
- {
- \str_if_eq:nnTF {#1} {0508} { \prg_return_true: }
- {
- \msg_warning:nnn {phonenumbers} {FR/illegal home area code} {#1}
- \prg_return_false:
- }
- }
- }
- {
- % Name der Liste mit den obligatorischen Ortsvorwahlen
- \str_set:Nx \l_tmpa_str {c_phone_\l_phone_heimatland_str _obligatorische_ortsvorwahlen_clist}
-
- % in anderen Ländern können nur nicht obligatorische Ortsvorwahlen Heimatvorwahl sein
- \clist_if_exist:cTF {\l_tmpa_str}
- {
- \clist_if_in:cnTF {\l_tmpa_str} {#1}
- {
- \msg_warning:onn {phonenumbers} {\l_phone_heimatland_str/illegal home area code} {#1}
- \prg_return_false:
- }
- {
- \prg_return_true:
- }
- }
- {
- \prg_return_true:
- }
- }
- }
- {
- \msg_warning:nnn {phonenumbers} {invalid home area code} {#1}
- \prg_return_false:
- }
- }
-
-
% einen Nummernteil von vorne in Zweiergruppen gruppiert schreiben, sofern er nicht kürzer als das Gruppierungsminimum ist
\cs_new_protected:Npn \phone_von_vorne_gruppiert_schreiben:n #1
{
@@ -446,8 +602,7 @@
\cs_generate_variant:Nn \phone_von_vorne_gruppiert_schreiben:n {x,V}
-
-% einen Nummernteil von in Zweiergruppen gruppiert mit führender Einzelziffer schreiben, sofern er nicht kürzer als das Gruppierungsminimum ist
+% einen Nummernteil in Zweiergruppen gruppiert mit führender Einzelziffer schreiben, sofern er nicht kürzer als das Gruppierungsminimum ist
\cs_new_protected:Npn \phone_versetzt_gruppiert_schreiben:n #1
{
\int_set:Nn \l_phone_ziffernzahl_int { \tl_count:n {#1} }
@@ -474,7 +629,6 @@
\cs_generate_variant:Nn \phone_versetzt_gruppiert_schreiben:n {x}
-
% einen Nummernteil von hinten in Zweiergruppen gruppiert schreiben, sofern er nicht kürzer als das Gruppierungsminimum ist
\cs_new_protected:Npn \phone_von_hinten_gruppiert_schreiben:n #1
{
@@ -502,47 +656,51 @@
\cs_generate_variant:Nn \phone_von_hinten_gruppiert_schreiben:n {x,V}
+% #1: Vorwahl, #2: Soll die führende Null ausgegeben werden?
+\cs_new_protected:Npn \phone_geklammerte_ziffernvorwahl_schreiben:nN #1#2
+ {
+ % Klammern werden nur bei Ortsvorwahlen gesetzt
+ \clist_if_in:cnTF { c_phone_ \l_phone_land_str _ortsvorwahlen_clist } {#1}
+ {
+ \tl_put_right:Nn \l_phone_ausgabetext_tl {(}
+ \use:c { phone_ \l_phone_land_str _ziffernvorwahl_schreiben:nN } {#1} #2
+ \tl_put_right:Nn \l_phone_ausgabetext_tl {)}
+ }
+ {
+ \use:c { phone_ \l_phone_land_str _ziffernvorwahl_schreiben:nN } {#1} #2
+ }
+ }
% #1: Landeskennzahl
-\cs_new_protected:Npn \phone_auslandsvorwahl_schreiben:n #1
+\cs_new_protected:Npn \phone_gruppierte_auslandsvorwahl_schreiben:n #1
{
- \str_case:VnTF \l_phone_land_str
+ \str_case:Vn \l_phone_auslandsvorwahltyp_str
{
- {DE} { }
- {AT} { }
- {FR} { }
+ {international} { \tl_put_right:Nn \l_phone_ausgabetext_tl { \c_phone_pluszeichen_tl #1 } }
+ {european} { \phone_von_hinten_gruppiert_schreiben:n { 00 #1 } }
+ {american} { \phone_von_hinten_gruppiert_schreiben:n { 011 #1 } }
}
+ }
+
+\cs_generate_variant:Nn \phone_gruppierte_auslandsvorwahl_schreiben:n {x}
+
+% #1: Landeskennzahl
+\cs_new_protected:Npn \phone_ungruppierte_auslandsvorwahl_schreiben:n #1
+ {
+ \tl_put_right:Nx \l_phone_ausgabetext_tl
{
- \str_case:Vn \l_phone_auslandsvorwahltyp_str
+ \str_case:VnF \l_phone_auslandsvorwahltyp_str
{
- {international} { \tl_put_right:Nn \l_phone_ausgabetext_tl { \c_phone_pluszeichen_tl #1 } }
- {european} { \phone_von_hinten_gruppiert_schreiben:n {00#1} }
- {american} { \phone_von_hinten_gruppiert_schreiben:n {011#1} }
+ {european} { 00 #1 }
+ {american} { 011 #1 }
}
- }
- {
- \tl_put_right:Nx \l_phone_ausgabetext_tl
{
- \str_case:VnF \l_phone_auslandsvorwahltyp_str
- {
- {european} {00 #1}
- {american} {011 #1}
- }
- {
- \c_phone_pluszeichen_tl #1
- }
+ \c_phone_pluszeichen_tl #1
}
}
}
-\cs_generate_variant:Nn \phone_auslandsvorwahl_schreiben:n {x,V}
-
-
-\bool_new:N \l_phone_erstes_zeichen_bool
-\bool_new:N \l_phone_zweites_zeichen_bool
-\bool_new:N \l_phone_auslandsnummer_bool
-\bool_new:N \l_phone_null_am_anfang_bool
-\int_new:N \l_phone_bindestrichposition_int
+\cs_generate_variant:Nn \phone_ungruppierte_auslandsvorwahl_schreiben:n {V}
% #1: eingebene Nummer
\cs_new_protected:Npn \phone_nummer_ueberpruefen:n #1
@@ -662,7 +820,7 @@
}
}
{
- \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 3, nicht mit 33, 43, 44 oder 49 beginnend
}
}
}
@@ -676,15 +834,14 @@
}
}
- \bool_lazy_and:nnT
+ \bool_lazy_all:nT
{
- \bool_lazy_or_p:nn { \str_if_eq_p:Vn \l_phone_land_str {DE} } { \str_if_eq_p:Vn \l_phone_land_str {AT} }
+ { ! \str_if_empty_p:N \l_phone_land_str }
+ { \bool_if_p:c { c_phone_ \l_phone_land_str _erlaubt_durchwahl_bool } }
+ { \str_if_empty_p:N \l_phone_bereinigte_durchwahl_str }
}
{
- \str_if_empty_p:N \l_phone_bereinigte_durchwahl_str
- }
- {
- % deutsche oder österreichische Nummer ohne explizite Durchwahl
+ % Nummer ohne explizite Durchwahl in einem Land, das Durchwahlen erlaubt
\int_set:Nn \l_phone_bindestrichposition_int {-1}
\int_step_inline:nnnn { \str_count:N \l_phone_bereinigte_nummer_str } {-1} {1}
@@ -733,7 +890,6 @@
\cs_generate_variant:Nn \phone_nummer_ueberpruefen:n {x}
-
% #1: eingebene Durchwahl
\cs_new_protected:Npn \phone_durchwahl_ueberpruefen:n #1
{
@@ -762,27 +918,22 @@
\cs_generate_variant:Nn \phone_durchwahl_ueberpruefen:n {x}
-
\cs_new_protected:Npn \phone_nummer_ausgeben:
{
\bool_if:NF \l_phone_eingabe_leer_bool
{
- \str_case:VnF \l_phone_land_str
+ \str_if_empty:NTF \l_phone_land_str
{
- {DE} {\phone_DE_AT_nummer_schreiben:}
- {AT} {\phone_DE_AT_nummer_schreiben:}
- {FR} {\phone_FR_nummer_schreiben:}
- {UK} {\phone_UK_nummer_schreiben:}
- {US} {\phone_US_nummer_schreiben:}
+ \phone_nicht_unterstuetzte_nummer_schreiben:
}
{
- \phone_SONST_nummer_schreiben:
+ \use:c {phone_ \l_phone_land_str _nummer_schreiben:}
}
}
\bool_lazy_and:nnTF {\l_phone_nummer_verlinken_bool} { ! \str_if_empty_p:N \l_phone_linktext_str }
{
- \ltx@ifpackageloaded {hyperref}
+ \IfPackageLoadedTF {hyperref}
{
\href { tel \c_colon_str \l_phone_linktext_str } {\l_phone_ausgabetext_tl}
}
@@ -795,63 +946,6 @@
}
}
-\cs_new_protected:Npn \phone_vorwahlliste_ausgeben:n #1
- {
- \begin{tabbing}
- \str_case:VnF \l_phone_land_str
- {
- {US} { \hspace {3em} }
- }
- {
- \hspace {4em}
- }
- \=
- \kill
-
- \bool_set_false:N \l_phone_zeilenumbruch_bool
-
- \clist_map_inline:cn {c_phone_\l_phone_land_str _#1_clist}
- {
- \bool_if:NTF \l_phone_zeilenumbruch_bool
- {
- \\
- }
- {
- \bool_gset_true:N \l_phone_zeilenumbruch_bool
- }
-
- \str_case:VnTF \l_phone_land_str
- {
- {DE} { }
- {AT} { }
- {UK} { }
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {##1} \c_true_bool
- \tl_use:N \l_phone_ausgabetext_tl
- }
- {
- \bool_if:nTF { \str_if_eq_p:Vn \l_phone_land_str {FR} }
- {
- \phone_von_vorne_gruppiert_schreiben:n {##1}
- \tl_use:N \l_phone_ausgabetext_tl
- }
- {
- ##1
- }
- }
- \>
- \tl_if_exist:cTF {c_phone_\l_phone_land_str _ortsname_##1_tl}
- {
- \tl_use:c {c_phone_\l_phone_land_str _ortsname_##1_tl}
- }
- {
- UNKNOWN~PLACE
- }
- }
- \end{tabbing}
- }
-
\NewDocumentCommand \setphonenumbers {m}
{
\keys_set:no {phonenumbers} {#1}
@@ -874,7 +968,9 @@
\IfValueT {#3}
{
- \bool_lazy_or:nnF { \str_if_eq_p:Vn \l_phone_land_str {DE} } { \str_if_eq_p:Vn \l_phone_land_str {AT} }
+ \bool_lazy_or:nnT
+ { \str_if_empty_p:N \l_phone_land_str }
+ { ! \bool_if_p:c { c_phone_ \l_phone_land_str _erlaubt_durchwahl_bool } }
{
\bool_if:NF \l_phone_durchwahl_leer_bool
{
@@ -895,7 +991,7 @@
\keys_set:no {phonenumbers} {#1}
}
- \phone_vorwahlliste_ausgeben:n {ortsvorwahlen}
+ \use:c { phone_ \l_phone_land_str _vorwahlliste_ausgeben:n } {ortsvorwahlen}
\group_end:
}
@@ -907,12 +1003,10 @@
\keys_set:no {phonenumbers} {#1}
}
- \phone_vorwahlliste_ausgeben:n {sondervorwahlen}
+ \use:c { phone_ \l_phone_land_str _vorwahlliste_ausgeben:n } {sondervorwahlen}
\group_end:
}
-\file_input:n {phn-Landeskennzahlen}
-
\NewDocumentCommand \CountryCodes { }
{
\bool_set_false:N \l_phone_zeilenumbruch_bool
@@ -931,25 +1025,22 @@
}
}
-
-\int_new:N \l_phone_pruefnummerlaenge_int
-
% #1: Nummer, die auf Enthaltensein einer Vorwahl überprüft wird
\prg_new_protected_conditional:Npnn \phone_enthaelt_vorwahl:N #1 {TF,T}
{
\bool_set_false:N \l_phone_vorwahl_gefunden_bool
- \int_set:Nn \l_phone_pruefnummerlaenge_int { \str_count:N #1 }
+ \int_set:Nn \l_phone_nummernlaenge_int { \str_count:N #1 }
\int_step_inline:nnnn {6} {-1} {2}
{
\bool_if:NF \l_phone_vorwahl_gefunden_bool
{
- \int_compare:nT { \l_phone_pruefnummerlaenge_int >= ##1 }
+ \int_compare:nT { \l_phone_nummernlaenge_int >= ##1 }
{
\str_set:Nx \l_phone_vorwahl_str { \str_range:Nnn #1 {1} {##1} }
- \clist_if_in:cVT {c_phone_\l_phone_land_str _vorwahlen_clist} \l_phone_vorwahl_str
+ \clist_if_in:cVT { c_phone_ \l_phone_land_str _vorwahlen_clist } \l_phone_vorwahl_str
{
\bool_set_true:N \l_phone_vorwahl_gefunden_bool
}
@@ -966,108 +1057,6 @@
}
}
-
-% #1: Vorwahl, #2: Soll die führende null ausgegeben werden?
-\cs_new_protected:Npn \phone_gruppierte_vorwahl_schreiben:nN #1#2
- {
- \str_if_eq:VnTF \l_phone_land_str {UK}
- {
- % britische Vorwahl
- \int_compare:nNnTF { \str_count:n {#1} } = {6}
- {
- % sechsstellige britische Vorwahl: Gliederung vor der zweitletzten Ziffer
- \bool_if:NTF #2
- {
- \int_compare:nNnTF {\l_phone_gruppierungsminimum_int} > {6}
- {
- \tl_put_right:Nn \l_phone_ausgabetext_tl {#1}
- }
- {
- \tl_put_right:Nx \l_phone_ausgabetext_tl { \str_range:nnn {#1} {1} {4} }
- \tl_put_right:Nn \l_phone_ausgabetext_tl {\,}
- \tl_put_right:Nx \l_phone_ausgabetext_tl { \str_range:nnn {#1} {5} {6} }
- }
- }
- {
- \int_compare:nNnTF {\l_phone_gruppierungsminimum_int} > {5}
- {
- \tl_put_right:Nx \l_phone_ausgabetext_tl { \str_tail:n {#1} }
- }
- {
- \tl_put_right:Nx \l_phone_ausgabetext_tl { \str_range:nnn {#1} {2} {4} }
- \tl_put_right:Nn \l_phone_ausgabetext_tl {\,}
- \tl_put_right:Nx \l_phone_ausgabetext_tl { \str_range:nnn {#1} {5} {6} }
- }
- }
- }
- {
- % nicht sechsstellige britische Vorwahl
- \bool_if:NTF #2
- {
- \tl_put_right:Nn \l_phone_ausgabetext_tl {#1}
- }
- {
- \tl_put_right:Nx \l_phone_ausgabetext_tl { \str_tail:n {#1} }
- }
- }
- }
- {
- % nichtbritische Vorwahl
- \bool_lazy_and:nnTF { \str_if_eq_p:Vn \l_phone_land_str {DE} } { \int_compare_p:nNn { \str_count:n {#1} } = {5} }
- {
- \str_set:Nx \l_tmpa_str { \str_range:nnn {#1} {1} {4} }
-
- % fünfstellige deutsche Vorwahl
- \bool_lazy_or:nnTF { \str_if_eq_p:Vn \l_tmpa_str {0137} } { \str_if_eq_p:Vn \l_tmpa_str {0180} }
- {
- % fünfstellige deutsche Vorwahl mit Tarifkennung: letzte Ziffer steht allein
- \bool_if:NTF #2
- {
- \phone_von_vorne_gruppiert_schreiben:n {#1}
- }
- {
- \phone_versetzt_gruppiert_schreiben:x { \str_tail:n {#1} }
- }
- }
- {
- % fünfstellige deutsche Vorwahl ohne Tarifkennung
- \bool_if:NTF #2
- {
- \phone_von_hinten_gruppiert_schreiben:n {#1}
- }
- {
- \phone_von_hinten_gruppiert_schreiben:x { \str_tail:n {#1} }
- }
- }
- }
- {
- % sonstige Vorwahl
- \bool_if:NTF #2
- {
- \phone_von_hinten_gruppiert_schreiben:n {#1}
- }
- {
- \phone_von_hinten_gruppiert_schreiben:x { \str_tail:n {#1} }
- }
- }
- }
- }
-
-% #1: Vorwahl, #2: Soll die führende null ausgegeben werden?
-\cs_new_protected:Npn \phone_geklammerte_vorwahl_schreiben:nN #1#2
- {
- % Klammern werden nur bei Ortsvorwahlen gesetzt
- \clist_if_in:cnTF {c_phone_\l_phone_land_str _ortsvorwahlen_clist} {#1}
- {
- \tl_put_right:Nn \l_phone_ausgabetext_tl {(}
- \phone_gruppierte_vorwahl_schreiben:nN {#1} #2
- \tl_put_right:Nn \l_phone_ausgabetext_tl {)}
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} #2
- }
- }
-
% #1: Nummer, #2: Mindestlänge, #3: Höchstlänge, #4: Nummernart
\cs_new_protected:Npn \phone_nummernlaenge_ueberpruefen:nnnn #1#2#3#4
{
@@ -1090,1423 +1079,9 @@
\cs_generate_variant:Nn \phone_nummernlaenge_ueberpruefen:nnnn {V,o}
-
-%%%%%%%%%%%%%%%%%%%% DEUTSCHLAND %%%%%%%%%%%%%%%%%%%%
-
-\file_input:n {phn-DE_Vorwahlen}
-\file_input:n {phn-DE_Ortsnamen}
-
-\clist_new:N \c_phone_DE_vorwahlen_clist
-\clist_concat:NNN \c_phone_DE_vorwahlen_clist \c_phone_DE_ortsvorwahlen_clist \c_phone_DE_sondervorwahlen_clist
-
-
-% #1: Vorwahl, #2: Folgt eine Rufnummer?
-\cs_new_protected:Npn \phone_DE_AT_vorwahl_schreiben:nn #1 #2
- {
- \bool_lazy_or:nnTF { \str_if_eq_p:Vn \l_phone_auslandsvorwahltyp_str {off} } { \str_if_eq_p:NN \l_phone_heimatland_str \l_phone_land_str }
- {
- \clist_if_in:cnT {c_phone_\l_phone_land_str _sondervorwahlen_clist} {#1}
- {
- \str_if_eq:VnT \l_phone_vorwahldarstellung_str {place}
- {
- \str_set:Nn \l_phone_vorwahldarstellung_str {number}
- }
- }
-
- \bool_lazy_and:nnF { \str_if_eq_p:NN \l_phone_heimatland_str \l_phone_land_str } { \str_if_eq_p:Vn \l_phone_heimatvorwahl_str {#1} }
- {
- \str_case:Vn \l_phone_vorwahldarstellung_str
- {
- {number}
- {
- \bool_if:nTF {#2}
- {
- \str_if_eq:VnTF \l_phone_vorwahltrennung_str {brackets}
- {
- \phone_geklammerte_vorwahl_schreiben:nN {#1} \c_true_bool
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
-
- \tl_put_right:Nx \l_phone_ausgabetext_tl
- {
- \str_case:VnF \l_phone_vorwahltrennung_str
- {
- {space} {\c_space_tl}
- {hyphen} {\c_phone_bindestrich_tl}
- }
- {
- \c_phone_schraegstrich_tl
- }
- }
- }
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
- }
- {place}
- {
- \bool_if:nTF {#2}
- {
- \str_if_eq:VnT \l_phone_vorwahltrennung_str {brackets}
- {
- \tl_put_right:Nn \l_phone_ausgabetext_tl {(}
- }
-
- \tl_if_exist:cTF {c_phone_\l_phone_land_str _ortsname_#1_tl}
- {
- \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_\l_phone_land_str _ortsname_#1_tl}
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
-
- \tl_put_right:Nx \l_phone_ausgabetext_tl
- {
- \str_case:VnF \l_phone_vorwahltrennung_str
- {
- {brackets} {) \c_space_tl}
- {space} {\c_space_tl}
- {hyphen} {\c_phone_bindestrich_tl}
- }
- {
- \c_phone_schraegstrich_tl
- }
- }
- }
- {
- \tl_if_exist:cTF {c_phone_\l_phone_land_str _ortsname_#1_tl}
- {
- \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_\l_phone_land_str _ortsname_#1_tl}
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
- }
- }
- {place-and-number}
- {
- \tl_if_exist:cT {c_phone_\l_phone_land_str _ortsname_#1_tl}
- {
- \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_\l_phone_land_str _ortsname_#1_tl}
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
-
- \str_if_eq:VnTF \l_phone_vorwahltrennung_str {brackets}
- {
- \phone_geklammerte_vorwahl_schreiben:nN {#1} \c_true_bool
-
- \bool_if:nT {#2}
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
-
- \bool_if:nT {#2}
- {
- \tl_put_right:Nx \l_phone_ausgabetext_tl
- {
- \str_case:VnF \l_phone_vorwahltrennung_str
- {
- {space} {\c_space_tl}
- {hyphen} {\c_phone_bindestrich_tl}
- }
- {
- \c_phone_schraegstrich_tl
- }
- }
- }
- }
- }
- }
- }
- }
- {
- \str_if_eq:VnTF \l_phone_land_str {DE}
- {
- \phone_auslandsvorwahl_schreiben:n {49}
- }
- {
- \phone_auslandsvorwahl_schreiben:n {43}
- }
-
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
-
- \str_if_eq:VnTF \l_phone_auslandsvorwahltrennung_str {brackets}
- {
- \phone_geklammerte_vorwahl_schreiben:nN {#1} \c_false_bool
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_false_bool
- }
-
- \bool_if:nT {#2}
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
- }
-
- % Linktext schreiben, falls eine Rufnummer folgt
- \bool_if:nT {#2}
- {
- \str_put_right:Nx \l_phone_linktext_str
- {
- \str_if_eq:VnTF \l_phone_land_str {DE} {+49} {+43}
- }
- \str_put_right:Nx \l_phone_linktext_str { \str_tail:n {#1} }
- }
- }
-
-\cs_generate_variant:Nn \phone_DE_AT_vorwahl_schreiben:nn {Vx}
-
-
-% #1: Vorwahl, #2: Teilnehmerrufnummer
-\cs_new_protected:Npn \phone_DE_festnetzteilnehmerrufnummernlaenge_ueberpruefen:Nn #1#2
- {
- \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_bereinigte_durchwahl_str }
-
- \int_compare:nNnTF {\l_tmpa_int} > {13}
- {
- % Gesamtnummer hat mehr als 13 Stellen
- \msg_warning:nnnn {phonenumbers} {number too long} {landline} {13}
- }
- {
- \int_set:Nn \l_tmpa_int { \str_count:n {#2} }
- \int_add:Nn \l_tmpa_int { \str_count:N \l_phone_bereinigte_durchwahl_str }
-
- \int_compare:nNnTF {\l_tmpa_int} < {3}
- {
- % Teilnehmerrufnummer hat weniger als 3 Stellen
- \msg_warning:nnn {phonenumbers} {subscriber number too short} {3}
- }
- {
- \bool_set_true:N \l_phone_teilnehmerrufnummer_gueltig_bool
- }
- }
- }
-
-% #1: Nummer
-\cs_new_protected:Npn \phone_DE_MABEZnummernlaenge_ueberpruefen:N #1
- {
- \int_set:Nn \l_tmpa_int { \str_count:N #1 }
- \int_add:Nn \l_tmpa_int { \str_count:N \l_phone_bereinigte_durchwahl_str }
-
- \int_compare:nNnTF {\l_tmpa_int} > {11}
- {
- % Gesamtnummer hat mehr als 11 Stellen
- \msg_warning:nnnn {phonenumbers} {number too long} {0137~(MABEZ)} {11}
- }
- {
- \int_compare:nNnTF {\l_tmpa_int} < {11}
- {
- % Gesamtnummer hat weniger als 11 Stellen
- \msg_warning:nnnn {phonenumbers} {number too short} {0137~(MABEZ)} {11}
- }
- {
- \bool_set_true:N \l_phone_teilnehmerrufnummer_gueltig_bool
- }
- }
- }
-
-% #1: Vorwahl, #2: Teilnehmerrufnummer
-\cs_new_protected:Npn \phone_DE_teilnehmerrufnummer_schreiben:Nn #1 #2
- {
- % Überprüfen der Nummernlänge
- \str_if_empty:NTF #1
- {
- % Festnetznummer ohne Vorwahl
- \bool_if:NF \l_phone_eingabe_leer_bool
- {
- \phone_DE_festnetzteilnehmerrufnummernlaenge_ueberpruefen:Nn #1 {#2}
- }
- }
- {
- \clist_if_in:NVTF \c_phone_DE_ortsvorwahlen_clist #1
- {
- % Festnetznummer
- \str_if_eq:xnTF { \str_head:n {#2} } {0}
- {
- \msg_warning:nnn {phonenumbers} {illegal start of subscriber number} {0}
- }
- {
- \phone_DE_festnetzteilnehmerrufnummernlaenge_ueberpruefen:Nn #1 {#2}
- }
- }
- {
- % Mobilfunk-/Sondernummer
- \str_set_eq:NN \l_tmpa_str #1
- \str_put_right:Nn \l_tmpa_str {#2}
-
- \str_if_eq:xnTF { \str_range:Nnn #1 {1} {5} } {09009}
- {
- \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {12} {12} {09009}
- }
- {
- \str_case:xnF { \str_range:Nnn #1 {1} {4} }
- {
- {0137} { \phone_DE_MABEZnummernlaenge_ueberpruefen:N \l_tmpa_str }
- {0160} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {11} {12} {mobile~phone} }
- {0162} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {11} {12} {mobile~phone} }
- {0163} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {11} {12} {mobile~phone} }
- {0164} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {5} {14} {0164} } % Funkruf
- {0168} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {5} {15} {0168} } % Funkruf
- {0169} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {5} {15} {0169} } % Funkruf
- {0180} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {11} {11} {0180} }
- {0181} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {8} {15} {0181} }
- {0191} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {5} {14} {0191} }
- {0192} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {5} {14} {0192} }
- {0193} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {5} {14} {0193} }
- {0194} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {7} {14} {0194} }
- {0700} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {12} {12} {0700} }
- {0800} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {11} {14} {freephone} }
- {0900} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {11} {11} {premium~service} }
- }
- {
- \str_case:xn {\str_range:Nnn #1 {1} {3}}
- {
- {015} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {12} {12} {mobile~phone} }
- {017} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {11} {12} {mobile~phone} }
- {018} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {12} {12} {018} }
- {032} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {12} {12} {032} }
- }
- }
- }
-
- \str_if_empty:NF \l_phone_bereinigte_durchwahl_str
- {
- % Mobilfunk- und Sondernummern dürfen keine Durchwahl enthalten (ausgenommen MABEZ-Nummern)
- \str_if_eq:xnF { \str_range:Nnn #1 {1} {4} } {0137}
- {
- \msg_warning:nn {phonenumbers} {odd extension}
- }
- }
- }
-
- \bool_if:NTF \l_phone_teilnehmerrufnummer_gueltig_bool
- {
- % 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_bereinigte_durchwahl_str
- }
- {
- % Für ungültige Nummern mit Vorwahl Linktext löschen:
- \str_clear:N \l_phone_linktext_str
- }
- }
-
- \bool_if:NTF \l_phone_teilnehmerrufnummer_gueltig_bool
- {
- \phone_von_hinten_gruppiert_schreiben:n {#2}
- }
- {
- \str_put_right:Nn \l_phone_ausgabetext_tl {#2}
- }
-
- \str_if_empty:NF \l_phone_bereinigte_durchwahl_str
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_phone_bindestrich_tl
- \phone_von_hinten_gruppiert_schreiben:V \l_phone_bereinigte_durchwahl_str
- }
- }
-
-\cs_generate_variant:Nn \phone_DE_teilnehmerrufnummer_schreiben:Nn {Nx,NV}
-
-
-\int_new:N \l_phone_DE_AT_hauptnummerlaenge_int
-\int_new:N \l_phone_DE_AT_vorwahllaenge_int
-
-\cs_new_protected:Npn \phone_DE_AT_nummer_schreiben:
- {
- \str_if_eq:xnTF { \str_head:N \l_phone_bereinigte_nummer_str } {0}
- {
- \phone_enthaelt_vorwahl:NTF \l_phone_bereinigte_nummer_str
- {
- \int_set:Nn \l_phone_DE_AT_hauptnummerlaenge_int { \str_count:N \l_phone_bereinigte_nummer_str }
- \int_set:Nn \l_phone_DE_AT_vorwahllaenge_int { \str_count:N \l_phone_vorwahl_str }
-
- \phone_DE_AT_vorwahl_schreiben:Vx \l_phone_vorwahl_str
- {
- \int_compare_p:nNn {\l_phone_DE_AT_vorwahllaenge_int} < {\l_phone_DE_AT_hauptnummerlaenge_int}
- }
-
- \int_compare:nNnTF {\l_phone_DE_AT_vorwahllaenge_int} = {\l_phone_DE_AT_hauptnummerlaenge_int}
- {
- \msg_warning:nn {phonenumbers} {missing subscriber number}
- }
- {
- \use:c {phone_\l_phone_land_str _teilnehmerrufnummer_schreiben:Nx} \l_phone_vorwahl_str
- {
- \str_range:Nnn \l_phone_bereinigte_nummer_str { \l_phone_DE_AT_vorwahllaenge_int + 1 } {-1}
- }
- }
- }
- {
- \msg_warning:nn {phonenumbers} {invalid area code}
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_durchwahl_str
- }
- }
- {
- \use:c {phone_\l_phone_land_str _teilnehmerrufnummer_schreiben:NV} \c_empty_tl \l_phone_bereinigte_nummer_str
- }
- }
-
-
-%%%%%%%%%%%%%%%%%%%% ÖSTERREICH %%%%%%%%%%%%%%%%%%%%
-
-\file_input:n {phn-AT_Vorwahlen}
-\file_input:n {phn-AT_Ortsnamen}
-
-\clist_new:N \c_phone_AT_vorwahlen_clist
-\clist_concat:NNN \c_phone_AT_vorwahlen_clist \c_phone_AT_ortsvorwahlen_clist \c_phone_AT_sondervorwahlen_clist
-
-
-% #1: Vorwahl, #2: Teilnehmerrufnummer
-\cs_new_protected:Npn \phone_AT_festnetzteilnehmerrufnummernlaenge_ueberpruefen:Nn #1#2
- {
- \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_bereinigte_durchwahl_str }
-
- \int_compare:nNnTF {\l_tmpa_int} > {13}
- {
- % Gesamtnummer hat mehr als 13 Stellen
- \msg_warning:nnnn {phonenumbers} {number too long} {landline} {13}
- }
- {
- \int_set:Nn \l_tmpa_int { \str_count:n {#2} }
- \int_add:Nn \l_tmpa_int { \str_count:N \l_phone_bereinigte_durchwahl_str }
-
- \int_compare:nNnTF {\l_tmpa_int} < {5}
- {
- % Teilnehmerrufnummer hat weniger als 5 Stellen
- \msg_warning:nnn {phonenumbers} {subscriber number too short} {5}
- }
- {
- \bool_lazy_and:nnTF { \str_if_eq_p:Vn #1 {01} } { \int_compare_p:nNn {\l_tmpa_int} < {7} }
- {
- % Wiener Teilnehmerrufnummer hat weniger als 7 Stellen
- \msg_warning:nnn {phonenumbers} {subscriber number too short} {7}
- }
- {
- \bool_lazy_and:nnTF
- {
- \bool_lazy_any_p:n
- {
- { \str_if_eq_p:Vn #1 {02236} }
- { \str_if_eq_p:Vn #1 {02252} }
- { \str_if_eq_p:Vn #1 {0316} }
- { \str_if_eq_p:Vn #1 {0463} }
- { \str_if_eq_p:Vn #1 {0512} }
- { \str_if_eq_p:Vn #1 {05572} }
- { \str_if_eq_p:Vn #1 {0662} }
- { \str_if_eq_p:Vn #1 {07242} }
- { \str_if_eq_p:Vn #1 {0732} }
- }
- }
- {
- \int_compare_p:nNn {\l_tmpa_int} < {6}
- }
- {
- % Teilnehmerrufnummer in bestimmten Ortsnetzen hat weniger als 6 Stellen
- \msg_warning:nnn {phonenumbers} {subscriber number too short} {6}
- }
- {
- \int_compare:nNnTF {\l_tmpa_int} > {9}
- {
- % Teilnehmerrufnummer hat mehr als 9 Stellen
- \msg_warning:nnn {phonenumbers} {subscriber number too long} {9}
- }
- {
- \bool_set_true:N \l_phone_teilnehmerrufnummer_gueltig_bool
- }
- }
- }
- }
- }
- }
-
-% #1: Vorwahl, #2: Teilnehmerrufnummer
-\cs_new_protected:Npn \phone_AT_festnetzteilnehmerrufnummer_ueberpruefen:Nn #1#2
- {
- \str_set:Nx \l_tmpa_str { \str_head:n {#2} }
-
- \bool_lazy_or:nnTF { \str_if_eq_p:Vn \l_tmpa_str {0} } { \str_if_eq_p:Vn \l_tmpa_str {1} }
- {
- \msg_warning:nnV {phonenumbers} {illegal start of subscriber number} \l_tmpa_str
- }
- {
- \phone_AT_festnetzteilnehmerrufnummernlaenge_ueberpruefen:Nn #1 {#2}
- }
- }
-
-% #1: Vorwahl, #2: Teilnehmerrufnummer
-\cs_new_protected:Npn \phone_AT_teilnehmerrufnummer_schreiben:Nn #1 #2
- {
- \str_if_empty:NTF #1
- {
- % Festnetznummer ohne Vorwahl
- \bool_if:NF \l_phone_eingabe_leer_bool
- {
- \phone_AT_festnetzteilnehmerrufnummer_ueberpruefen:Nn #1 {#2}
- }
- }
- {
- \clist_if_in:NVTF \c_phone_AT_ortsvorwahlen_clist #1
- {
- % Festnetznummer mit Vorwahl
- \phone_AT_festnetzteilnehmerrufnummer_ueberpruefen:Nn #1 {#2}
- }
- {
- % Mobilfunk-/Sondernummer
- \str_set_eq:NN \l_tmpa_str #1
- \str_put_right:Nn \l_tmpa_str {#2}
-
- \str_case:VnF #1
- {
- {0517} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {9} {13} {VPN} }
- {0718} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {dial~up} }
- {0720} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {location~independant} }
- {0780} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {convergent~service} }
- {0800} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {freephone} }
- {0804} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {dial~up} }
- {0810} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {service} }
- {0820} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {service} }
- {0821} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {service} }
- {0828} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {service} }
- {0900} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {premium~service} }
- {0901} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {premium~service} }
- {0930} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {premium~service} }
- {0931} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {premium~service} }
- {0939} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {10} {13} {premium~service} }
- }
- {
- \str_case:xn { \str_range:Nnn #1 {1} {3} }
- {
- {050} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {9} {13} {VPN} }
- {057} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {9} {13} {VPN} }
- {059} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {9} {13} {VPN} }
- {065} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {9} {13} {mobile~phone} }
- {066} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {9} {13} {mobile~phone} }
- {067} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {9} {13} {mobile~phone} }
- {068} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {9} {13} {mobile~phone} }
- {069} { \phone_nummernlaenge_ueberpruefen:Vnnn \l_tmpa_str {9} {13} {mobile~phone} }
- }
- }
-
- \str_if_empty:NF \l_phone_bereinigte_durchwahl_str
- {
- \msg_warning:nn {phonenumbers} {odd extension}
- }
- }
-
- \bool_if:NTF \l_phone_teilnehmerrufnummer_gueltig_bool
- {
- % 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_bereinigte_durchwahl_str
- }
- {
- % Für ungültige Nummern mit Vorwahl Linktext löschen:
- \str_clear:N \l_phone_linktext_str
- }
- }
-
- \bool_if:NTF \l_phone_teilnehmerrufnummer_gueltig_bool
- {
- \phone_von_hinten_gruppiert_schreiben:n {#2}
- }
- {
- \str_put_right:Nn \l_phone_ausgabetext_tl {#2}
- }
-
- \str_if_empty:NF \l_phone_bereinigte_durchwahl_str
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_phone_bindestrich_tl
- \phone_von_hinten_gruppiert_schreiben:V \l_phone_bereinigte_durchwahl_str
- }
- }
-
-\cs_generate_variant:Nn \phone_AT_teilnehmerrufnummer_schreiben:Nn {Nx,NV}
-
-
-%%%%%%%%%%%%%%%%%%%% FRANKREICH %%%%%%%%%%%%%%%%%%%%
-
-\file_input:n {phn-FR_Vorwahlen}
-\file_input:n {phn-FR_Ortsnamen}
-
-\clist_new:N \c_phone_FR_vorwahlen_clist
-\clist_concat:NNN \c_phone_FR_vorwahlen_clist \c_phone_FR_ortsvorwahlen_clist \c_phone_FR_sondervorwahlen_clist
-
-\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:.
- }
-
-\msg_new:nnn {phonenumbers} {FR/missing zero}
- {
- French~phone~number~has~no~zero~in~the~beginning~\msg_line_context:
- }
-
-
-% #1: Vorwahl
-\cs_new:Npn \phone_FR_ermittle_landeskennzahl:n #1
- {
- \str_case:nnF {#1}
- {
- {0262} {262}
- {026200} {262}
- {0263} {262}
- {0269} {262}
- {0508} {508}
- {0590} {590}
- {0594} {594}
- {0596} {596}
- {0639} {262}
- {0690} {590}
- {0691} {590}
- {0692} {262}
- {0693} {262}
- {0694} {594}
- {0696} {596}
- {0697} {596}
- {07005} {590}
- {07006} {594}
- {07007} {596}
- {07008} {262}
- {07009} {262}
- {09475} {590}
- {09476} {594}
- {09477} {596}
- {09478} {262}
- {09479} {262}
- {09760} {590}
- {09761} {590}
- {09762} {262}
- {09763} {262}
- {09764} {594}
- {09765} {594}
- {09766} {596}
- {09767} {596}
- {09768} {590}
- {09769} {262}
- }
- {
- 33
- }
- }
-
-% #1: Vorwahl, #2: Rufnummer
-\cs_new_protected:Npn \phone_FR_vorwahl_und_rufnummer_schreiben:nn #1#2
- {
- \bool_lazy_or:nnTF { \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_sondervorwahlen_clist {#1}
- {
- \str_if_eq:VnT \l_phone_vorwahldarstellung_str {place}
- {
- \str_set:Nn \l_phone_vorwahldarstellung_str {number}
- }
- }
-
- \bool_lazy_and:nnTF { \str_if_eq_p:Vn \l_phone_heimatland_str {FR} } { \str_if_eq_p:Vn \l_phone_heimatvorwahl_str {#1} }
- {
- \phone_von_hinten_gruppiert_schreiben:n {#2} % reine Teilnehmerrufnummer in Saint-Pierre-et-Miquelon
- }
- {
- \str_case:Vn \l_phone_vorwahldarstellung_str
- {
- {number}
- {
- \phone_von_vorne_gruppiert_schreiben:V \l_phone_bereinigte_nummer_str
- }
- {place}
- {
- \tl_if_exist:cTF {c_phone_FR_ortsname_#1_tl}
- {
- \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_FR_ortsname_#1_tl}
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- \phone_von_vorne_gruppiert_schreiben:n {#2}
- }
- {
- \phone_von_vorne_gruppiert_schreiben:V \l_phone_bereinigte_nummer_str
- }
- }
- {place-and-number}
- {
- \tl_if_exist:cT {c_phone_FR_ortsname_#1_tl}
- {
- \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_FR_ortsname_#1_tl}
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
-
- \phone_von_vorne_gruppiert_schreiben:V \l_phone_bereinigte_nummer_str
- }
- }
- }
- }
- {
- \phone_auslandsvorwahl_schreiben:x { \phone_FR_ermittle_landeskennzahl:n {#1} }
-
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
-
- \str_if_eq:nnTF {#1} {0508} % in Saint-Pierre-et-Miquelon entfällt die Ortsvorwahl
- {
- \phone_von_hinten_gruppiert_schreiben:n {#2}
- }
- {
- \phone_von_hinten_gruppiert_schreiben:x { \str_tail:N \l_phone_bereinigte_nummer_str }
- }
- }
-
- % Linktext schreiben:
- \str_put_right:Nx \l_phone_linktext_str { + \phone_FR_ermittle_landeskennzahl:n {#1} }
- \str_if_eq:nnF {#1} {0508} % in Saint-Pierre-et-Miquelon entfällt die Ortsvorwahl
- {
- \str_put_right:Nx \l_phone_linktext_str { \str_tail:n {#1} }
- }
- \str_put_right:Nn \l_phone_linktext_str {#2}
- }
-
-\cs_generate_variant:Nn \phone_FR_vorwahl_und_rufnummer_schreiben:nn {Vx,xx}
-
-
-\cs_new_protected:Npn \phone_FR_nummer_schreiben:
- {
- \int_set:Nn \l_phone_nummerlaenge_int { \str_count:N \l_phone_bereinigte_nummer_str }
-
- \int_compare:nNnTF {\l_phone_nummerlaenge_int} < {10}
- {
- \str_if_eq:xnTF { \str_head:N \l_phone_bereinigte_nummer_str } {3}
- {
- \int_compare:nNnTF {\l_phone_nummerlaenge_int} < {4}
- {
- \msg_warning:nnnn {phonenumbers} {number too short} {short} {4}
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- {
- \int_compare:nNnTF {\l_phone_nummerlaenge_int} > {4}
- {
- \msg_warning:nnnn {phonenumbers} {number too long} {short} {4}
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- {
- \phone_von_vorne_gruppiert_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} {phone} {10}
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- }
- {
- \int_compare:nNnTF {\l_phone_nummerlaenge_int} > {10}
- {
- \str_if_eq:xnTF { \str_range:Nnn \l_phone_bereinigte_nummer_str {1} {4} } {0700}
- {
- \int_compare:nNnTF { \str_item:Nn \l_phone_bereinigte_nummer_str {5} } < {5}
- {
- % überlange Mobilfunknummer (machine to machine) im Mutterland (14 Stellen)
- \phone_nummernlaenge_ueberpruefen:Vnnn \l_phone_bereinigte_nummer_str {14} {14} {machine~to~machine}
- \bool_if:NTF \l_phone_teilnehmerrufnummer_gueltig_bool
- {
- \phone_FR_vorwahl_und_rufnummer_schreiben:xx
- {
- \str_range:Nnn \l_phone_bereinigte_nummer_str {1} {4}
- }
- {
- \str_range:Nnn \l_phone_bereinigte_nummer_str {5} {-1}
- }
- }
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- }
- {
- % überlange Mobilfunknummer (machine to machine) in den Überseegebieten (13 Stellen)
- \phone_nummernlaenge_ueberpruefen:Vnnn \l_phone_bereinigte_nummer_str {13} {13} {machine~to~machine}
- \bool_if:NTF \l_phone_teilnehmerrufnummer_gueltig_bool
- {
- \phone_FR_vorwahl_und_rufnummer_schreiben:xx
- {
- \str_range:Nnn \l_phone_bereinigte_nummer_str {1} {5}
- }
- {
- \str_range:Nnn \l_phone_bereinigte_nummer_str {6} {-1}
- }
- }
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- }
- }
- {
- \msg_warning:nnnn {phonenumbers} {number too long} {phone} {10}
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- }
- {
- \str_if_eq:xnTF { \str_head:N \l_phone_bereinigte_nummer_str } {0}
- {
- \bool_set_false:N \l_phone_vorwahl_gefunden_bool
-
- \int_step_inline:nnnn {6} {-1} {2}
- {
- \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_FR_vorwahlen_clist \l_tmpa_str
- {
- \bool_set_true:N \l_phone_vorwahl_gefunden_bool
- \phone_FR_vorwahl_und_rufnummer_schreiben:Vx \l_tmpa_str
- {
- \str_range:Nnn \l_phone_bereinigte_nummer_str {##1 + 1} {-1}
- }
- }
- }
- }
- }
-
- \bool_if:NF \l_phone_vorwahl_gefunden_bool
- {
- \msg_warning:nn {phonenumbers} {invalid area code}
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- }
- {
- \msg_warning:nn {phonenumbers} {FR/missing zero}
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- }
- }
- }
-
-
-%%%%%%%%%%%%%%%%%%%% GROSSBRITANNIEN %%%%%%%%%%%%%%%%%%%%
-
-\file_input:n {phn-UK_Vorwahlen}
-\file_input:n {phn-UK_Ortsnamen}
-
-\clist_new:N \c_phone_UK_vorwahlen_clist
-\clist_concat:NNN \c_phone_UK_vorwahlen_clist \c_phone_UK_ortsvorwahlen_clist \c_phone_UK_sondervorwahlen_clist
-
-\msg_new:nnn {phonenumbers} {UK/illegal home area code}
- {
- National~dialling~is~required~in~\tl_use:c {c_phone_UK_ortsname_#1_tl}.~#1~cannot~be~set~as~home~area~code~\msg_line_context:.
- }
-
-\msg_new:nnn {phonenumbers} {UK/national dialling required}
- {
- British~subscriber~number~starting~with~0~or~1~requires~an~area~code~\msg_line_context:
- }
-
-
-% #1: Vorwahl, #2: Folgt eine Rufnummer?
-\cs_new_protected:Npn \phone_UK_vorwahl_schreiben:nn #1 #2
- {
- \bool_lazy_or:nnTF { \str_if_eq_p:Vn \l_phone_auslandsvorwahltyp_str {off} } { \str_if_eq_p:Vn \l_phone_heimatland_str {UK} }
- {
- \clist_if_in:NnT \c_phone_UK_sondervorwahlen_clist {#1}
- {
- \str_if_eq:VnT \l_phone_vorwahldarstellung_str {place}
- {
- \str_set:Nn \l_phone_vorwahldarstellung_str {number}
- }
- }
-
- \bool_lazy_and:nnF { \str_if_eq_p:Vn \l_phone_heimatland_str {UK} } { \str_if_eq_p:Vn \l_phone_heimatvorwahl_str {#1} }
- {
- \str_case:Vn \l_phone_vorwahldarstellung_str
- {
- {number}
- {
- \bool_if:nTF {#2}
- {
- \str_if_eq:VnTF \l_phone_vorwahltrennung_str {space}
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
- {
- \phone_geklammerte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
-
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
- }
- {place}
- {
- \bool_if:nTF {#2}
- {
- \str_if_eq:VnF \l_phone_vorwahltrennung_str {space}
- {
- \tl_put_right:Nn \l_phone_ausgabetext_tl {(}
- }
-
- \tl_if_exist:cTF {c_phone_UK_ortsname_#1_tl}
- {
- \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_UK_ortsname_#1_tl}
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
-
- \str_if_eq:VnF \l_phone_vorwahltrennung_str {space}
- {
- \tl_put_right:Nn \l_phone_ausgabetext_tl {)}
- }
-
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
- {
- \tl_if_exist:cTF {c_phone_UK_ortsname_#1_tl}
- {
- \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_UK_ortsname_#1_tl}
- }
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
- }
- }
- {place-and-number}
- {
- \tl_if_exist:cT {c_phone_UK_ortsname_#1_tl}
- {
- \tl_put_right:Nv \l_phone_ausgabetext_tl {c_phone_UK_ortsname_#1_tl}
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
-
- \str_if_eq:VnTF \l_phone_vorwahltrennung_str {space}
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
- {
- \phone_geklammerte_vorwahl_schreiben:nN {#1} \c_true_bool
- }
-
- \bool_if:nT {#2}
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
- }
- }
- }
- }
- {
- \phone_auslandsvorwahl_schreiben:n {44}
-
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
-
- \str_if_eq:VnTF \l_phone_auslandsvorwahltrennung_str {space}
- {
- \phone_gruppierte_vorwahl_schreiben:nN {#1} \c_false_bool
- }
- {
- \phone_geklammerte_vorwahl_schreiben:nN {#1} \c_false_bool
- }
-
- \bool_if:nT {#2}
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
- }
-
- % Linktext schreiben, falls eine Rufnummer folgt
- \bool_if:nT {#2}
- {
- \str_put_right:Nn \l_phone_linktext_str {+44}
- \str_put_right:Nx \l_phone_linktext_str { \str_tail:n {#1} }
- }
- }
-
-\cs_generate_variant:Nn \phone_UK_vorwahl_schreiben:nn {Vx}
-
-
-% #1: Vorwahl, #2: Teilnehmerrufnummer
-\cs_new_protected:Npn \phone_UK_teilnehmerrufnummer_schreiben:Nn #1 #2
- {
- % Überprüfen der Nummernlänge
- \str_if_empty:NTF #1
- {
- % Festnetznummer ohne Vorwahl (kann zwischen 4 und 8 Ziffern haben)
- \phone_nummernlaenge_ueberpruefen:nnnn {#2} {4} {8} {landline}
-
- % Nummern, die mit 0 oder 1 beginnen, erfordern das Wählen der Vorwahl
- \str_case:xnT { \str_head:n {#2} }
- {
- {0} { }
- {1} { }
- }
- {
- \msg_warning:nn {phonenumbers} {UK/national dialling required}
- }
- }
- {
- \clist_if_in:NVTF \c_phone_UK_ortsvorwahlen_clist #1
- {
- % Festnetznummer, muss in der Regel 11 Ziffern umfassen
- % Ausnahme: Bei den Vorwahlen 01XXX und 016977 sind auch 10 Ziffern möglich.
- \bool_lazy_or:nnTF { \str_if_eq_p:Vn #1 {016977} } { \int_compare_p:nNn { \str_count:N #1 } = {5} }
- {
- \phone_nummernlaenge_ueberpruefen:onnn {#1#2} {10} {11} {landline}
- }
- {
- \phone_nummernlaenge_ueberpruefen:onnn {#1#2} {11} {11} {landline}
- }
- }
- {
- % Mobilfunk-/Sondernummer
- \str_if_eq:xnTF { \str_range:Nnn #1 {1} {4} } {0800}
- {
- % 0800er-Nummern haben 10 oder 11 Ziffern; Ausnahme: 0800 1111
- \str_if_eq:nnTF {#2} {1111}
- {
- \bool_set_true:N \l_phone_teilnehmerrufnummer_gueltig_bool
- }
- {
- \phone_nummernlaenge_ueberpruefen:onnn {#1#2} {10} {11} {freephone}
- }
- }
- {
- % alle anderen Sondernummern haben 11 Ziffern
- \phone_nummernlaenge_ueberpruefen:onnn {#1#2} {11} {11} {non-geographic}
- }
- }
-
- \bool_if:NTF \l_phone_teilnehmerrufnummer_gueltig_bool
- {
- % Für gültige Nummern mit Vorwahl Linktext schreiben:
- \str_put_right:Nn \l_phone_linktext_str {#2}
- }
- {
- % Für ungültige Nummern mit Vorwahl Linktext löschen:
- \str_clear:N \l_phone_linktext_str
- }
- }
-
- \bool_if:NTF \l_phone_teilnehmerrufnummer_gueltig_bool
- {
- \int_compare:nNnTF { \str_count:n {#2} } > {6}
- {
- % Nummern mit mehr als 6 Ziffern werden in Vierergruppen gegliedert
- \str_put_right:Nx \l_phone_ausgabetext_tl { \str_range:nnn {#2} {1} {-5} }
- \tl_put_right:Nn \l_phone_ausgabetext_tl {\,}
- \str_put_right:Nx \l_phone_ausgabetext_tl { \str_range:nnn {#2} {-4} {-1} }
- }
- {
- \str_put_right:Nn \l_phone_ausgabetext_tl {#2}
- }
- }
- {
- \str_put_right:Nn \l_phone_ausgabetext_tl {#2}
- }
- }
-
-\cs_generate_variant:Nn \phone_UK_teilnehmerrufnummer_schreiben:Nn {Nx,NV}
-
-
-\cs_new_protected:Npn \phone_UK_nummer_schreiben:
- {
- \int_set:Nn \l_phone_nummerlaenge_int { \str_count:N \l_phone_bereinigte_nummer_str }
-
- \str_if_eq:xnTF { \str_head:N \l_phone_bereinigte_nummer_str } {0}
- {
- \bool_set_false:N \l_phone_vorwahl_gefunden_bool
-
- \int_step_inline:nnnn {6} {-1} {3}
- {
- \bool_if:NF \l_phone_vorwahl_gefunden_bool
- {
- \int_compare:nT { \l_phone_nummerlaenge_int >= ##1 }
- {
- \str_set:Nx \l_phone_vorwahl_str { \str_range:Nnn \l_phone_bereinigte_nummer_str {1} {##1} }
-
- \clist_if_in:NVT \c_phone_UK_vorwahlen_clist \l_phone_vorwahl_str
- {
- \bool_set_true:N \l_phone_vorwahl_gefunden_bool
-
- \phone_UK_vorwahl_schreiben:Vx \l_phone_vorwahl_str { \int_compare_p:nNn {##1} < {\l_phone_nummerlaenge_int} }
-
- \int_compare:nNnTF {##1} = {\l_phone_nummerlaenge_int}
- {
- \msg_warning:nn {phonenumbers} {missing subscriber number}
- }
- {
- \phone_UK_teilnehmerrufnummer_schreiben:Nx \l_phone_vorwahl_str { \str_range:Nnn \l_phone_bereinigte_nummer_str {##1 + 1} {-1} }
- }
- }
- }
- }
- }
-
- \bool_if:NF \l_phone_vorwahl_gefunden_bool
- {
- \msg_warning:nn {phonenumbers} {invalid area code}
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- }
- {
- \phone_UK_teilnehmerrufnummer_schreiben:NV \c_empty_tl \l_phone_bereinigte_nummer_str
- }
- }
-
-
-%%%%%%%%%%%%%%%%%%%% NORDAMERIKA %%%%%%%%%%%%%%%%%%%%
-
-\file_input:n {phn-US_Vorwahlen}
-\file_input:n {phn-US_Ortsnamen}
-
-\clist_new:N \c_phone_US_vorwahlen_clist
-\clist_concat:NNN \c_phone_US_vorwahlen_clist \c_phone_US_ortsvorwahlen_clist \c_phone_US_sondervorwahlen_clist
-
-\msg_new:nnn {phonenumbers} {US/illegal home area code}
- {
- 10-digit~dialling~is~required~in~\tl_use:c {c_phone_US_ortsname_#1_tl}.~#1~cannot~be~set~as~home~area~code~\msg_line_context:.
- }
-
-\msg_new:nnn {phonenumbers} {US/invalid area code}
- {
- unknown~area~code~#1~in~North~American~phone~number~\msg_line_context:
- }
-
-\msg_new:nnn {phonenumbers} {US/invalid central office code}
- {
- invalid~central~office~code~#1~in~North~American~phone~number~\msg_line_context:
- }
-
-\bool_new:N \l_phone_US_ferngespraechspraefix_bool
-
-\keys_define:nn {phonenumbers}
- {
- trunk-prefix .choices:nn = {on,off}
- {
- \str_if_eq:VnTF \l_keys_choice_tl {on}
- {
- \bool_set_true:N \l_phone_US_ferngespraechspraefix_bool
- }
- {
- \bool_set_false:N \l_phone_US_ferngespraechspraefix_bool
- }
- },
- trunk-prefix .initial:n = off,
- trunk-prefix .default:n = on
- }
-
-
-% #1: Vorwahl, #2: Folgt eine Rufnummer?
-\cs_new_protected:Npn \phone_US_vorwahl_schreiben:nN #1 #2
- {
- \bool_lazy_or:nnTF { \str_if_eq_p:Vn \l_phone_auslandsvorwahltyp_str {off} } { \str_if_eq_p:Vn \l_phone_heimatland_str {US} }
- {
- \bool_lazy_and:nnF { \str_if_eq_p:Vn \l_phone_heimatland_str {US} } { \str_if_eq_p:Vn \l_phone_heimatvorwahl_str {#1} }
- {
- \bool_if:NTF \l_phone_US_ferngespraechspraefix_bool
- {
- \tl_put_right:Nx \l_phone_ausgabetext_tl
- {
- \str_if_eq:VnT \l_phone_vorwahldarstellung_str {place-and-number}
- {
- \tl_if_exist:cT {c_phone_US_ortsname_#1_tl}
- {
- \tl_use:c {c_phone_US_ortsname_#1_tl}
- \c_space_tl
- }
- }
-
- \bool_if:NTF #2
- {
- \str_case:VnF \l_phone_vorwahltrennung_str
- {
- {brackets} {1 \c_space_tl (#1) \c_space_tl}
- {space} {1 \c_space_tl #1 \c_space_tl}
- }
- {
- 1 \c_phone_bindestrich_tl #1 \c_phone_bindestrich_tl
- }
- }
- {
- \str_case:VnF \l_phone_vorwahltrennung_str
- {
- {brackets} {1 \c_space_tl (#1)}
- {space} {1 \c_space_tl #1}
- }
- {
- 1 \c_phone_bindestrich_tl #1
- }
- }
- }
- }
- {
- \str_if_eq:VnT \l_phone_vorwahldarstellung_str {place}
- {
- \clist_if_in:NnT \c_phone_US_sondervorwahlen_clist {#1}
- {
- \str_set:Nn \l_phone_vorwahldarstellung_str {number}
- }
- }
-
- \tl_put_right:Nx \l_phone_ausgabetext_tl
- {
- \str_case:Vn \l_phone_vorwahldarstellung_str
- {
- {number}
- {
- \bool_if:NTF #2
- {
- \str_case:VnF \l_phone_vorwahltrennung_str
- {
- {brackets} {(#1) \c_space_tl}
- {space} {#1 \c_space_tl}
- }
- {
- #1 \c_phone_bindestrich_tl
- }
- }
- {
- #1
- }
- }
- {place}
- {
- \bool_if:NTF #2
- {
- \str_case:VnF \l_phone_vorwahltrennung_str
- {
- {brackets}
- {
- (
- \tl_if_exist:cTF {c_phone_US_ortsname_#1_tl}
- {
- \tl_use:c {c_phone_US_ortsname_#1_tl}
- }
- {
- #1
- }
- )
- \c_space_tl
- }
- }
- {
- \tl_if_exist:cTF {c_phone_US_ortsname_#1_tl}
- {
- \tl_use:c {c_phone_US_ortsname_#1_tl}
- \c_space_tl
- }
- {
- #1 \c_phone_bindestrich_tl
- }
- }
- }
- {
- \tl_if_exist:cTF {c_phone_US_ortsname_#1_tl}
- {
- \tl_use:c {c_phone_US_ortsname_#1_tl}
- }
- {
- #1
- }
- }
- }
- {place-and-number}
- {
- \tl_if_exist:cT {c_phone_US_ortsname_#1_tl}
- {
- \tl_use:c {c_phone_US_ortsname_#1_tl}
- \c_space_tl
- }
-
- \bool_if:NTF #2
- {
- \str_case:VnF \l_phone_vorwahltrennung_str
- {
- {brackets} {(#1) \c_space_tl}
- {space} {#1 \c_space_tl}
- }
- {
- #1 \c_phone_bindestrich_tl
- }
- }
- {
- \str_if_eq:VnTF \l_phone_vorwahltrennung_str {brackets}
- {
- (#1)
- }
- {
- #1
- }
- }
- }
- }
- }
- }
- }
- }
- {
- \phone_auslandsvorwahl_schreiben:n {1}
-
- \tl_put_right:Nn \l_phone_ausgabetext_tl {\c_space_tl}
-
- \str_if_eq:VnTF \l_phone_auslandsvorwahltrennung_str {brackets}
- {
- \tl_put_right:Nn \l_phone_ausgabetext_tl {(#1)}
- }
- {
- \tl_put_right:Nn \l_phone_ausgabetext_tl {#1}
- }
-
- \bool_if:NT #2
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
- }
-
- % Linktext schreiben, falls eine Rufnummer folgt
- \bool_if:NT #2
- {
- \str_put_right:Nn \l_phone_linktext_str {+1 #1}
- }
- }
-
-\cs_generate_variant:Nn \phone_US_vorwahl_schreiben:nN {VN}
-
-
-% #1: Ortsvorwahl, #2: Vermittlungsstellennummer
-\cs_new_protected:Npn \phone_US_vermittlungsstellennummer_schreiben:nn #1 #2
- {
- \str_case:xnTF { \str_head:n {#2} }
- {
- {0} { }
- {1} { }
- }
- {
- \msg_warning:nnn {phonenumbers} {US/invalid central office code} {#2}
- }
- {
- \bool_set_false:N \l_tmpa_bool % Regionalnummer?
-
- \tl_if_empty:nTF {#1}
- {
- \bool_set_true:N \l_tmpa_bool
- }
- {
- \clist_if_in:NnT \c_phone_US_ortsvorwahlen_clist {#1}
- {
- \bool_set_true:N \l_tmpa_bool
- }
- }
-
- \bool_if:NTF \l_tmpa_bool
- {
- \str_if_eq:xnT { \str_range:nnn {#2} {2} {3} } {11}
- {
- \msg_warning:nnn {phonenumbers} {US/invalid central office code} {#2}
- }
- }
- {
- \str_if_eq:nnT {#2} {911}
- {
- \msg_warning:nnn {phonenumbers} {US/invalid central office code} {#2}
- }
- }
- }
-
- \tl_put_right:Nn \l_phone_ausgabetext_tl {#2}
-
- \bool_lazy_or:nnTF { \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
- }
- {
- \tl_if_empty:nTF {#1}
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_phone_bindestrich_tl
- }
- {
- \tl_put_right:NV \l_phone_ausgabetext_tl \c_space_tl
- }
- }
-
- % Linktext schreiben, falls eine Vorwahl vorangeht
- \tl_if_empty:nF {#1}
- {
- \str_put_right:Nn \l_phone_linktext_str {#2}
- }
- }
-
-\cs_generate_variant:Nn \phone_US_vermittlungsstellennummer_schreiben:nn {Vx}
-
-
-\cs_new_protected:Npn \phone_US_nummer_schreiben:
- {
- \int_case:nnF { \str_count:N \l_phone_bereinigte_nummer_str }
- {
- {3}
- {
- \clist_if_in:NVTF \c_phone_US_vorwahlen_clist \l_phone_bereinigte_nummer_str
- {
- \msg_warning:nn {phonenumbers} {missing subscriber number}
- }
- {
- \msg_warning:nnV {phonenumbers} {US/invalid area code} \l_phone_bereinigte_nummer_str
- }
-
- \phone_US_vorwahl_schreiben:VN \l_phone_bereinigte_nummer_str \c_false_bool
- }
- {7}
- {
- \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 \l_phone_bereinigte_nummer_str {4} {7} }
- }
- {10}
- {
- \str_set:Nx \l_tmpa_str { \str_range:Nnn \l_phone_bereinigte_nummer_str {1} {3} }
-
- \clist_if_in:NVF \c_phone_US_vorwahlen_clist \l_tmpa_str
- {
- \msg_warning:nnx {phonenumbers} {US/invalid area code} {\l_tmpa_str}
- }
-
- \phone_US_vorwahl_schreiben:VN \l_tmpa_str \c_true_bool
-
- \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 \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 \l_phone_bereinigte_nummer_str } < {10}
- {
- \msg_warning:nnnn {phonenumbers} {number too short} {phone} {10}
- }
- {
- \msg_warning:nnnn {phonenumbers} {number too long} {phone} {10}
- }
-
- \tl_put_right:NV \l_phone_ausgabetext_tl \l_phone_bereinigte_nummer_str
- }
- }
-
-
-%%%%%%%%%%%%%%%%%%%% SONSTIGE LÄNDER %%%%%%%%%%%%%%%%%%%%
-
-\cs_new_protected:Npn \phone_SONST_nummer_schreiben:
+\cs_new_protected:Npn \phone_nicht_unterstuetzte_nummer_schreiben:
{
- \int_set:Nn \l_phone_nummerlaenge_int { \str_count:N \l_phone_bereinigte_nummer_str }
+ \int_set:Nn \l_phone_nummernlaenge_int { \str_count:N \l_phone_bereinigte_nummer_str }
\bool_set_false:N \l_phone_vorwahl_gefunden_bool
@@ -2514,7 +1089,7 @@
{
\bool_if:NF \l_phone_vorwahl_gefunden_bool
{
- \int_compare:nT { \l_phone_nummerlaenge_int >= ##1 }
+ \int_compare:nT { \l_phone_nummernlaenge_int >= ##1 }
{
\str_set:Nx \l_tmpa_str { \str_range:Nnn \l_phone_bereinigte_nummer_str {1} {##1} }
@@ -2522,9 +1097,9 @@
{
\bool_set_true:N \l_phone_vorwahl_gefunden_bool
- \phone_auslandsvorwahl_schreiben:V \l_tmpa_str
+ \phone_ungruppierte_auslandsvorwahl_schreiben:V \l_tmpa_str
- \int_compare:nNnTF {##1} = {\l_phone_nummerlaenge_int}
+ \int_compare:nNnTF {##1} = {\l_phone_nummernlaenge_int}
{
\msg_warning:nn {phonenumbers} {country code only}
}
@@ -2548,5 +1123,10 @@
}
}
+\file_input:n {phonenumbers-AT.def}
+\file_input:n {phonenumbers-DE.def}
+\file_input:n {phonenumbers-FR.def}
+\file_input:n {phonenumbers-UK.def}
+\file_input:n {phonenumbers-US.def}
\ProcessKeysPackageOptions {phonenumbers}