# 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;