# Used at the top level of a def, like so:
# <macro>language_switched: [ @elements ], 'en', 'fr', 'pt'</macro>
# which means make a new nested element for each of @elements that has en,
# fr, and pt elements.
my %valid_languages;
if($self->tag eq 'DocumentDefinition' or $self->tag eq 'nested_element') {
#macro used in def context:
my ( $elements, @languages ) = @macro_args;
die "language_switched macro needs a list of elements\n" unless
ref($elements) eq 'ARRAY';
die "timestamp macro needs at least one \n" unless @languages;
foreach my $el_name ( @{ $elements } ) {
# add the element
my $el = $self->add_element ( 'nested_element' );
$el->add_element ( 'name' )->set ( $el_name );
#keep some info in the def about which elements are timestamps
push @{$el->{_Def_macro_names}}, 'language_switched';
# and set up our language elements
foreach my $lang ( @languages ) {
die "invalid language $lang" unless $valid_languages{ $lang };
my $sub_el = $el->add_element( 'element' );
$sub_el->add_element ( 'name' )->set ( $lang );
}
}
} else {
#unknown context, error out
die "you must use the timestamp macro on a def or a nested_element";
}
BEGIN {
%valid_languages = (
aa => 'Afar',
ab => 'Abkhazian',
af => 'Afrikaans',
ak => 'Akan',
sq => 'Albanian',
am => 'Amharic',
ar => 'Arabic',
an => 'Aragonese',
hy => 'Armenian',
as => 'Assamese',
av => 'Avaric',
ae => 'Avestan',
ay => 'Aymara',
az => 'Azerbaijani',
ba => 'Bashkir',
bm => 'Bambara',
eu => 'Basque',
be => 'Belarusian',
bn => 'Bengali',
bh => 'Bihari',
bi => 'Bislama',
bs => 'Bosnian',
br => 'Breton',
bg => 'Bulgarian',
my => 'Burmese',
ca => 'Catalan',
ch => 'Chamorro',
ce => 'Chechen',
zh => 'Chinese',
cu => 'Church Slavic',
cv => 'Chuvash',
kw => 'Cornish',
co => 'Corsican',
cr => 'Cree',
cs => 'Czech',
da => 'Danish',
dv => 'Divehi',
nl => 'Dutch',
dz => 'Dzongkha',
en => 'English',
eo => 'Esperanto',
et => 'Estonian',
ee => 'Ewe',
fo => 'Faroese',
fj => 'Fijian',
fi => 'Finnish',
fr => 'French',
fy => 'Western Frisian',
ff => 'Fulah',
ka => 'Georgian',
de => 'German',
gd => 'Gaelic',
ga => 'Irish',
gl => 'Galician',
gv => 'Manx',
el => 'Greek, Modern (1453-)',
gn => 'Guarani',
gu => 'Gujarati',
ht => 'Haitian',
ha => 'Hausa',
he => 'Hebrew',
hz => 'Herero',
hi => 'Hindi',
ho => 'Hiri Motu',
hu => 'Hungarian',
ig => 'Igbo',
is => 'Icelandic',
io => 'Ido',
ii => 'Sichuan Yi',
iu => 'Inuktitut',
ie => 'Interlingue',
ia => 'Interlingua (International Auxiliary Language Association)',
id => 'Indonesian',
ik => 'Inupiaq',
it => 'Italian',
jv => 'Javanese',
ja => 'Japanese',
kl => 'Kalaallisut',
kn => 'Kannada',
ks => 'Kashmiri',
kr => 'Kanuri',
kk => 'Kazakh',
km => 'Central Khmer',
ki => 'Kikuyu',
rw => 'Kinyarwanda',
ky => 'Kirghiz',
kv => 'Komi',
kg => 'Kongo',
ko => 'Korean',
kj => 'Kuanyama',
ku => 'Kurdish',
lo => 'Lao',
la => 'Latin',
lv => 'Latvian',
li => 'Limburgan',
ln => 'Lingala',
lt => 'Lithuanian',
lb => 'Luxembourgish',
lu => 'Luba-Katanga',
lg => 'Ganda',
mk => 'Macedonian',
mh => 'Marshallese',
ml => 'Malayalam',
mi => 'Maori',
mr => 'Marathi',
ms => 'Malay',
mg => 'Malagasy',
mt => 'Maltese',
mo => 'Moldavian',
mn => 'Mongolian',
na => 'Nauru',
nv => 'Navajo',
nr => 'Ndebele, South',
nd => 'Ndebele, North',
ng => 'Ndonga',
ne => 'Nepali',
nn => 'Norwegian Nynorsk',
nb => 'Bokm?l, Norwegian',
no => 'Norwegian',
ny => 'Chichewa',
oc => 'Occitan (post 1500)',
oj => 'Ojibwa',
or => 'Oriya',
om => 'Oromo',
os => 'Ossetian',
pa => 'Panjabi',
fa => 'Persian',
pi => 'Pali',
pl => 'Polish',
pt => 'Portuguese',
ps => 'Pushto',
qu => 'Quechua',
rm => 'Romansh',
ro => 'Romanian',
rn => 'Rundi',
ru => 'Russian',
sg => 'Sango',
sa => 'Sanskrit',
sr => 'Serbian',
hr => 'Croatian',
si => 'Sinhala',
sk => 'Slovak',
sl => 'Slovenian',
se => 'Northern Sami',
sm => 'Samoan',
sn => 'Shona',
sd => 'Sindhi',
so => 'Somali',
st => 'Sotho, Southern',
es => 'Spanish',
sc => 'Sardinian',
ss => 'Swati',
su => 'Sundanese',
sw => 'Swahili',
sv => 'Swedish',
ty => 'Tahitian',
ta => 'Tamil',
tt => 'Tatar',
te => 'Telugu',
tg => 'Tajik',
tl => 'Tagalog',
th => 'Thai',
bo => 'Tibetan',
ti => 'Tigrinya',
to => 'Tonga (Tonga Islands)',
tn => 'Tswana',
ts => 'Tsonga',
tk => 'Turkmen',
tr => 'Turkish',
tw => 'Twi',
ug => 'Uighur',
uk => 'Ukrainian',
ur => 'Urdu',
uz => 'Uzbek',
ve => 'Venda',
vi => 'Vietnamese',
vo => 'Volap?k',
cy => 'Welsh',
wa => 'Walloon',
wo => 'Wolof',
xh => 'Xhosa',
yi => 'Yiddish',
yo => 'Yoruba',
za => 'Zhuang',
zu => 'Zulu',
);
}
1;