Modul:data consistency check

Üdvözlöm, Ön a Modul:data consistency check szó jelentését keresi. A DICTIOUS-ban nem csak a Modul:data consistency check szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a Modul:data consistency check szót egyes és többes számban mondani. Minden, amit a Modul:data consistency check szóról tudni kell, itt található. A Modul:data consistency check szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. AModul:data consistency check és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.
Rövidítése(i):
WT:DATACHECK
WT:FSCK

This module checks the validity and internal consistency of the language, language family, and script data used on Wiktionary: the modules in Category:Language data modules as well as Module:scripts/data.

Output

Discrepancies detected:

  • The canonical name ős-khasian (aav-khs-pro) is missing.
  • proto-khasian, the canonical name for the code aav-khs-pro, is wrong; it should be ős-khasian.
  • The canonical name ős-nicobarese (aav-nic-pro) is missing.
  • proto-nicobarese, the canonical name for the code aav-nic-pro, is wrong; it should be ős-nicobarese.
  • proto-pnar-khasi-lyngngam, the canonical name for the code aav-pkl-pro, is wrong; it should be ős-pnar-khasi-lyngngam.
  • The canonical name ős-pnar-khasi-lyngngam (aav-pkl-pro) is missing.
  • proto-austroasiatic, the canonical name for the code aav-pro, is wrong; it should be ős-austroasiatic.
  • The canonical name ős-austroasiatic (aav-pro) is missing.
  • The canonical name ős-afro-asiatic (afa-pro) is missing.
  • proto-afro-asiatic, the canonical name for the code afa-pro, is wrong; it should be ős-afro-asiatic.
  • proto-algonquian, the canonical name for the code alg-pro, is wrong; it should be ős-algonquian.
  • The canonical name ős-algonquian (alg-pro) is missing.
  • proto-bua, the canonical name for the code alv-bua-pro, is wrong; it should be ős-bua.
  • The canonical name ős-bua (alv-bua-pro) is missing.
  • proto-cangin, the canonical name for the code alv-cng-pro, is wrong; it should be ős-cangin.
  • The canonical name ős-cangin (alv-cng-pro) is missing.
  • The canonical name ős-edoid (alv-edo-pro) is missing.
  • proto-edoid, the canonical name for the code alv-edo-pro, is wrong; it should be ős-edoid.
  • proto-fali, the canonical name for the code alv-fli-pro, is wrong; it should be ős-fali.
  • The canonical name ős-fali (alv-fli-pro) is missing.
  • The canonical name ős-gbe (alv-gbe-pro) is missing.
  • proto-gbe, the canonical name for the code alv-gbe-pro, is wrong; it should be ős-gbe.
  • proto-guang, the canonical name for the code alv-gng-pro, is wrong; it should be ős-guang.
  • The canonical name ős-guang (alv-gng-pro) is missing.
  • proto-central togo, the canonical name for the code alv-gtm-pro, is wrong; it should be ős-central togo.
  • The canonical name ős-central togo (alv-gtm-pro) is missing.
  • The canonical name ős-heiban (alv-hei-pro) is missing.
  • proto-heiban, the canonical name for the code alv-hei-pro, is wrong; it should be ős-heiban.
  • The canonical name ős-igboid (alv-igb-pro) is missing.
  • proto-igboid, the canonical name for the code alv-igb-pro, is wrong; it should be ős-igboid.
  • The canonical name ős-kwa (alv-kwa-pro) is missing.
  • proto-kwa, the canonical name for the code alv-kwa-pro, is wrong; it should be ős-kwa.
  • The canonical name ős-mumuye (alv-mum-pro) is missing.
  • proto-mumuye, the canonical name for the code alv-mum-pro, is wrong; it should be ős-mumuye.
  • The canonical name ős-nupoid (alv-nup-pro) is missing.
  • proto-nupoid, the canonical name for the code alv-nup-pro, is wrong; it should be ős-nupoid.
  • proto-atlantic-congo, the canonical name for the code alv-pro, is wrong; it should be ős-atlantic-congo.
  • The canonical name ős-atlantic-congo (alv-pro) is missing.
  • The canonical name ős-yoruboid (alv-yor-pro) is missing.
  • proto-yoruboid, the canonical name for the code alv-yor-pro, is wrong; it should be ős-yoruboid.
  • proto-apachean, the canonical name for the code apa-pro, is wrong; it should be ős-apachean.
  • The canonical name ős-apachean (apa-pro) is missing.
  • proto-algic, the canonical name for the code aql-pro, is wrong; it should be ős-algic.
  • The canonical name ős-algic (aql-pro) is missing.
  • The canonical name ős-athabaskan (ath-pro) is missing.
  • proto-athabaskan, the canonical name for the code ath-pro, is wrong; it should be ős-athabaskan.
  • The canonical name ős-arawa (auf-pro) is missing.
  • proto-arawa, the canonical name for the code auf-pro, is wrong; it should be ős-arawa.
  • The canonical name ős-arnhem (aus-arn-pro) is missing.
  • proto-arnhem, the canonical name for the code aus-arn-pro, is wrong; it should be ős-arnhem.
  • The canonical name ős-central new south wales (aus-cww-pro) is missing.
  • proto-central new south wales, the canonical name for the code aus-cww-pro, is wrong; it should be ős-central new south wales.
  • The canonical name ős-daly (aus-dal-pro) is missing.
  • proto-daly, the canonical name for the code aus-dal-pro, is wrong; it should be ős-daly.
  • The canonical name ős-nyulnyulan (aus-nyu-pro) is missing.
  • proto-nyulnyulan, the canonical name for the code aus-nyu-pro, is wrong; it should be ős-nyulnyulan.
  • The canonical name ős-pama-nyungan (aus-pam-pro) is missing.
  • proto-pama-nyungan, the canonical name for the code aus-pam-pro, is wrong; it should be ős-pama-nyungan.
  • proto-iwaidjan, the canonical name for the code aus-wdj-pro, is wrong; it should be ős-iwaidjan.
  • The canonical name ős-iwaidjan (aus-wdj-pro) is missing.
  • The canonical name ős-amuesha-chamicuro (awd-amc-pro) is missing.
  • proto-amuesha-chamicuro, the canonical name for the code awd-amc-pro, is wrong; it should be ős-amuesha-chamicuro.
  • The canonical name ős-kampa (awd-kmp-pro) is missing.
  • proto-kampa, the canonical name for the code awd-kmp-pro, is wrong; it should be ős-kampa.
  • proto-nawiki, the canonical name for the code awd-nwk-pro, is wrong; it should be ős-nawiki.
  • The canonical name ős-nawiki (awd-nwk-pro) is missing.
  • The canonical name ős-arawak (awd-pro) is missing.
  • proto-arawak, the canonical name for the code awd-pro, is wrong; it should be ős-arawak.
  • proto-paresi-waura, the canonical name for the code awd-prw-pro, is wrong; it should be ős-paresi-waura.
  • The canonical name ős-paresi-waura (awd-prw-pro) is missing.
  • The canonical name ős-ta-arawak (awd-taa-pro) is missing.
  • proto-ta-arawak, the canonical name for the code awd-taa-pro, is wrong; it should be ős-ta-arawak.
  • proto-cupan, the canonical name for the code azc-cup-pro, is wrong; it should be ős-cupan.
  • The canonical name ős-cupan (azc-cup-pro) is missing.
  • The canonical name ős-nahuan (azc-nah-pro) is missing.
  • proto-nahuan, the canonical name for the code azc-nah-pro, is wrong; it should be ős-nahuan.
  • The canonical name ős-numic (azc-num-pro) is missing.
  • proto-numic, the canonical name for the code azc-num-pro, is wrong; it should be ős-numic.
  • proto-uto-aztecan, the canonical name for the code azc-pro, is wrong; it should be ős-uto-aztecan.
  • The canonical name ős-uto-aztecan (azc-pro) is missing.
  • proto-takic, the canonical name for the code azc-tak-pro, is wrong; it should be ős-takic.
  • The canonical name ős-takic (azc-tak-pro) is missing.
  • babalia creole arab, the canonical name for the code bbz, is wrong; it should be babalia kreol arab.
  • The canonical name babalia kreol arab (bbz) is missing.
  • The canonical name ős-berber (ber-pro) is missing.
  • proto-berber, the canonical name for the code ber-pro, is wrong; it should be ős-berber.
  • proto-nguni, the canonical name for the code bnt-ngu-pro, is wrong; it should be ős-nguni.
  • The canonical name ős-nguni (bnt-ngu-pro) is missing.
  • proto-bantu, the canonical name for the code bnt-pro, is wrong; it should be ős-bantu.
  • The canonical name ős-bantu (bnt-pro) is missing.
  • The canonical name ős-sotho-tswana (bnt-sts-pro) is missing.
  • proto-sotho-tswana, the canonical name for the code bnt-sts-pro, is wrong; it should be ős-sotho-tswana.
  • proto-batak, the canonical name for the code btk-pro, is wrong; it should be ős-batak.
  • The canonical name ős-batak (btk-pro) is missing.
  • proto-abkhaz-abaza, the canonical name for the code cau-abz-pro, is wrong; it should be ős-abkhaz-abaza.
  • The canonical name ős-abkhaz-abaza (cau-abz-pro) is missing.
  • The canonical name ős-avaro-andian (cau-ava-pro) is missing.
  • proto-avaro-andian, the canonical name for the code cau-ava-pro, is wrong; it should be ős-avaro-andian.
  • The canonical name ős-circassian (cau-cir-pro) is missing.
  • proto-circassian, the canonical name for the code cau-cir-pro, is wrong; it should be ős-circassian.
  • proto-dargva, the canonical name for the code cau-drg-pro, is wrong; it should be ős-dargva.
  • The canonical name ős-dargva (cau-drg-pro) is missing.
  • The canonical name ős-lezghian (cau-lzg-pro) is missing.
  • proto-lezghian, the canonical name for the code cau-lzg-pro, is wrong; it should be ős-lezghian.
  • The canonical name ős-northeast caucasian (cau-nec-pro) is missing.
  • proto-northeast caucasian, the canonical name for the code cau-nec-pro, is wrong; it should be ős-northeast caucasian.
  • The canonical name ős-nakh (cau-nkh-pro) is missing.
  • proto-nakh, the canonical name for the code cau-nkh-pro, is wrong; it should be ős-nakh.
  • proto-northwest caucasian, the canonical name for the code cau-nwc-pro, is wrong; it should be ős-northwest caucasian.
  • The canonical name ős-northwest caucasian (cau-nwc-pro) is missing.
  • The canonical name ős-tsezian (cau-tsz-pro) is missing.
  • proto-tsezian, the canonical name for the code cau-tsz-pro, is wrong; it should be ős-tsezian.
  • proto-chibchan, the canonical name for the code cba-pro, is wrong; it should be ős-chibchan.
  • The canonical name ős-chibchan (cba-pro) is missing.
  • proto-north caucasian, the canonical name for the code ccn-pro, is wrong; it should be ős-north caucasian.
  • The canonical name ős-north caucasian (ccn-pro) is missing.
  • proto-georgian-zan, the canonical name for the code ccs-gzn-pro, is wrong; it should be ős-georgian-zan.
  • The canonical name ős-georgian-zan (ccs-gzn-pro) is missing.
  • The canonical name ős-kartvelian (ccs-pro) is missing.
  • proto-kartvelian, the canonical name for the code ccs-pro, is wrong; it should be ős-kartvelian.
  • proto-central chadic, the canonical name for the code cdc-cbm-pro, is wrong; it should be ős-central chadic.
  • The canonical name ős-central chadic (cdc-cbm-pro) is missing.
  • proto-masa, the canonical name for the code cdc-mas-pro, is wrong; it should be ős-masa.
  • The canonical name ős-masa (cdc-mas-pro) is missing.
  • proto-chadic, the canonical name for the code cdc-pro, is wrong; it should be ős-chadic.
  • The canonical name ős-chadic (cdc-pro) is missing.
  • The canonical name ős-caddoan (cdd-pro) is missing.
  • proto-caddoan, the canonical name for the code cdd-pro, is wrong; it should be ős-caddoan.
  • proto-brythonic, the canonical name for the code cel-bry-pro, is wrong; it should be ős-brythonic.
  • The canonical name ős-brythonic (cel-bry-pro) is missing.
  • proto-celtic, the canonical name for the code cel-pro, is wrong; it should be ős-celtic.
  • The canonical name ős-celtic (cel-pro) is missing.
  • The canonical name ős-chimakuan (chi-pro) is missing.
  • proto-chimakuan, the canonical name for the code chi-pro, is wrong; it should be ős-chimakuan.
  • The canonical name ős-chamic (cmc-pro) is missing.
  • proto-chamic, the canonical name for the code cmc-pro, is wrong; it should be ős-chamic.
  • The canonical name ős-bongo-bagirmi (csu-bba-pro) is missing.
  • proto-bongo-bagirmi, the canonical name for the code csu-bba-pro, is wrong; it should be ős-bongo-bagirmi.
  • proto-mangbetu, the canonical name for the code csu-maa-pro, is wrong; it should be ős-mangbetu.
  • The canonical name ős-mangbetu (csu-maa-pro) is missing.
  • The canonical name ős-central sudanic (csu-pro) is missing.
  • proto-central sudanic, the canonical name for the code csu-pro, is wrong; it should be ős-central sudanic.
  • proto-sara, the canonical name for the code csu-sar-pro, is wrong; it should be ős-sara.
  • The canonical name ős-sara (csu-sar-pro) is missing.
  • proto-cushitic, the canonical name for the code cus-pro, is wrong; it should be ős-cushitic.
  • The canonical name ős-cushitic (cus-pro) is missing.
  • proto-western mande, the canonical name for the code dmn-mdw-pro, is wrong; it should be ős-western mande.
  • The canonical name ős-western mande (dmn-mdw-pro) is missing.
  • proto-mande, the canonical name for the code dmn-pro, is wrong; it should be ős-mande.
  • The canonical name ős-mande (dmn-pro) is missing.
  • proto-dravidian, the canonical name for the code dra-pro, is wrong; it should be ős-dravidian.
  • The canonical name ős-dravidian (dra-pro) is missing.
  • proto-rukai, the canonical name for the code dru-pro, is wrong; it should be ős-rukai.
  • The canonical name ős-rukai (dru-pro) is missing.
  • The canonical name ős-eskimo (esx-esk-pro) is missing.
  • proto-eskimo, the canonical name for the code esx-esk-pro, is wrong; it should be ős-eskimo.
  • proto-inuit, the canonical name for the code esx-inu-pro, is wrong; it should be ős-inuit.
  • The canonical name ős-inuit (esx-inu-pro) is missing.
  • proto-eskimo-aleut, the canonical name for the code esx-pro, is wrong; it should be ős-eskimo-aleut.
  • The canonical name ős-eskimo-aleut (esx-pro) is missing.
  • proto-basque, the canonical name for the code euq-pro, is wrong; it should be ős-basque.
  • The canonical name ős-basque (euq-pro) is missing.
  • proto-finnic, the canonical name for the code fiu-fin-pro, is wrong; it should be ős-finnic.
  • The canonical name ős-finnic (fiu-fin-pro) is missing.
  • proto-germanic, the canonical name for the code gem-pro, is wrong; it should be ős-germanic.
  • The canonical name ős-germanic (gem-pro) is missing.
  • proto-norse, the canonical name for the code gmq-pro, is wrong; it should be ős-norse.
  • The canonical name ős-norse (gmq-pro) is missing.
  • proto-west germanic, the canonical name for the code gmw-pro, is wrong; it should be ős-west germanic.
  • The canonical name ős-west germanic (gmw-pro) is missing.
  • The canonical name ős-hellenic (grk-pro) is missing.
  • proto-hellenic, the canonical name for the code grk-pro, is wrong; it should be ős-hellenic.
  • The canonical name ős-hmong (hmn-pro) is missing.
  • proto-hmong, the canonical name for the code hmn-pro, is wrong; it should be ős-hmong.
  • The canonical name ős-mien (hmx-mie-pro) is missing.
  • proto-mien, the canonical name for the code hmx-mie-pro, is wrong; it should be ős-mien.
  • proto-hmong-mien, the canonical name for the code hmx-pro, is wrong; it should be ős-hmong-mien.
  • The canonical name ős-hmong-mien (hmx-pro) is missing.
  • proto-armenian, the canonical name for the code hyx-pro, is wrong; it should be ős-armenian.
  • The canonical name ős-armenian (hyx-pro) is missing.
  • The canonical name ős-nuristani (iir-nur-pro) is missing.
  • proto-nuristani, the canonical name for the code iir-nur-pro, is wrong; it should be ős-nuristani.
  • The canonical name ős-indo-iranian (iir-pro) is missing.
  • proto-indo-iranian, the canonical name for the code iir-pro, is wrong; it should be ős-indo-iranian.
  • proto-ijoid, the canonical name for the code ijo-pro, is wrong; it should be ős-ijoid.
  • The canonical name ős-ijoid (ijo-pro) is missing.
  • proto-dardic, the canonical name for the code inc-dar-pro, is wrong; it should be ős-dardic.
  • The canonical name ős-dardic (inc-dar-pro) is missing.
  • The canonical name ős-indo-aryan (inc-pro) is missing.
  • proto-indo-aryan, the canonical name for the code inc-pro, is wrong; it should be ős-indo-aryan.
  • The canonical name ős-anatolian (ine-ana-pro) is missing.
  • proto-anatolian, the canonical name for the code ine-ana-pro, is wrong; it should be ős-anatolian.
  • The canonical name ős-balti-szláv (ine-bsl-pro) is missing.
  • proto-balto-slavic, the canonical name for the code ine-bsl-pro, is wrong; it should be ős-balti-szláv.
  • The canonical name ősindoeurópai (ine-pro) is missing.
  • proto-indo-european, the canonical name for the code ine-pro, is wrong; it should be ősindoeurópai.
  • The canonical name ős-tocharian (ine-toc-pro) is missing.
  • proto-tocharian, the canonical name for the code ine-toc-pro, is wrong; it should be ős-tocharian.
  • The canonical name ingus (inh) is missing.
  • ingush, the canonical name for the code inh, is wrong; it should be ingus.
  • The canonical name ős-komisenian (ira-kms-pro) is missing.
  • proto-komisenian, the canonical name for the code ira-kms-pro, is wrong; it should be ős-komisenian.
  • The canonical name ős-munji-yidgha (ira-mny-pro) is missing.
  • proto-munji-yidgha, the canonical name for the code ira-mny-pro, is wrong; it should be ős-munji-yidgha.
  • The canonical name ős-medo-parthian (ira-mpr-pro) is missing.
  • proto-medo-parthian, the canonical name for the code ira-mpr-pro, is wrong; it should be ős-medo-parthian.
  • proto-pathan, the canonical name for the code ira-pat-pro, is wrong; it should be ős-pathan.
  • The canonical name ős-pathan (ira-pat-pro) is missing.
  • proto-iranian, the canonical name for the code ira-pro, is wrong; it should be ős-iranian.
  • The canonical name ős-iranian (ira-pro) is missing.
  • proto-sogdic, the canonical name for the code ira-sgc-pro, is wrong; it should be ős-sogdic.
  • The canonical name ős-sogdic (ira-sgc-pro) is missing.
  • proto-sanglechi-ishkashimi, the canonical name for the code ira-sgi-pro, is wrong; it should be ős-sanglechi-ishkashimi.
  • The canonical name ős-sanglechi-ishkashimi (ira-sgi-pro) is missing.
  • The canonical name ős-shughni-roshani (ira-shr-pro) is missing.
  • proto-shughni-roshani, the canonical name for the code ira-shr-pro, is wrong; it should be ős-shughni-roshani.
  • The canonical name ős-shughni-yazghulami (ira-shy-pro) is missing.
  • proto-shughni-yazghulami, the canonical name for the code ira-shy-pro, is wrong; it should be ős-shughni-yazghulami.
  • The canonical name ős-shughni-yazghulami-munji (ira-sym-pro) is missing.
  • proto-shughni-yazghulami-munji, the canonical name for the code ira-sym-pro, is wrong; it should be ős-shughni-yazghulami-munji.
  • The canonical name ős-zaza-gorani (ira-zgr-pro) is missing.
  • proto-zaza-gorani, the canonical name for the code ira-zgr-pro, is wrong; it should be ős-zaza-gorani.
  • proto-iroquoian, the canonical name for the code iro-pro, is wrong; it should be ős-iroquoian.
  • The canonical name ős-iroquoian (iro-pro) is missing.
  • proto-italic, the canonical name for the code itc-pro, is wrong; it should be ős-italic.
  • The canonical name ős-italic (itc-pro) is missing.
  • The canonical name judeo-olasz (itk) is missing.
  • judeo-italian, the canonical name for the code itk, is wrong; it should be judeo-olasz.
  • ingrian, the canonical name for the code izh, is wrong; it should be izsór.
  • The canonical name izsór (izh) is missing.
  • proto-japonic, the canonical name for the code jpx-pro, is wrong; it should be ős-japonic.
  • The canonical name ős-japonic (jpx-pro) is missing.
  • proto-ryukyuan, the canonical name for the code jpx-ryu-pro, is wrong; it should be ős-ryukyuan.
  • The canonical name ős-ryukyuan (jpx-ryu-pro) is missing.
  • The canonical name ős-karen (kar-pro) is missing.
  • proto-karen, the canonical name for the code kar-pro, is wrong; it should be ős-karen.
  • proto-khoe, the canonical name for the code khi-kho-pro, is wrong; it should be ős-khoe.
  • The canonical name ős-khoe (khi-kho-pro) is missing.
  • northern kurdish, the canonical name for the code kmr, is wrong; it should be északi kurd.
  • The canonical name északi kurd (kmr) is missing.
  • The canonical name ős-kru (kro-pro) is missing.
  • proto-kru, the canonical name for the code kro-pro, is wrong; it should be ős-kru.
  • The canonical name lív (liv) is missing.
  • livonian, the canonical name for the code liv, is wrong; it should be lív.
  • proto-atayalic, the canonical name for the code map-ata-pro, is wrong; it should be ős-atayalic.
  • The canonical name ős-atayalic (map-ata-pro) is missing.
  • proto-austronesian, the canonical name for the code map-pro, is wrong; it should be ős-austronesian.
  • The canonical name ős-austronesian (map-pro) is missing.
  • proto-aslian, the canonical name for the code mkh-asl-pro, is wrong; it should be ős-aslian.
  • The canonical name ős-aslian (mkh-asl-pro) is missing.
  • proto-bahnaric, the canonical name for the code mkh-ban-pro, is wrong; it should be ős-bahnaric.
  • The canonical name ős-bahnaric (mkh-ban-pro) is missing.
  • proto-katuic, the canonical name for the code mkh-kat-pro, is wrong; it should be ős-katuic.
  • The canonical name ős-katuic (mkh-kat-pro) is missing.
  • proto-khmuic, the canonical name for the code mkh-khm-pro, is wrong; it should be ős-khmuic.
  • The canonical name ős-khmuic (mkh-khm-pro) is missing.
  • proto-khmeric, the canonical name for the code mkh-kmr-pro, is wrong; it should be ős-khmeric.
  • The canonical name ős-khmeric (mkh-kmr-pro) is missing.
  • proto-monic, the canonical name for the code mkh-mnc-pro, is wrong; it should be ős-monic.
  • The canonical name ős-monic (mkh-mnc-pro) is missing.
  • proto-palaungic, the canonical name for the code mkh-pal-pro, is wrong; it should be ős-palaungic.
  • The canonical name ős-palaungic (mkh-pal-pro) is missing.
  • proto-pearic, the canonical name for the code mkh-pea-pro, is wrong; it should be ős-pearic.
  • The canonical name ős-pearic (mkh-pea-pro) is missing.
  • The canonical name ős-pakanic (mkh-pkn-pro) is missing.
  • proto-pakanic, the canonical name for the code mkh-pkn-pro, is wrong; it should be ős-pakanic.
  • proto-mon-khmer, the canonical name for the code mkh-pro, is wrong; it should be ős-mon-khmer.
  • The canonical name ős-mon-khmer (mkh-pro) is missing.
  • proto-vietic, the canonical name for the code mkh-vie-pro, is wrong; it should be ős-vietic.
  • The canonical name ős-vietic (mkh-vie-pro) is missing.
  • proto-munda, the canonical name for the code mun-pro, is wrong; it should be ős-munda.
  • The canonical name ős-munda (mun-pro) is missing.
  • proto-mayan, the canonical name for the code myn-pro, is wrong; it should be ős-mayan.
  • The canonical name ős-mayan (myn-pro) is missing.
  • The canonical name ős-chumash (nai-chu-pro) is missing.
  • proto-chumash, the canonical name for the code nai-chu-pro, is wrong; it should be ős-chumash.
  • The canonical name ős-chinookan (nai-ckn-pro) is missing.
  • proto-chinookan, the canonical name for the code nai-ckn-pro, is wrong; it should be ős-chinookan.
  • proto-kalapuyan, the canonical name for the code nai-klp-pro, is wrong; it should be ős-kalapuyan.
  • The canonical name ős-kalapuyan (nai-klp-pro) is missing.
  • The canonical name ős-maidun (nai-mdu-pro) is missing.
  • proto-maidun, the canonical name for the code nai-mdu-pro, is wrong; it should be ős-maidun.
  • The canonical name ős-mixe-zoque (nai-miz-pro) is missing.
  • proto-mixe-zoque, the canonical name for the code nai-miz-pro, is wrong; it should be ős-mixe-zoque.
  • proto-plateau penutian, the canonical name for the code nai-plp-pro, is wrong; it should be ős-plateau penutian.
  • The canonical name ős-plateau penutian (nai-plp-pro) is missing.
  • The canonical name ős-pomo (nai-pom-pro) is missing.
  • proto-pomo, the canonical name for the code nai-pom-pro, is wrong; it should be ős-pomo.
  • The canonical name ős-siouan-catawban (nai-sca-pro) is missing.
  • proto-siouan-catawban, the canonical name for the code nai-sca-pro, is wrong; it should be ős-siouan-catawban.
  • proto-totozoquean, the canonical name for the code nai-tot-pro, is wrong; it should be ős-totozoquean.
  • The canonical name ős-totozoquean (nai-tot-pro) is missing.
  • proto-tsimshianic, the canonical name for the code nai-tsi-pro, is wrong; it should be ős-tsimshianic.
  • The canonical name ős-tsimshianic (nai-tsi-pro) is missing.
  • The canonical name ős-utian (nai-utn-pro) is missing.
  • proto-utian, the canonical name for the code nai-utn-pro, is wrong; it should be ős-utian.
  • The canonical name ős-trans-new guinea (ngf-pro) is missing.
  • proto-trans-new guinea, the canonical name for the code ngf-pro, is wrong; it should be ős-trans-new guinea.
  • The canonical name ős-benue-congo (nic-bco-pro) is missing.
  • proto-benue-congo, the canonical name for the code nic-bco-pro, is wrong; it should be ős-benue-congo.
  • The canonical name ős-bantoid (nic-bod-pro) is missing.
  • proto-bantoid, the canonical name for the code nic-bod-pro, is wrong; it should be ős-bantoid.
  • proto-eastern oti-volta, the canonical name for the code nic-eov-pro, is wrong; it should be ős-eastern oti-volta.
  • The canonical name ős-eastern oti-volta (nic-eov-pro) is missing.
  • proto-gurunsi, the canonical name for the code nic-gns-pro, is wrong; it should be ős-gurunsi.
  • The canonical name ős-gurunsi (nic-gns-pro) is missing.
  • proto-grassfields, the canonical name for the code nic-grf-pro, is wrong; it should be ős-grassfields.
  • The canonical name ős-grassfields (nic-grf-pro) is missing.
  • proto-gur, the canonical name for the code nic-gur-pro, is wrong; it should be ős-gur.
  • The canonical name ős-gur (nic-gur-pro) is missing.
  • The canonical name ős-jukunoid (nic-jkn-pro) is missing.
  • proto-jukunoid, the canonical name for the code nic-jkn-pro, is wrong; it should be ős-jukunoid.
  • proto-lower cross river, the canonical name for the code nic-lcr-pro, is wrong; it should be ős-lower cross river.
  • The canonical name ős-lower cross river (nic-lcr-pro) is missing.
  • proto-ogoni, the canonical name for the code nic-ogo-pro, is wrong; it should be ős-ogoni.
  • The canonical name ős-ogoni (nic-ogo-pro) is missing.
  • The canonical name ős-oti-volta (nic-ovo-pro) is missing.
  • proto-oti-volta, the canonical name for the code nic-ovo-pro, is wrong; it should be ős-oti-volta.
  • proto-plateau, the canonical name for the code nic-plt-pro, is wrong; it should be ős-plateau.
  • The canonical name ős-plateau (nic-plt-pro) is missing.
  • proto-niger-congo, the canonical name for the code nic-pro, is wrong; it should be ős-niger-congo.
  • The canonical name ős-niger-congo (nic-pro) is missing.
  • proto-ubangian, the canonical name for the code nic-ubg-pro, is wrong; it should be ős-ubangian.
  • The canonical name ős-ubangian (nic-ubg-pro) is missing.
  • The canonical name ős-upper cross river (nic-ucr-pro) is missing.
  • proto-upper cross river, the canonical name for the code nic-ucr-pro, is wrong; it should be ős-upper cross river.
  • proto-volta-congo, the canonical name for the code nic-vco-pro, is wrong; it should be ős-volta-congo.
  • The canonical name ős-volta-congo (nic-vco-pro) is missing.
  • The canonical name ős-nubian (nub-pro) is missing.
  • proto-nubian, the canonical name for the code nub-pro, is wrong; it should be ős-nubian.
  • The canonical name ős-chatino (omq-cha-pro) is missing.
  • proto-chatino, the canonical name for the code omq-cha-pro, is wrong; it should be ős-chatino.
  • proto-mazatec, the canonical name for the code omq-maz-pro, is wrong; it should be ős-mazatec.
  • The canonical name ős-mazatec (omq-maz-pro) is missing.
  • proto-mixtecan, the canonical name for the code omq-mix-pro, is wrong; it should be ős-mixtecan.
  • The canonical name ős-mixtecan (omq-mix-pro) is missing.
  • The canonical name ős-mixtec (omq-mxt-pro) is missing.
  • proto-mixtec, the canonical name for the code omq-mxt-pro, is wrong; it should be ős-mixtec.
  • The canonical name ős-oto-pamean (omq-otp-pro) is missing.
  • proto-oto-pamean, the canonical name for the code omq-otp-pro, is wrong; it should be ős-oto-pamean.
  • proto-oto-manguean, the canonical name for the code omq-pro, is wrong; it should be ős-oto-manguean.
  • The canonical name ős-oto-manguean (omq-pro) is missing.
  • proto-trique, the canonical name for the code omq-tri-pro, is wrong; it should be ős-trique.
  • The canonical name ős-trique (omq-tri-pro) is missing.
  • The canonical name ős-zapotecan (omq-zap-pro) is missing.
  • proto-zapotecan, the canonical name for the code omq-zap-pro, is wrong; it should be ős-zapotecan.
  • The canonical name ős-zapotec (omq-zpc-pro) is missing.
  • proto-zapotec, the canonical name for the code omq-zpc-pro, is wrong; it should be ős-zapotec.
  • proto-aroid, the canonical name for the code omv-aro-pro, is wrong; it should be ős-aroid.
  • The canonical name ős-aroid (omv-aro-pro) is missing.
  • proto-dizoid, the canonical name for the code omv-diz-pro, is wrong; it should be ős-dizoid.
  • The canonical name ős-dizoid (omv-diz-pro) is missing.
  • proto-omotic, the canonical name for the code omv-pro, is wrong; it should be ős-omotic.
  • The canonical name ős-omotic (omv-pro) is missing.
  • The canonical name óorosz (orv) is missing.
  • ó-keleti-szláv, the canonical name for the code orv, is wrong; it should be óorosz.
  • proto-ossetic, the canonical name for the code os-pro, is wrong; it should be ős-ossetic.
  • The canonical name ős-ossetic (os-pro) is missing.
  • proto-otomi, the canonical name for the code oto-otm-pro, is wrong; it should be ős-otomi.
  • The canonical name ős-otomi (oto-otm-pro) is missing.
  • The canonical name ős-otomian (oto-pro) is missing.
  • proto-otomian, the canonical name for the code oto-pro, is wrong; it should be ős-otomian.
  • pennsylvania german, the canonical name for the code pdc, is wrong; it should be pennsylvaniai német.
  • The canonical name pennsylvaniai német (pdc) is missing.
  • The canonical name ős-kalamian (phi-kal-pro) is missing.
  • proto-kalamian, the canonical name for the code phi-kal-pro, is wrong; it should be ős-kalamian.
  • proto-philippine, the canonical name for the code phi-pro, is wrong; it should be ős-philippine.
  • The canonical name ős-philippine (phi-pro) is missing.
  • piedmontese, the canonical name for the code pms, is wrong; it should be piemonti.
  • The canonical name piemonti (pms) is missing.
  • proto-bungku-tolaki, the canonical name for the code poz-btk-pro, is wrong; it should be ős-bungku-tolaki.
  • The canonical name ős-bungku-tolaki (poz-btk-pro) is missing.
  • proto-central-eastern malayo-polynesian, the canonical name for the code poz-cet-pro, is wrong; it should be ős-central-eastern malayo-polynesian.
  • The canonical name ős-central-eastern malayo-polynesian (poz-cet-pro) is missing.
  • The canonical name ős-halmahera-cenderawasih (poz-hce-pro) is missing.
  • proto-halmahera-cenderawasih, the canonical name for the code poz-hce-pro, is wrong; it should be ős-halmahera-cenderawasih.
  • proto-lampungic, the canonical name for the code poz-lgx-pro, is wrong; it should be ős-lampungic.
  • The canonical name ős-lampungic (poz-lgx-pro) is missing.
  • The canonical name ős-malayo-chamic (poz-mcm-pro) is missing.
  • proto-malayo-chamic, the canonical name for the code poz-mcm-pro, is wrong; it should be ős-malayo-chamic.
  • proto-malayic, the canonical name for the code poz-mly-pro, is wrong; it should be ős-malayic.
  • The canonical name ős-malayic (poz-mly-pro) is missing.
  • The canonical name ős-malayo-sumbawan (poz-msa-pro) is missing.
  • proto-malayo-sumbawan, the canonical name for the code poz-msa-pro, is wrong; it should be ős-malayo-sumbawan.
  • The canonical name ős-oceanic (poz-oce-pro) is missing.
  • proto-oceanic, the canonical name for the code poz-oce-pro, is wrong; it should be ős-oceanic.
  • The canonical name ős-eastern polynesian (poz-pep-pro) is missing.
  • proto-eastern polynesian, the canonical name for the code poz-pep-pro, is wrong; it should be ős-eastern polynesian.
  • proto-nuclear polynesian, the canonical name for the code poz-pnp-pro, is wrong; it should be ős-nuclear polynesian.
  • The canonical name ős-nuclear polynesian (poz-pnp-pro) is missing.
  • proto-polynesian, the canonical name for the code poz-pol-pro, is wrong; it should be ős-polynesian.
  • The canonical name ős-polynesian (poz-pol-pro) is missing.
  • The canonical name ős-malayo-polynesian (poz-pro) is missing.
  • proto-malayo-polynesian, the canonical name for the code poz-pro, is wrong; it should be ős-malayo-polynesian.
  • The canonical name ős-south sulawesi (poz-ssw-pro) is missing.
  • proto-south sulawesi, the canonical name for the code poz-ssw-pro, is wrong; it should be ős-south sulawesi.
  • The canonical name ős-sunda-sulawesi (poz-sus-pro) is missing.
  • proto-sunda-sulawesi, the canonical name for the code poz-sus-pro, is wrong; it should be ős-sunda-sulawesi.
  • The canonical name ős-north sarawak (poz-swa-pro) is missing.
  • proto-north sarawak, the canonical name for the code poz-swa-pro, is wrong; it should be ős-north sarawak.
  • The canonical name ős-eastern malayo-polynesian (pqe-pro) is missing.
  • proto-eastern malayo-polynesian, the canonical name for the code pqe-pro, is wrong; it should be ős-eastern malayo-polynesian.
  • proto-great andamanese, the canonical name for the code qfa-adm-pro, is wrong; it should be ős-great andamanese.
  • The canonical name ős-great andamanese (qfa-adm-pro) is missing.
  • proto-chukotko-kamchatkan, the canonical name for the code qfa-cka-pro, is wrong; it should be ős-chukotko-kamchatkan.
  • The canonical name ős-chukotko-kamchatkan (qfa-cka-pro) is missing.
  • proto-hurro-urartian, the canonical name for the code qfa-hur-pro, is wrong; it should be ős-hurro-urartian.
  • The canonical name ős-hurro-urartian (qfa-hur-pro) is missing.
  • proto-kadu, the canonical name for the code qfa-kad-pro, is wrong; it should be ős-kadu.
  • The canonical name ős-kadu (qfa-kad-pro) is missing.
  • The canonical name ős-kam-sui (qfa-kms-pro) is missing.
  • proto-kam-sui, the canonical name for the code qfa-kms-pro, is wrong; it should be ős-kam-sui.
  • proto-korean, the canonical name for the code qfa-kor-pro, is wrong; it should be ős-korean.
  • The canonical name ős-korean (qfa-kor-pro) is missing.
  • proto-kra, the canonical name for the code qfa-kra-pro, is wrong; it should be ős-kra.
  • The canonical name ős-kra (qfa-kra-pro) is missing.
  • The canonical name ős-hlai (qfa-lic-pro) is missing.
  • proto-hlai, the canonical name for the code qfa-lic-pro, is wrong; it should be ős-hlai.
  • proto-ong-be, the canonical name for the code qfa-onb-pro, is wrong; it should be ős-ong-be.
  • The canonical name ős-ong-be (qfa-onb-pro) is missing.
  • proto-ongan, the canonical name for the code qfa-ong-pro, is wrong; it should be ős-ongan.
  • The canonical name ős-ongan (qfa-ong-pro) is missing.
  • proto-kra-dai, the canonical name for the code qfa-tak-pro, is wrong; it should be ős-kra-dai.
  • The canonical name ős-kra-dai (qfa-tak-pro) is missing.
  • The canonical name ős-yeniseian (qfa-yen-pro) is missing.
  • proto-yeniseian, the canonical name for the code qfa-yen-pro, is wrong; it should be ős-yeniseian.
  • proto-yukaghir, the canonical name for the code qfa-yuk-pro, is wrong; it should be ős-yukaghir.
  • The canonical name ős-yukaghir (qfa-yuk-pro) is missing.
  • The canonical name ős-jê (sai-jee-pro) is missing.
  • proto-jê, the canonical name for the code sai-jee-pro, is wrong; it should be ős-jê.
  • The canonical name ős-salish (sal-pro) is missing.
  • proto-salish, the canonical name for the code sal-pro, is wrong; it should be ős-salish.
  • proto-daju, the canonical name for the code sdv-daj-pro, is wrong; it should be ős-daju.
  • The canonical name ős-daju (sdv-daj-pro) is missing.
  • The canonical name ős-eastern jebel (sdv-eje-pro) is missing.
  • proto-eastern jebel, the canonical name for the code sdv-eje-pro, is wrong; it should be ős-eastern jebel.
  • proto-nilotic, the canonical name for the code sdv-nil-pro, is wrong; it should be ős-nilotic.
  • The canonical name ős-nilotic (sdv-nil-pro) is missing.
  • proto-nyima, the canonical name for the code sdv-nyi-pro, is wrong; it should be ős-nyima.
  • The canonical name ős-nyima (sdv-nyi-pro) is missing.
  • The canonical name ős-taman (sdv-tmn-pro) is missing.
  • proto-taman, the canonical name for the code sdv-tmn-pro, is wrong; it should be ős-taman.
  • proto-semitic, the canonical name for the code sem-pro, is wrong; it should be ős-semitic.
  • The canonical name ős-semitic (sem-pro) is missing.
  • The canonical name ős-siouan (sio-pro) is missing.
  • proto-siouan, the canonical name for the code sio-pro, is wrong; it should be ős-siouan.
  • The canonical name ős-hrusish (sit-hrs-pro) is missing.
  • proto-hrusish, the canonical name for the code sit-hrs-pro, is wrong; it should be ős-hrusish.
  • The canonical name ős-kham (sit-kha-pro) is missing.
  • proto-kham, the canonical name for the code sit-kha-pro, is wrong; it should be ős-kham.
  • The canonical name ős-luish (sit-luu-pro) is missing.
  • proto-luish, the canonical name for the code sit-luu-pro, is wrong; it should be ős-luish.
  • The canonical name ős-sino-tibetan (sit-pro) is missing.
  • proto-sino-tibetan, the canonical name for the code sit-pro, is wrong; it should be ős-sino-tibetan.
  • The canonical name ős-tani (sit-tan-pro) is missing.
  • proto-tani, the canonical name for the code sit-tan-pro, is wrong; it should be ős-tani.
  • proto-slavic, the canonical name for the code sla-pro, is wrong; it should be ősszláv.
  • The canonical name ősszláv (sla-pro) is missing.
  • proto-samic, the canonical name for the code smi-pro, is wrong; it should be ős-samic.
  • The canonical name ős-samic (smi-pro) is missing.
  • proto-songhay, the canonical name for the code son-pro, is wrong; it should be ős-songhay.
  • The canonical name ős-songhay (son-pro) is missing.
  • The canonical name ős-albanian (sqj-pro) is missing.
  • proto-albanian, the canonical name for the code sqj-pro, is wrong; it should be ős-albanian.
  • proto-kuliak, the canonical name for the code ssa-klk-pro, is wrong; it should be ős-kuliak.
  • The canonical name ős-kuliak (ssa-klk-pro) is missing.
  • The canonical name ős-koman (ssa-kom-pro) is missing.
  • proto-koman, the canonical name for the code ssa-kom-pro, is wrong; it should be ős-koman.
  • proto-nilo-saharan, the canonical name for the code ssa-pro, is wrong; it should be ős-nilo-saharan.
  • The canonical name ős-nilo-saharan (ssa-pro) is missing.
  • proto-samoyedic, the canonical name for the code syd-pro, is wrong; it should be ős-samoyedic.
  • The canonical name ős-samoyedic (syd-pro) is missing.
  • proto-tai, the canonical name for the code tai-pro, is wrong; it should be ős-tai.
  • The canonical name ős-tai (tai-pro) is missing.
  • proto-southwestern tai, the canonical name for the code tai-swe-pro, is wrong; it should be ős-southwestern tai.
  • The canonical name ős-southwestern tai (tai-swe-pro) is missing.
  • The canonical name ős-bodo-garo (tbq-bdg-pro) is missing.
  • proto-bodo-garo, the canonical name for the code tbq-bdg-pro, is wrong; it should be ős-bodo-garo.
  • proto-kuki-chin, the canonical name for the code tbq-kuk-pro, is wrong; it should be ős-kuki-chin.
  • The canonical name ős-kuki-chin (tbq-kuk-pro) is missing.
  • proto-lalo, the canonical name for the code tbq-lal-pro, is wrong; it should be ős-lalo.
  • The canonical name ős-lalo (tbq-lal-pro) is missing.
  • The canonical name ős-lolo-burmese (tbq-lob-pro) is missing.
  • proto-lolo-burmese, the canonical name for the code tbq-lob-pro, is wrong; it should be ős-lolo-burmese.
  • The canonical name ős-loloish (tbq-lol-pro) is missing.
  • proto-loloish, the canonical name for the code tbq-lol-pro, is wrong; it should be ős-loloish.
  • proto-turkic, the canonical name for the code trk-pro, is wrong; it should be ős-turkic.
  • The canonical name ős-turkic (trk-pro) is missing.
  • proto-tupi-guarani, the canonical name for the code tup-gua-pro, is wrong; it should be ős-tupi-guarani.
  • The canonical name ős-tupi-guarani (tup-gua-pro) is missing.
  • The canonical name ős-tupian (tup-pro) is missing.
  • proto-tupian, the canonical name for the code tup-pro, is wrong; it should be ős-tupian.
  • The canonical name ős-tungusic (tuw-pro) is missing.
  • proto-tungusic, the canonical name for the code tuw-pro, is wrong; it should be ős-tungusic.
  • The canonical name ős-mordvinic (urj-mdv-pro) is missing.
  • proto-mordvinic, the canonical name for the code urj-mdv-pro, is wrong; it should be ős-mordvinic.
  • proto-permic, the canonical name for the code urj-prm-pro, is wrong; it should be ős-permic.
  • The canonical name ős-permic (urj-prm-pro) is missing.
  • The canonical name ős-uralic (urj-pro) is missing.
  • proto-uralic, the canonical name for the code urj-pro, is wrong; it should be ős-uralic.
  • The canonical name ős-ugric (urj-ugr-pro) is missing.
  • proto-ugric, the canonical name for the code urj-ugr-pro, is wrong; it should be ős-ugric.
  • The canonical name ős-mongolic (xgn-pro) is missing.
  • proto-mongolic, the canonical name for the code xgn-pro, is wrong; it should be ős-mongolic.
  • proto-tatic, the canonical name for the code xme-ttc-pro, is wrong; it should be ős-tatic.
  • The canonical name ős-tatic (xme-ttc-pro) is missing.
  • The canonical name ős-na-dene (xnd-pro) is missing.
  • proto-na-dene, the canonical name for the code xnd-pro, is wrong; it should be ős-na-dene.
  • The canonical name ős-scythian (xsc-pro) is missing.
  • proto-scythian, the canonical name for the code xsc-pro, is wrong; it should be ős-scythian.
  • The canonical name ős-saka (xsc-sak-pro) is missing.
  • proto-saka, the canonical name for the code xsc-sak-pro, is wrong; it should be ős-saka.
  • The canonical name ős-saka-wakhi (xsc-skw-pro) is missing.
  • proto-saka-wakhi, the canonical name for the code xsc-skw-pro, is wrong; it should be ős-saka-wakhi.
  • The canonical name ős-yupik (ypk-pro) is missing.
  • proto-yupik, the canonical name for the code ypk-pro, is wrong; it should be ős-yupik.
  • The canonical name ős-min (zhx-min-pro) is missing.
  • proto-min, the canonical name for the code zhx-min-pro, is wrong; it should be ős-min.
  • proto-khasian, the canonical name for the code aav-khs-pro, is wrong; it should be ős-khasian.
  • proto-nicobarese, the canonical name for the code aav-nic-pro, is wrong; it should be ős-nicobarese.
  • proto-pnar-khasi-lyngngam, the canonical name for the code aav-pkl-pro, is wrong; it should be ős-pnar-khasi-lyngngam.
  • proto-austroasiatic, the canonical name for the code aav-pro, is wrong; it should be ős-austroasiatic.
  • proto-afro-asiatic, the canonical name for the code afa-pro, is wrong; it should be ős-afro-asiatic.
  • proto-algonquian, the canonical name for the code alg-pro, is wrong; it should be ős-algonquian.
  • proto-bua, the canonical name for the code alv-bua-pro, is wrong; it should be ős-bua.
  • proto-cangin, the canonical name for the code alv-cng-pro, is wrong; it should be ős-cangin.
  • proto-edoid, the canonical name for the code alv-edo-pro, is wrong; it should be ős-edoid.
  • proto-fali, the canonical name for the code alv-fli-pro, is wrong; it should be ős-fali.
  • proto-gbe, the canonical name for the code alv-gbe-pro, is wrong; it should be ős-gbe.
  • proto-guang, the canonical name for the code alv-gng-pro, is wrong; it should be ős-guang.
  • proto-central togo, the canonical name for the code alv-gtm-pro, is wrong; it should be ős-central togo.
  • proto-heiban, the canonical name for the code alv-hei-pro, is wrong; it should be ős-heiban.
  • proto-igboid, the canonical name for the code alv-igb-pro, is wrong; it should be ős-igboid.
  • proto-kwa, the canonical name for the code alv-kwa-pro, is wrong; it should be ős-kwa.
  • proto-mumuye, the canonical name for the code alv-mum-pro, is wrong; it should be ős-mumuye.
  • proto-nupoid, the canonical name for the code alv-nup-pro, is wrong; it should be ős-nupoid.
  • proto-atlantic-congo, the canonical name for the code alv-pro, is wrong; it should be ős-atlantic-congo.
  • proto-yoruboid, the canonical name for the code alv-yor-pro, is wrong; it should be ős-yoruboid.
  • proto-apachean, the canonical name for the code apa-pro, is wrong; it should be ős-apachean.
  • proto-algic, the canonical name for the code aql-pro, is wrong; it should be ős-algic.
  • proto-athabaskan, the canonical name for the code ath-pro, is wrong; it should be ős-athabaskan.
  • proto-arawa, the canonical name for the code auf-pro, is wrong; it should be ős-arawa.
  • proto-arnhem, the canonical name for the code aus-arn-pro, is wrong; it should be ős-arnhem.
  • proto-central new south wales, the canonical name for the code aus-cww-pro, is wrong; it should be ős-central new south wales.
  • proto-daly, the canonical name for the code aus-dal-pro, is wrong; it should be ős-daly.
  • proto-nyulnyulan, the canonical name for the code aus-nyu-pro, is wrong; it should be ős-nyulnyulan.
  • proto-pama-nyungan, the canonical name for the code aus-pam-pro, is wrong; it should be ős-pama-nyungan.
  • proto-iwaidjan, the canonical name for the code aus-wdj-pro, is wrong; it should be ős-iwaidjan.
  • proto-amuesha-chamicuro, the canonical name for the code awd-amc-pro, is wrong; it should be ős-amuesha-chamicuro.
  • proto-kampa, the canonical name for the code awd-kmp-pro, is wrong; it should be ős-kampa.
  • proto-nawiki, the canonical name for the code awd-nwk-pro, is wrong; it should be ős-nawiki.
  • proto-arawak, the canonical name for the code awd-pro, is wrong; it should be ős-arawak.
  • proto-paresi-waura, the canonical name for the code awd-prw-pro, is wrong; it should be ős-paresi-waura.
  • proto-ta-arawak, the canonical name for the code awd-taa-pro, is wrong; it should be ős-ta-arawak.
  • proto-cupan, the canonical name for the code azc-cup-pro, is wrong; it should be ős-cupan.
  • proto-nahuan, the canonical name for the code azc-nah-pro, is wrong; it should be ős-nahuan.
  • proto-numic, the canonical name for the code azc-num-pro, is wrong; it should be ős-numic.
  • proto-uto-aztecan, the canonical name for the code azc-pro, is wrong; it should be ős-uto-aztecan.
  • proto-takic, the canonical name for the code azc-tak-pro, is wrong; it should be ős-takic.
  • babalia creole arab, the canonical name for the code bbz, is wrong; it should be babalia kreol arab.
  • proto-berber, the canonical name for the code ber-pro, is wrong; it should be ős-berber.
  • proto-nguni, the canonical name for the code bnt-ngu-pro, is wrong; it should be ős-nguni.
  • proto-bantu, the canonical name for the code bnt-pro, is wrong; it should be ős-bantu.
  • proto-sotho-tswana, the canonical name for the code bnt-sts-pro, is wrong; it should be ős-sotho-tswana.
  • proto-batak, the canonical name for the code btk-pro, is wrong; it should be ős-batak.
  • proto-abkhaz-abaza, the canonical name for the code cau-abz-pro, is wrong; it should be ős-abkhaz-abaza.
  • proto-avaro-andian, the canonical name for the code cau-ava-pro, is wrong; it should be ős-avaro-andian.
  • proto-circassian, the canonical name for the code cau-cir-pro, is wrong; it should be ős-circassian.
  • proto-dargva, the canonical name for the code cau-drg-pro, is wrong; it should be ős-dargva.
  • proto-lezghian, the canonical name for the code cau-lzg-pro, is wrong; it should be ős-lezghian.
  • proto-northeast caucasian, the canonical name for the code cau-nec-pro, is wrong; it should be ős-northeast caucasian.
  • proto-nakh, the canonical name for the code cau-nkh-pro, is wrong; it should be ős-nakh.
  • proto-northwest caucasian, the canonical name for the code cau-nwc-pro, is wrong; it should be ős-northwest caucasian.
  • proto-tsezian, the canonical name for the code cau-tsz-pro, is wrong; it should be ős-tsezian.
  • proto-chibchan, the canonical name for the code cba-pro, is wrong; it should be ős-chibchan.
  • proto-north caucasian, the canonical name for the code ccn-pro, is wrong; it should be ős-north caucasian.
  • proto-georgian-zan, the canonical name for the code ccs-gzn-pro, is wrong; it should be ős-georgian-zan.
  • proto-kartvelian, the canonical name for the code ccs-pro, is wrong; it should be ős-kartvelian.
  • proto-central chadic, the canonical name for the code cdc-cbm-pro, is wrong; it should be ős-central chadic.
  • proto-masa, the canonical name for the code cdc-mas-pro, is wrong; it should be ős-masa.
  • proto-chadic, the canonical name for the code cdc-pro, is wrong; it should be ős-chadic.
  • proto-caddoan, the canonical name for the code cdd-pro, is wrong; it should be ős-caddoan.
  • proto-brythonic, the canonical name for the code cel-bry-pro, is wrong; it should be ős-brythonic.
  • proto-celtic, the canonical name for the code cel-pro, is wrong; it should be ős-celtic.
  • proto-chimakuan, the canonical name for the code chi-pro, is wrong; it should be ős-chimakuan.
  • proto-chamic, the canonical name for the code cmc-pro, is wrong; it should be ős-chamic.
  • proto-bongo-bagirmi, the canonical name for the code csu-bba-pro, is wrong; it should be ős-bongo-bagirmi.
  • proto-mangbetu, the canonical name for the code csu-maa-pro, is wrong; it should be ős-mangbetu.
  • proto-central sudanic, the canonical name for the code csu-pro, is wrong; it should be ős-central sudanic.
  • proto-sara, the canonical name for the code csu-sar-pro, is wrong; it should be ős-sara.
  • proto-cushitic, the canonical name for the code cus-pro, is wrong; it should be ős-cushitic.
  • proto-western mande, the canonical name for the code dmn-mdw-pro, is wrong; it should be ős-western mande.
  • proto-mande, the canonical name for the code dmn-pro, is wrong; it should be ős-mande.
  • proto-dravidian, the canonical name for the code dra-pro, is wrong; it should be ős-dravidian.
  • proto-rukai, the canonical name for the code dru-pro, is wrong; it should be ős-rukai.
  • proto-eskimo, the canonical name for the code esx-esk-pro, is wrong; it should be ős-eskimo.
  • proto-inuit, the canonical name for the code esx-inu-pro, is wrong; it should be ős-inuit.
  • proto-eskimo-aleut, the canonical name for the code esx-pro, is wrong; it should be ős-eskimo-aleut.
  • proto-basque, the canonical name for the code euq-pro, is wrong; it should be ős-basque.
  • proto-finnic, the canonical name for the code fiu-fin-pro, is wrong; it should be ős-finnic.
  • proto-germanic, the canonical name for the code gem-pro, is wrong; it should be ős-germanic.
  • proto-norse, the canonical name for the code gmq-pro, is wrong; it should be ős-norse.
  • proto-west germanic, the canonical name for the code gmw-pro, is wrong; it should be ős-west germanic.
  • proto-hellenic, the canonical name for the code grk-pro, is wrong; it should be ős-hellenic.
  • proto-hmong, the canonical name for the code hmn-pro, is wrong; it should be ős-hmong.
  • proto-mien, the canonical name for the code hmx-mie-pro, is wrong; it should be ős-mien.
  • proto-hmong-mien, the canonical name for the code hmx-pro, is wrong; it should be ős-hmong-mien.
  • proto-armenian, the canonical name for the code hyx-pro, is wrong; it should be ős-armenian.
  • proto-nuristani, the canonical name for the code iir-nur-pro, is wrong; it should be ős-nuristani.
  • proto-indo-iranian, the canonical name for the code iir-pro, is wrong; it should be ős-indo-iranian.
  • proto-ijoid, the canonical name for the code ijo-pro, is wrong; it should be ős-ijoid.
  • proto-dardic, the canonical name for the code inc-dar-pro, is wrong; it should be ős-dardic.
  • proto-indo-aryan, the canonical name for the code inc-pro, is wrong; it should be ős-indo-aryan.
  • proto-anatolian, the canonical name for the code ine-ana-pro, is wrong; it should be ős-anatolian.
  • proto-balto-slavic, the canonical name for the code ine-bsl-pro, is wrong; it should be ős-balti-szláv.
  • proto-indo-european, the canonical name for the code ine-pro, is wrong; it should be ősindoeurópai.
  • proto-tocharian, the canonical name for the code ine-toc-pro, is wrong; it should be ős-tocharian.
  • ingush, the canonical name for the code inh, is wrong; it should be ingus.
  • proto-komisenian, the canonical name for the code ira-kms-pro, is wrong; it should be ős-komisenian.
  • proto-munji-yidgha, the canonical name for the code ira-mny-pro, is wrong; it should be ős-munji-yidgha.
  • proto-medo-parthian, the canonical name for the code ira-mpr-pro, is wrong; it should be ős-medo-parthian.
  • proto-pathan, the canonical name for the code ira-pat-pro, is wrong; it should be ős-pathan.
  • proto-iranian, the canonical name for the code ira-pro, is wrong; it should be ős-iranian.
  • proto-sogdic, the canonical name for the code ira-sgc-pro, is wrong; it should be ős-sogdic.
  • proto-sanglechi-ishkashimi, the canonical name for the code ira-sgi-pro, is wrong; it should be ős-sanglechi-ishkashimi.
  • proto-shughni-roshani, the canonical name for the code ira-shr-pro, is wrong; it should be ős-shughni-roshani.
  • proto-shughni-yazghulami, the canonical name for the code ira-shy-pro, is wrong; it should be ős-shughni-yazghulami.
  • proto-shughni-yazghulami-munji, the canonical name for the code ira-sym-pro, is wrong; it should be ős-shughni-yazghulami-munji.
  • proto-zaza-gorani, the canonical name for the code ira-zgr-pro, is wrong; it should be ős-zaza-gorani.
  • proto-iroquoian, the canonical name for the code iro-pro, is wrong; it should be ős-iroquoian.
  • proto-italic, the canonical name for the code itc-pro, is wrong; it should be ős-italic.
  • judeo-italian, the canonical name for the code itk, is wrong; it should be judeo-olasz.
  • ingrian, the canonical name for the code izh, is wrong; it should be izsór.
  • proto-japonic, the canonical name for the code jpx-pro, is wrong; it should be ős-japonic.
  • proto-ryukyuan, the canonical name for the code jpx-ryu-pro, is wrong; it should be ős-ryukyuan.
  • proto-karen, the canonical name for the code kar-pro, is wrong; it should be ős-karen.
  • proto-khoe, the canonical name for the code khi-kho-pro, is wrong; it should be ős-khoe.
  • northern kurdish, the canonical name for the code kmr, is wrong; it should be északi kurd.
  • proto-kru, the canonical name for the code kro-pro, is wrong; it should be ős-kru.
  • livonian, the canonical name for the code liv, is wrong; it should be lív.
  • proto-atayalic, the canonical name for the code map-ata-pro, is wrong; it should be ős-atayalic.
  • proto-austronesian, the canonical name for the code map-pro, is wrong; it should be ős-austronesian.
  • proto-aslian, the canonical name for the code mkh-asl-pro, is wrong; it should be ős-aslian.
  • proto-bahnaric, the canonical name for the code mkh-ban-pro, is wrong; it should be ős-bahnaric.
  • proto-katuic, the canonical name for the code mkh-kat-pro, is wrong; it should be ős-katuic.
  • proto-khmuic, the canonical name for the code mkh-khm-pro, is wrong; it should be ős-khmuic.
  • proto-khmeric, the canonical name for the code mkh-kmr-pro, is wrong; it should be ős-khmeric.
  • proto-monic, the canonical name for the code mkh-mnc-pro, is wrong; it should be ős-monic.
  • proto-palaungic, the canonical name for the code mkh-pal-pro, is wrong; it should be ős-palaungic.
  • proto-pearic, the canonical name for the code mkh-pea-pro, is wrong; it should be ős-pearic.
  • proto-pakanic, the canonical name for the code mkh-pkn-pro, is wrong; it should be ős-pakanic.
  • proto-mon-khmer, the canonical name for the code mkh-pro, is wrong; it should be ős-mon-khmer.
  • proto-vietic, the canonical name for the code mkh-vie-pro, is wrong; it should be ős-vietic.
  • proto-munda, the canonical name for the code mun-pro, is wrong; it should be ős-munda.
  • proto-mayan, the canonical name for the code myn-pro, is wrong; it should be ős-mayan.
  • proto-chumash, the canonical name for the code nai-chu-pro, is wrong; it should be ős-chumash.
  • proto-chinookan, the canonical name for the code nai-ckn-pro, is wrong; it should be ős-chinookan.
  • proto-kalapuyan, the canonical name for the code nai-klp-pro, is wrong; it should be ős-kalapuyan.
  • proto-maidun, the canonical name for the code nai-mdu-pro, is wrong; it should be ős-maidun.
  • proto-mixe-zoque, the canonical name for the code nai-miz-pro, is wrong; it should be ős-mixe-zoque.
  • proto-plateau penutian, the canonical name for the code nai-plp-pro, is wrong; it should be ős-plateau penutian.
  • proto-pomo, the canonical name for the code nai-pom-pro, is wrong; it should be ős-pomo.
  • proto-siouan-catawban, the canonical name for the code nai-sca-pro, is wrong; it should be ős-siouan-catawban.
  • proto-totozoquean, the canonical name for the code nai-tot-pro, is wrong; it should be ős-totozoquean.
  • proto-tsimshianic, the canonical name for the code nai-tsi-pro, is wrong; it should be ős-tsimshianic.
  • proto-utian, the canonical name for the code nai-utn-pro, is wrong; it should be ős-utian.
  • proto-trans-new guinea, the canonical name for the code ngf-pro, is wrong; it should be ős-trans-new guinea.
  • proto-benue-congo, the canonical name for the code nic-bco-pro, is wrong; it should be ős-benue-congo.
  • proto-bantoid, the canonical name for the code nic-bod-pro, is wrong; it should be ős-bantoid.
  • proto-eastern oti-volta, the canonical name for the code nic-eov-pro, is wrong; it should be ős-eastern oti-volta.
  • proto-gurunsi, the canonical name for the code nic-gns-pro, is wrong; it should be ős-gurunsi.
  • proto-grassfields, the canonical name for the code nic-grf-pro, is wrong; it should be ős-grassfields.
  • proto-gur, the canonical name for the code nic-gur-pro, is wrong; it should be ős-gur.
  • proto-jukunoid, the canonical name for the code nic-jkn-pro, is wrong; it should be ős-jukunoid.
  • proto-lower cross river, the canonical name for the code nic-lcr-pro, is wrong; it should be ős-lower cross river.
  • proto-ogoni, the canonical name for the code nic-ogo-pro, is wrong; it should be ős-ogoni.
  • proto-oti-volta, the canonical name for the code nic-ovo-pro, is wrong; it should be ős-oti-volta.
  • proto-plateau, the canonical name for the code nic-plt-pro, is wrong; it should be ős-plateau.
  • proto-niger-congo, the canonical name for the code nic-pro, is wrong; it should be ős-niger-congo.
  • proto-ubangian, the canonical name for the code nic-ubg-pro, is wrong; it should be ős-ubangian.
  • proto-upper cross river, the canonical name for the code nic-ucr-pro, is wrong; it should be ős-upper cross river.
  • proto-volta-congo, the canonical name for the code nic-vco-pro, is wrong; it should be ős-volta-congo.
  • proto-nubian, the canonical name for the code nub-pro, is wrong; it should be ős-nubian.
  • proto-chatino, the canonical name for the code omq-cha-pro, is wrong; it should be ős-chatino.
  • proto-mazatec, the canonical name for the code omq-maz-pro, is wrong; it should be ős-mazatec.
  • proto-mixtecan, the canonical name for the code omq-mix-pro, is wrong; it should be ős-mixtecan.
  • proto-mixtec, the canonical name for the code omq-mxt-pro, is wrong; it should be ős-mixtec.
  • proto-oto-pamean, the canonical name for the code omq-otp-pro, is wrong; it should be ős-oto-pamean.
  • proto-oto-manguean, the canonical name for the code omq-pro, is wrong; it should be ős-oto-manguean.
  • proto-trique, the canonical name for the code omq-tri-pro, is wrong; it should be ős-trique.
  • proto-zapotecan, the canonical name for the code omq-zap-pro, is wrong; it should be ős-zapotecan.
  • proto-zapotec, the canonical name for the code omq-zpc-pro, is wrong; it should be ős-zapotec.
  • proto-aroid, the canonical name for the code omv-aro-pro, is wrong; it should be ős-aroid.
  • proto-dizoid, the canonical name for the code omv-diz-pro, is wrong; it should be ős-dizoid.
  • proto-omotic, the canonical name for the code omv-pro, is wrong; it should be ős-omotic.
  • ó-keleti-szláv, the canonical name for the code orv, is wrong; it should be óorosz.
  • proto-ossetic, the canonical name for the code os-pro, is wrong; it should be ős-ossetic.
  • proto-otomi, the canonical name for the code oto-otm-pro, is wrong; it should be ős-otomi.
  • proto-otomian, the canonical name for the code oto-pro, is wrong; it should be ős-otomian.
  • pennsylvania german, the canonical name for the code pdc, is wrong; it should be pennsylvaniai német.
  • proto-kalamian, the canonical name for the code phi-kal-pro, is wrong; it should be ős-kalamian.
  • proto-philippine, the canonical name for the code phi-pro, is wrong; it should be ős-philippine.
  • piedmontese, the canonical name for the code pms, is wrong; it should be piemonti.
  • proto-bungku-tolaki, the canonical name for the code poz-btk-pro, is wrong; it should be ős-bungku-tolaki.
  • proto-central-eastern malayo-polynesian, the canonical name for the code poz-cet-pro, is wrong; it should be ős-central-eastern malayo-polynesian.
  • proto-halmahera-cenderawasih, the canonical name for the code poz-hce-pro, is wrong; it should be ős-halmahera-cenderawasih.
  • proto-lampungic, the canonical name for the code poz-lgx-pro, is wrong; it should be ős-lampungic.
  • proto-malayo-chamic, the canonical name for the code poz-mcm-pro, is wrong; it should be ős-malayo-chamic.
  • proto-malayic, the canonical name for the code poz-mly-pro, is wrong; it should be ős-malayic.
  • proto-malayo-sumbawan, the canonical name for the code poz-msa-pro, is wrong; it should be ős-malayo-sumbawan.
  • proto-oceanic, the canonical name for the code poz-oce-pro, is wrong; it should be ős-oceanic.
  • proto-eastern polynesian, the canonical name for the code poz-pep-pro, is wrong; it should be ős-eastern polynesian.
  • proto-nuclear polynesian, the canonical name for the code poz-pnp-pro, is wrong; it should be ős-nuclear polynesian.
  • proto-polynesian, the canonical name for the code poz-pol-pro, is wrong; it should be ős-polynesian.
  • proto-malayo-polynesian, the canonical name for the code poz-pro, is wrong; it should be ős-malayo-polynesian.
  • proto-south sulawesi, the canonical name for the code poz-ssw-pro, is wrong; it should be ős-south sulawesi.
  • proto-sunda-sulawesi, the canonical name for the code poz-sus-pro, is wrong; it should be ős-sunda-sulawesi.
  • proto-north sarawak, the canonical name for the code poz-swa-pro, is wrong; it should be ős-north sarawak.
  • proto-eastern malayo-polynesian, the canonical name for the code pqe-pro, is wrong; it should be ős-eastern malayo-polynesian.
  • proto-great andamanese, the canonical name for the code qfa-adm-pro, is wrong; it should be ős-great andamanese.
  • proto-chukotko-kamchatkan, the canonical name for the code qfa-cka-pro, is wrong; it should be ős-chukotko-kamchatkan.
  • proto-hurro-urartian, the canonical name for the code qfa-hur-pro, is wrong; it should be ős-hurro-urartian.
  • proto-kadu, the canonical name for the code qfa-kad-pro, is wrong; it should be ős-kadu.
  • proto-kam-sui, the canonical name for the code qfa-kms-pro, is wrong; it should be ős-kam-sui.
  • proto-korean, the canonical name for the code qfa-kor-pro, is wrong; it should be ős-korean.
  • proto-kra, the canonical name for the code qfa-kra-pro, is wrong; it should be ős-kra.
  • proto-hlai, the canonical name for the code qfa-lic-pro, is wrong; it should be ős-hlai.
  • proto-ong-be, the canonical name for the code qfa-onb-pro, is wrong; it should be ős-ong-be.
  • proto-ongan, the canonical name for the code qfa-ong-pro, is wrong; it should be ős-ongan.
  • proto-kra-dai, the canonical name for the code qfa-tak-pro, is wrong; it should be ős-kra-dai.
  • proto-yeniseian, the canonical name for the code qfa-yen-pro, is wrong; it should be ős-yeniseian.
  • proto-yukaghir, the canonical name for the code qfa-yuk-pro, is wrong; it should be ős-yukaghir.
  • proto-jê, the canonical name for the code sai-jee-pro, is wrong; it should be ős-jê.
  • proto-salish, the canonical name for the code sal-pro, is wrong; it should be ős-salish.
  • proto-daju, the canonical name for the code sdv-daj-pro, is wrong; it should be ős-daju.
  • proto-eastern jebel, the canonical name for the code sdv-eje-pro, is wrong; it should be ős-eastern jebel.
  • proto-nilotic, the canonical name for the code sdv-nil-pro, is wrong; it should be ős-nilotic.
  • proto-nyima, the canonical name for the code sdv-nyi-pro, is wrong; it should be ős-nyima.
  • proto-taman, the canonical name for the code sdv-tmn-pro, is wrong; it should be ős-taman.
  • proto-semitic, the canonical name for the code sem-pro, is wrong; it should be ős-semitic.
  • proto-siouan, the canonical name for the code sio-pro, is wrong; it should be ős-siouan.
  • proto-hrusish, the canonical name for the code sit-hrs-pro, is wrong; it should be ős-hrusish.
  • proto-kham, the canonical name for the code sit-kha-pro, is wrong; it should be ős-kham.
  • proto-luish, the canonical name for the code sit-luu-pro, is wrong; it should be ős-luish.
  • proto-sino-tibetan, the canonical name for the code sit-pro, is wrong; it should be ős-sino-tibetan.
  • proto-tani, the canonical name for the code sit-tan-pro, is wrong; it should be ős-tani.
  • proto-slavic, the canonical name for the code sla-pro, is wrong; it should be ősszláv.
  • proto-samic, the canonical name for the code smi-pro, is wrong; it should be ős-samic.
  • proto-songhay, the canonical name for the code son-pro, is wrong; it should be ős-songhay.
  • proto-albanian, the canonical name for the code sqj-pro, is wrong; it should be ős-albanian.
  • proto-kuliak, the canonical name for the code ssa-klk-pro, is wrong; it should be ős-kuliak.
  • proto-koman, the canonical name for the code ssa-kom-pro, is wrong; it should be ős-koman.
  • proto-nilo-saharan, the canonical name for the code ssa-pro, is wrong; it should be ős-nilo-saharan.
  • proto-samoyedic, the canonical name for the code syd-pro, is wrong; it should be ős-samoyedic.
  • proto-tai, the canonical name for the code tai-pro, is wrong; it should be ős-tai.
  • proto-southwestern tai, the canonical name for the code tai-swe-pro, is wrong; it should be ős-southwestern tai.
  • proto-bodo-garo, the canonical name for the code tbq-bdg-pro, is wrong; it should be ős-bodo-garo.
  • proto-kuki-chin, the canonical name for the code tbq-kuk-pro, is wrong; it should be ős-kuki-chin.
  • proto-lalo, the canonical name for the code tbq-lal-pro, is wrong; it should be ős-lalo.
  • proto-lolo-burmese, the canonical name for the code tbq-lob-pro, is wrong; it should be ős-lolo-burmese.
  • proto-loloish, the canonical name for the code tbq-lol-pro, is wrong; it should be ős-loloish.
  • The code tok (toki pona) is missing.
  • proto-turkic, the canonical name for the code trk-pro, is wrong; it should be ős-turkic.
  • proto-tupi-guarani, the canonical name for the code tup-gua-pro, is wrong; it should be ős-tupi-guarani.
  • proto-tupian, the canonical name for the code tup-pro, is wrong; it should be ős-tupian.
  • proto-tungusic, the canonical name for the code tuw-pro, is wrong; it should be ős-tungusic.
  • proto-mordvinic, the canonical name for the code urj-mdv-pro, is wrong; it should be ős-mordvinic.
  • proto-permic, the canonical name for the code urj-prm-pro, is wrong; it should be ős-permic.
  • proto-uralic, the canonical name for the code urj-pro, is wrong; it should be ős-uralic.
  • proto-ugric, the canonical name for the code urj-ugr-pro, is wrong; it should be ős-ugric.
  • proto-mongolic, the canonical name for the code xgn-pro, is wrong; it should be ős-mongolic.
  • proto-tatic, the canonical name for the code xme-ttc-pro, is wrong; it should be ős-tatic.
  • proto-na-dene, the canonical name for the code xnd-pro, is wrong; it should be ős-na-dene.
  • proto-scythian, the canonical name for the code xsc-pro, is wrong; it should be ős-scythian.
  • proto-saka, the canonical name for the code xsc-sak-pro, is wrong; it should be ős-saka.
  • proto-saka-wakhi, the canonical name for the code xsc-skw-pro, is wrong; it should be ős-saka-wakhi.
  • proto-yupik, the canonical name for the code ypk-pro, is wrong; it should be ős-yupik.
  • proto-min, the canonical name for the code zhx-min-pro, is wrong; it should be ős-min.
  • occidental, the canonical name for ie, is repeated in the table of aliases.
  • kiribati, the canonical name for gil, is repeated in the table of aliases.
  • orkhon, the canonical name for otk, is repeated in the table of otherNames.
  • toki pona language (art-top) has a canonical name that is not unique; it is also used by the code tok.
  • bhaiksuki (Bhks) is missing
  • zhuyin (Bopo) is missing
  • brahmi (Brah) is missing
  • braille (Brai) is missing
  • buginese (Bugi) is missing
  • buhid (Buhd) is missing
  • chakma (Cakm) is missing
  • carian (Cari) is missing
  • cham (Cham) is missing
  • cherokee (Cher) is missing
  • chorasmian (Chrs) is missing
  • dogra (Dogr) is missing
  • deseret (Dsrt) is missing
  • duployan (Dupl) is missing
  • elbasan (Elba) is missing
  • khutsuri (Geok) is missing
  • gunjala gondi (Gong) is missing
  • masaram gondi (Gonm) is missing
  • gothic (Goth) is missing
  • grantha (Gran) is missing
  • gurmukhi (Guru) is missing
  • hangul (Hang) is missing
  • kínai (Hani) is missing
  • hanunoo (Hano) is missing
  • egyszerűsített kínai (Hans) is missing
  • hagyományos kínai (Hant) is missing
  • hatran (Hatr) is missing
  • iberian (Ibrn) is missing
  • image-rendered (Imag) is missing
  • indus (Inds) is missing
  • old italic (Ital) is missing
  • jurchen (Jurc) is missing
  • kayah li (Kali) is missing
  • katakana (Kana) is missing
  • kharoshthi (Khar) is missing
  • khmer (Khmr) is missing
  • khojki (Khoj) is missing
  • khitan large (Kitl) is missing
  • khitan small (Kits) is missing
  • kannada (Knda) is missing
  • kaithi (Kthi) is missing
  • tai tham (Lana) is missing
  • lao (Laoo) is missing
  • fraktur (Latf) is missing
  • leke (Leke) is missing
  • lepcha (Lepc) is missing
  • limbu (Limb) is missing
  • lisu (Lisu) is missing
  • lycian (Lyci) is missing
  • mahajani (Mahj) is missing
  • makasar (Maka) is missing
  • mandaic (Mand) is missing
  • manichaean (Mani) is missing
  • marchen (Marc) is missing
  • medefaidrin (Medf) is missing
  • mende (Mend) is missing
  • meroitic cursive (Merc) is missing
  • meroitic hieroglyphic (Mero) is missing
  • modi (Modi) is missing
  • mongolian (Mong) is missing
  • mro (Mroo) is missing
  • meitei mayek (Mtei) is missing
  • multani (Mult) is missing
  • burmai (Mymr) is missing
  • nabataean (Nbat) is missing
  • newa (Newa) is missing
  • n'Ko (Nkoo) is missing
  • unspecified (None) is missing
  • nushu (Nshu) is missing
  • ogham (Ogam) is missing
  • ol chiki (Olck) is missing
  • orkhon runes (Orkh) is missing
  • oriya (Orya) is missing
  • osage (Osge) is missing
  • osmanya (Osma) is missing
  • palmyrene (Palm) is missing
  • pau cin hau (Pauc) is missing
  • phags-pa (Phag) is missing
  • inscriptional pahlavi (Phli) is missing
  • psalter pahlavi (Phlp) is missing
  • book pahlavi (Phlv) is missing
  • pollard (Plrd) is missing
  • inscriptional parthian (Prti) is missing
  • rejang (Rjng) is missing
  • hanifi rohingya (Rohg) is missing
  • rúna (Runr) is missing
  • samaritan (Samr) is missing
  • saurashtra (Saur) is missing
  • signWriting (Sgnw) is missing
  • shavian (Shaw) is missing
  • sharada (Shrd) is missing
  • siddham (Sidd) is missing
  • khudawadi (Sind) is missing
  • sogdian (Sogd) is missing
  • old sogdian (Sogo) is missing
  • sorang sompeng (Sora) is missing
  • soyombo (Soyo) is missing
  • syloti nagri (Sylo) is missing
  • tagbanwa (Tagb) is missing
  • takri (Takr) is missing
  • tai nüa (Tale) is missing
  • new tai lue (Talu) is missing
  • tangut (Tang) is missing
  • tai viet (Tavt) is missing
  • tengwar (Teng) is missing
  • tifinagh (Tfng) is missing
  • baybayin (Tglg) is missing
  • thaana (Thaa) is missing
  • tibetan (Tibt) is missing
  • tirhuta (Tirh) is missing
  • ugaritic (Ugar) is missing
  • vai (Vaii) is missing
  • varang kshiti (Wara) is missing
  • yi (Yiii) is missing
  • zanabazar square (Zanb) is missing
  • matematikai jelölés (Zmth) is missing
  • meghatározatlan (Zyyy) is missing
  • hiragana script (Hira) is not used by any language.
  • image-rendered script (Imag) is not used by any language and has no characters listed for auto-detection.
  • jurchen script (Jurc) is not used by any language and has no characters listed for auto-detection.
  • medefaidrin script (Medf) is not used by any language.
  • morse code (Morse) is not used by any language and has no characters listed for auto-detection.
  • flag semaphore (Semap) is not used by any language and has no characters listed for auto-detection.
  • uncoded script (Zzzz) is not used by any language and has no characters listed for auto-detection.

Checks performed

For multiple data modules:

  • Codes for languages, families and etymology-only languages must be unique and cannot clash with one another.
  • Canonical names for languages, families, and etymology-only languages must not be found in the list of other names.
  • Each name in the list of other names must appear only once.
  • otherNames, if present, must be an array.

The following must be true of the data used by Module:languages:

  • Each code must be defined in the correct submodule according to whether it is two-letter, three-letter or exceptional.
  • The canonical name (field 1) must be present and must not be the same as the canonical name of another language.
  • If scripts is given, it must be an array, and each string in the array must be a valid script code.
  • If ancestors is given, it must be an array, and each string in the array must be a valid language or etymology language code.
  • If family is given, it must be a valid family code.
  • If type is given, it must be one of the recognised values (regular, reconstructed, appendix-constructed).
  • If entry_name is given, it must be a table that contains either two arrays (from and to) or a string (remove_diacritics) or both.
  • If sort_key is given, it may either be a string, or at table that in turn contains either two arrays (from and to) or a string (remove_diacritics).
  • If entry_name or sort_key is given, the from array must be longer or equal in length to the to array.
  • If standardChars is given, it must form a valid Lua string pattern when placed between square brackets with ^ before it ("). (It should match all characters regularly used in the language, but that cannot be tested.)
  • Have no data keys besides these: "canonicalName", "entry_name", "sort_key", "otherNames", "type", "scripts", "family", "ancestors", "wikimedia_codes", "wikipedia_article", "standardChars", "translit_module", "override_translit", "link_tr", "wikidata_item".

Checks not performed:

  • If translit_module is present, it should be the name of a module, and this module should contain a tr function that takes a pagename (and optionally a language code and script code) as arguments.
  • If sort_key is a string, it should be the name of a module, and this module should contain a makeSortKey function that takes a pagename (and optionally a language code and script code) as arguments.
  • If entry_name or sort_key is a table and contains a field remove_diacritics, the value of the field should be a string that forms a valid Lua pattern when it is placed inside negated set notation ().

These are not checked here, because module errors will quickly crop up in entries if these conditions are not met, assuming that Module:utilities attempts to generate a sortkey for a category pertaining to the language in question, or full_link attempts to use the transliteration module.

Module:languages/code to canonical name and Module:languages/canonical names must contain all the codes and canonical names found in the data submodules of Module:languages, and no more.

The following must be true of the data used by Module:etymology languages:

  • canonicalName must be given.
  • parent must be given must be a valid language, family or etymology-only language code.
  • If ancestors is given, it must be an array, and each string in the array must be a valid language or etymology language code. The etymology language should also be listed as the ancestor of a regular language.
  • Have no data keys besides these: "canonicalName", "otherNames", "parent", "ancestors", "wikipedia_article", "wikidata_item".

Codes in Module:families data must:

  • Have canonicalName, which must not be the same as the canonical name of another family.
  • If family is given, it must be a valid family code.
  • Have at least one language or subfamily belonging to it.
  • Have no data keys besides these: "canonicalName", "otherNames", "family", "protoLanguage", "wikidata_item".

Codes in Module:scripts data must:

  • Have canonicalName.
  • Have at least one language that lists it as one of its scripts.
  • Have a characters pattern for script autodetection, and this must form a valid Lua string pattern when placed between square brackets (""). (It should match all characters in the script, but that cannot be tested.)
  • Have no data keys besides these: "canonicalName", "otherNames", "parent", "systems", "wikipedia_article", "characters", "direction".

local export = {}

local m_language_data = require("Module:languages/alldata")
local m_language_codes = require('Module:languages/code to canonical name')
local m_language_canonical_names = require('Module:languages/canonical names')
local m_etym_language_data = require("Module:etymology languages/data")
local m_family_data = require('Module:families/data')
local m_script_data = require('Module:scripts/data')

local m_table = require("Module:table")
local Array = require("Module:array")

local messages

local function discrepancy(modname, ...)
	messages:insert(string.format(...))
end

local all_codes = {}

local language_names = {}
local family_names = {}
local script_names = {}

local nonempty_families = {}
local allowed_empty_families = {tbq = true}
local nonempty_scripts = {}
	
local function link(name)
	if not name then
		return "???"
	elseif name:find("anguage$") then
		return "]"
	else
		return "]"
	end
end
	
local function link_script(name)
	if not name then
		return "???"
	elseif name:find("ode$") or name:find("emaphore$") then
		return "]"
	else
		return "]"
	end
end

local function invalid_keys_message(modname, code, data, invalid_keys, is_script)
	local plural = #invalid_keys ~= 1
	discrepancy(modname, "The data key%s %s for %s (<code>%s</code>) %s invalid.",
		plural and "s" or "",
		invalid_keys
			:map(
				function(key)
					return '<code>' .. key .. '</code>'
				end)
			:concat(", "),
		(is_script and link_script or link)(data.canonicalName or data),
		code,
		plural and "are" or "is")
end

local function check_data_keys(valid_keys, is_script)
	valid_keys = Array(valid_keys):to_set()
	
	return function (modname, code, data)
		local invalid_keys
		for k in pairs(data) do
			if not valid_keys then
				invalid_keys = invalid_keys or Array()
				invalid_keys:insert(k)
			end
		end
		if invalid_keys then
			invalid_keys_message(modname, code, data, invalid_keys, is_script)
		end
	end
end

-- Modification of isArray in ].
local function find_gap(t)
	local i = 0
	for _ in pairs(t) do
		i = i + 1
		if t == nil then
			return i
		end
	end
end

local function check_array(modname, code, data, array_name)
	local gap = find_gap(data)
	if gap then
		discrepancy(modname, "The %s array in the data table for %s (<code>%s</code>) has a gap at index %d.",
			array_name, data.canonicalName or data, code, gap)
	end
end

local function check_other_names_or_aliases(modname, code, canonical_name, data, data_key, allow_nested)
	local array = data
	if not array then
		return
	end
	check_array(modname, code, data, data_key)

	local names = {}
	local function check_other_name(other_name)
		if other_name == canonical_name then
			discrepancy(modname,
				"%s, the canonical name for <code>%s</code>, is repeated in the table of <code>%s</code>.",
				canonical_name, code, data_key)
		end
		if names then
			discrepancy(modname,
				"The name %s is found twice or more in the list of <code>%s</code> for %s (<code>%s</code>).",
				other_name, data_key, canonical_name, code)
		end
		names = true
	end

	for _, other_name in ipairs(array) do
		if type(other_name) == "table" then
			if not allow_nested then
				discrepancy(modname,
					"A nested table is found in the list of <code>%s</code> for %s (<code>%s</code>), but isn't allowed.",
					data_key, canonical_name, code)
			else
				for _, on in ipairs(other_name) do
					check_other_name(on)
				end
			end
		else
			check_other_name(other_name)
		end
	end
end

local function check_other_names_aliases_varieties(modname, code, canonical_name, data)
	if data.otherNames then
		check_other_names_or_aliases(modname, code, canonical_name, data, "otherNames")
	end
	if data.aliases then
		check_other_names_or_aliases(modname, code, canonical_name, data, "aliases")
	end
	if data.varieties then
		check_other_names_or_aliases(modname, code, canonical_name, data, "varieties", true)
	end
end

local get_codepoint = mw.ustring.codepoint
local function validate_pattern(pattern, modname, code, data, standardChars)
	if type(pattern) ~= "string" then
		discrepancy(modname, '"%s", the %spattern for %s (<code>%s</code>), is not a string.',
			pattern, standardChars and 'standard character ' or '', code, data.canonicalName)
	end
	local ranges
	for lower, higher in mw.ustring.gmatch(pattern, "(.)%-(.)") do
		if get_codepoint(lower) >= get_codepoint(higher) then
			ranges = ranges or Array()
			table.insert(ranges, { lower, higher })
		end
	end
	if ranges and ranges then
		local plural = #ranges ~= 1 and "s" or ""
		discrepancy(modname, '%s (<code>%s</code>) specifies an invalid pattern ' ..
			'for %scharacter detection: <code>"%s"</code>. The first codepoint%s ' ..
			'in the range%s %s %s must be less than the second.',
			link(data.canonicalName), code, standardChars and 'standard ' or '', pattern, plural, plural,
			ranges
				:map(
					function(range)
						return range .. "-" .. range .. (" (U+%X, U+%X)")
							:format(get_codepoint(range), get_codepoint(range))
					end)
				:concat(", "),
			#ranges ~= 1 and "are" or "is")
	end
	if not pcall(mw.ustring.find, "", "") then
		discrepancy(modname, '%s (<code>%s</code>) specifies an invalid pattern for ' ..
			(standardChars and 'standard' or '') .. ' character detection: <code>"%s"</code>',
			link(data.canonical_name), code, pattern)
	end
end

local function check_entry_name_or_sortkey(modname, code, data, replacements_name)
	local replacements = data
	if type(replacements) == "string" then
		if replacements_name ~= "sort_key" then
			discrepancy(modname, "The %s field in the data table for %s (<code>%s</code>) must be a table.",
				replacements_name, data.canonicalName, code)
		end
		return
	end
	
	if (replacements.from ~= nil) ~= (replacements.to ~= nil) then
		discrepancy(modname,
			"The <code>from</code> and <code>to</code> arrays in the <code>%s</code> table for %s (<code>%s</code>) are not both defined or both undefined.",
			replacements_name, data.canonicalName, code)
	elseif replacements.from then
		for _, key in ipairs { "from", "to" } do
			local gap = find_gap(replacements)
			if gap then
				discrepancy(modname,
					"The %s array in the %s table for %s (<code>%s</code>) has a gap at index %d.",
					key, replacements_name, data.canonicalName, code, gap)
			end
		end
	end
	
	if replacements.remove_diacritics and type(replacements.remove_diacritics) ~= "string" then
		discrepancy(modname,
			"The <code>remove_diacritics</code> field in the <code>%s</code> table for %s (<code>%s</code>) table must be a string.",
			replacements_name, data.canonicalName, code)
	end
	
	if replacements.from and replacements.to
			and m_table.length(replacements.to) > m_table.length(replacements.from) then
		discrepancy(modname,
			"The <code>from</code> array in the <code>%s</code> table for %s (<code>%s</code>) must be shorter or the same length as the <code>to</code> array.",
			replacements_name, data.canonicalName, code)
	end
end

local function has_regular_language_child(parent_code)
	for code, data in pairs(m_language_data) do
		local ancestors = data.ancestors
		if ancestors then
			for _, ancestor in pairs(ancestors) do
				if ancestor == parent_code then
					return true
				end
			end
		end
	end
	return false
end

local function check_ancestors(modname, code, data, ancestors, is_etymology_language)
	check_array(modname, code, data, "ancestors")
	
	local canonical_name = data or data.canonicalName
	if is_etymology_language then
		if not has_regular_language_child(code) then
			discrepancy(modname,
				"The etymology language %s (<code>%s</code>) has an <code>ancestors</code> field, "
				.. "but no regular languages list it as an ancestor.",
				link(canonical_name), code)
		end
	end
	
	for _, ancestor_code in ipairs(ancestors) do
		if not (m_language_data or m_etym_language_data) then
			discrepancy(modname,
				"%s (<code>%s</code>) lists an invalid language code <code>%s</code> as ancestor.",
				link(canonical_name), code, ancestor_code)
		end
	end
end

local function check_languages()
	local check_language_data_keys = check_data_keys{
		1, 2, 3, -- canonical name, wikidata item, family
		"entry_name", "sort_key", "otherNames", "aliases", "varieties",
		"type", "scripts", "ancestors",
		"wikimedia_codes", "wikipedia_article", "standardChars",
		"translit_module", "override_translit", "link_tr",
	}
	
	local function check_language(modname, code, data)
		local canonical_name, wikidata_item, lang_type = data, data, data.type
		
		check_language_data_keys(modname, code, data)
		
		if all_codes then
			discrepancy(modname, "Code <code>%s</code> is not unique; it is also defined in ].", code, all_codes)
		else
			if not m_language_codes then
				discrepancy("languages/code to canonical name", "The code <code>%s</code> (%s) is missing.", code, canonical_name)
			end
			all_codes = modname
		end
		
		if not canonical_name then
			discrepancy(modname, "Code <code>%s</code> has no canonical name specified.", code)
		elseif language_names then
			discrepancy(modname,
				"%s (<code>%s</code>) has a canonical name that is not unique; it is also used by the code <code>%s</code>.",
				link(canonical_name), code, language_names)
		else
			if not m_language_canonical_names then
				discrepancy("languages/canonical names", "The canonical name %s (<code>%s</code>) is missing.", canonical_name, code)
			end
			language_names = code
		end
		
		if wikidata_item then
			if not wikidata_item:match '^Q%d+$' then
				discrepancy(modname,
					"%s (<code>%s</code>) has a Wikidata item with an invalid form: <code>%s</code>.",
					canonical_name, code, wikidata_item)
			end
		end

		check_other_names_aliases_varieties(modname, code, canonical_name, data)
		
		if lang_type and not (lang_type == "regular" or lang_type == "reconstructed" or lang_type == "appendix-constructed") then
			discrepancy(modname, "%s (<code>%s</code>) is of an invalid type <code>%s</code>.", link(canonical_name), code, data.type)
		end
		
		if data.scripts then
			check_array(modname, code, data, "scripts")
			if not data.scripts then
				discrepancy(modname, "%s (<code>%s</code>) has no scripts listed.", link(canonical_name), code)
			else
				for _, sccode in ipairs(data.scripts) do
					if not m_script_data then
						discrepancy(modname,
							"%s (<code>%s</code>) lists an invalid script code <code>%s</code>.",
							link(canonical_name), code, sccode)
					end
		
					nonempty_scripts = true
				end
			end
		end
		
		if data.ancestors then
			check_ancestors(modname, code, data, data.ancestors, false)
		end
		
		if data then
			local family = data
			if not m_family_data then
				discrepancy(modname,
					"%s (<code>%s</code>) has an invalid family code <code>%s</code>.",
					link(canonical_name), code, family)
			end
			
			nonempty_families = true
		end
		
		if data.sort_key then
			check_entry_name_or_sortkey(modname, code, data, "sort_key")
		end
		
		if data.entry_name then
			check_entry_name_or_sortkey(modname, code, data, "entry_name")
		end

		if data.standardChars then
			validate_pattern(data.standardChars, modname, code, data, true)
		end
	end
	
	-- Check two-letter codes
	local modname = "languages/data2"
	local data2 = require("Module:" .. modname)
	
	for code, data in pairs(data2) do
		if not code:find("^$") then
			discrepancy(modname, '%s (<code>%s</code>) does not have a two-letter code.', link(data.canonicalName), code)
		end
		
		check_language(modname, code, data)
	end
	
	-- Check three-letter codes
	for i = string.byte('a'), string.byte('z') do
		local letter = string.char(i)
		local modname = "languages/data3/" .. letter
		local data3 = require("Module:" .. modname)
		local code_pattern = "^" .. letter .. "$"
		
		for code, data in pairs(data3) do
			if not code:find(code_pattern) then
				discrepancy(modname,
					'%s (<code>%s</code>) does not have a three-letter code starting with "<code>%s</code>".',
					link(data.canonicalName), code, letter)
			end
			
			check_language(modname, code, data)
		end
	end
	
	-- Check exceptional codes
	modname = "languages/datax"
	local datax = require("Module:" .. modname)
	
	for code, data in pairs(datax) do
		if code:find("^?$") then
			discrepancy(modname, '%s (<code>%s</code>) has a two- or three-letter code.', link(data.canonicalName), code)
		end
		
		check_language(modname, code, data)
	end
	
	-- These checks must be done while all_codes only contains language codes:
	-- that is, after language data modules have been processed, but before
	-- etymology languages, families, and scripts have.
	local function check_code_and_name(modname, code, canonical_name)
		if not all_codes then
			if not language_names then
				discrepancy(modname,
					"The code <code>%s</code> and the canonical name %s should be removed; they are not found in a submodule of ].",
					code, canonical_name)
			else
				discrepancy(modname,
					"<code>%s</code>, the code for the canonical name %s, is wrong; it should be <code>%s</code>.",
					code, canonical_name, language_names)
			end
		elseif not language_names then
			local data_table = require("Module:" .. all_codes)
			discrepancy(modname,
				"%s, the canonical name for the code <code>%s</code>, is wrong; it should be %s.",
				canonical_name, code, data_table or data_table.canonicalName)
		end
	end
	
	for code, canonical_name in pairs(m_language_codes) do
		check_code_and_name("languages/code to canonical name", code, canonical_name)
	end
	
	for canonical_name, code in pairs(m_language_canonical_names) do
		check_code_and_name("languages/canonical names", code, canonical_name)
	end		
end

local function check_etym_languages()
	local modname = "etymology languages/data"
	
	local check_etymology_language_data_keys = check_data_keys{
		"canonicalName", "otherNames", "aliases", "varieties", "parent",
		"wikipedia_article", "wikidata_item", "ancestors"
	}
	
	local function link(name)
		if not name then
			return "???"
		elseif name:find("anguage$") then
			return name
		else
			return name .. " language"
		end
	end
	
	for code, data in pairs(m_etym_language_data) do
		local canonical_name, parent, ancestors =
			data.canonicalName, data.parent, data.ancestors
		check_etymology_language_data_keys(modname, code, data)
		
		if all_codes then
			discrepancy(modname, "Code <code>%s</code> is not unique; it is also defined in ].", code, all_codes)
		else
			all_codes = modname
		end
		
		if not canonical_name then
			discrepancy(modname, "Code <code>%s</code> has no canonical name specified.", code)
		elseif language_names then
			--[=[
			discrepancy(modname,
				"%s (<code>%s</code>) has a canonical name that is not unique; it is also used by the code <code>%s</code>.",
				link(data.names), code, language_names])
			--]=]
		else
			language_names = code
		end
		
		check_other_names_aliases_varieties(modname, code, canonical_name, data)
		
		if parent then
			if type(parent) ~= "string" then
				discrepancy(modname,
					"Etymology-only %s (<code>%s</code>) has a parent language or family code that is %s rather than a string.",
					link(canonical_name), code, parent == nil and "nil" or "a " .. type(parent))
			elseif not (m_language_data or m_family_data or m_etym_language_data) then
				discrepancy(modname,
					"Etymology-only %s (<code>%s</code>) has invalid parent language or family code <code>%s</code>.",
					link(canonical_name), code, parent)
			end
			
			nonempty_families = true
		else
			discrepancy(modname,
				"Etymology-only %s (<code>%s</code>) has no parent language or family code.",
				link(canonical_name), code)
		end
		
		if ancestors then
			check_ancestors(modname, code, data, ancestors, true)
		end
	end

	local checked = {}
	for code, data in pairs(m_etym_language_data) do
		local stack = {}

		while data do
			if checked then
				break	
			end
			if stack then
				discrepancy(modname, "%s (<code>%s</code>) has a cyclic parental relationship to %s (<code>%s</code>)",
					link(data or data.canonicalName), code,
					link(m_etym_language_data.canonicalName), data.parent
				)
				break
			end
			stack = true
			code, data = data.parent, data.parent and m_etym_language_data
		end
		
		for data in pairs(stack) do
			checked = true	
		end
	end
end

local function check_families()
	local modname = "families/data"
	
	local check_family_data_keys = check_data_keys{
		"canonicalName", "otherNames", "aliases", "varieties", "family",
		"protoLanguage", "wikidata_item"
	}

	local function link(name)
		if not name then
			return "???"
		elseif name:find("anguages$") then
			return "]"
		else
			return "]"
		end
	end
	
	for code, data in pairs(m_family_data) do
		check_family_data_keys(modname, code, data)
		
		if all_codes then
			discrepancy(modname, "Code <code>%s</code> is not unique; it is also defined in ].", code, all_codes)
		else
			all_codes = modname
		end
		
		if not data.canonicalName then
			discrepancy(modname, "<code>%s</code> has no canonical name specified.", code)
		elseif family_names then
			discrepancy(modname,
				"%s (<code>%s</code>) has a canonical name that is not unique; it is also used by the code <code>%s</code>.",
				link(data.canonicalName), code, family_names)
		else
			family_names = code
		end
		
		check_other_names_aliases_varieties(modname, code, data.canonicalName, data)
		
		if data.family then
			if data.family == code and code ~= "qfa-not" then
				discrepancy(modname,
					"%s (<code>%s</code>) has itself as its family.",
					link(data.canonicalName), code)
			elseif not m_family_data then
				discrepancy(modname,
					"%s (<code>%s</code>) has an invalid parent family code <code>%s</code>.",
					link(data.canonicalName), code, data.family)
			end
			
			nonempty_families = true
		end
	end
	
	for code, data in pairs(m_family_data) do
		if not (nonempty_families or allowed_empty_families) then
			discrepancy(modname, "%s (<code>%s</code>) has no child families or languages.", link(data.canonicalName), code)
		end
	end

	local checked = {  = true }
	for code, data in pairs(m_family_data) do
		local stack = {}

		while data do
			if checked then
				break	
			end
			if stack then
				discrepancy(modname, "%s (<code>%s</code>) has a cyclic parental relationship to %s (<code>%s</code>)",
					link(data or data.canonicalName), code,
					link(m_family_data].canonicalName), data
				)
				break
			end
			stack = true
			code, data = data.family, m_family_data]
		end
		
		for code in pairs(stack) do
			checked = true	
		end
	end
end

local function check_scripts()
	local modname = "scripts/data"
	
	local check_script_data_keys = check_data_keys({
		"canonicalName", "otherNames", "aliases", "varieties", "parent",
		"systems", "wikipedia_article", "characters", "direction",
		"character_category",
	}, true)
	
	local m_script_codes = require('Module:scripts/code to canonical name')
	local m_script_canonical_names = require('Module:scripts/by name')
	
	for code, data in pairs(m_script_data) do
		local canonical_name = data.canonicalName
		if not m_script_codes and #code == 4 then
			discrepancy('scripts/code to canonical name', '<code>%s</code> (%s) is missing', code, canonical_name)
		end
		
		check_script_data_keys(modname, code, data)
		
		if not canonical_name then
			discrepancy(modname, "Code <code>%s</code> has no canonical name specified.", code)
		elseif script_names then
			--[=[
			discrepancy(modname,
				"%s (<code>%s</code>) has a canonical name that is not unique; it is also used by the code <code>%s</code>.",
				link_script(data.names), code, script_names])
			--]=]
		else
			if not m_script_canonical_names and #code == 4 then
				discrepancy('scripts/by name', '%s (<code>%s</code>) is missing', canonical_name, code)
			end
			script_names = code
		end
		
		check_other_names_aliases_varieties(modname, code, canonical_name, data)
		
		if not nonempty_scripts then
			discrepancy(modname,
				"%s (<code>%s</code>) is not used by any language%s.",
				link_script(canonical_name), code, data.characters and ""
					or " and has no characters listed for auto-detection")
		--[[
		elseif not data.characters then
			discrepancy(modname, "%s (<code>%s</code>) has no characters listed for auto-detection.", link_script(canonical_name), code)
		--]]
		end

		if data.characters then
			validate_pattern(data.characters, modname, code, data, false)
		end
	end
end

-- Warning: cannot be called twice in the same module invocation because
-- some module-global variables are not reset between calls.
function export.do_checks()
	messages = setmetatable({}, {
		__index = function (self, k)
			local val = Array()
			self = val
			return val
		end
	})
	
	check_languages()
	check_etym_languages()

	-- families and scripts must be checked AFTER languages; languages checks fill out
	-- the nonempty_families and nonempty_scripts tables, used for testing if a family/script
	-- is ever used in the data
	check_families()
	check_scripts()
	
	setmetatable(messages, nil)
	
	local function find_code(message)
		return string.match(message, "<code>(+)</code>")
	end
	
	find_code = require("Module:fun").memoize(find_code)
	
	local function comp(message1, message2)
		local code1, code2 = find_code(message1), find_code(message2)
		if code1 and code2 then
			return code1 < code2
		else
			return message1 < message2
		end
	end
	
	for modname, msglist in pairs(messages) do
		msglist:sort(comp)
	end
	
	local ret = messages
	messages = nil
	return ret
end

function export.format_message(modname, msglist)
	return '===]==='
		.. msglist
			:map(
				function(msg)
					return "\n* " .. msg
				end)
			:concat()
end

function export.check_modules(...)
	local ret = Array()
	local messages = export.do_checks()
	for _, module in ipairs {...} do
		local msglist = messages
		if msglist then
			ret:insert(export.format_message(module, msglist))
		end
	end
	return ret:concat("\n")
end

function export.check_modules_t(frame)
	local args = m_table.shallowcopy(frame.args)
	return export.check_modules(unpack(args))
end

function export.perform(frame)
	local messages = export.do_checks()
	
	-- Format the messages
	local ret = Array()
	for modname, msglist in m_table.sortedPairs(messages) do
		ret:insert(export.format_message(modname, msglist))
	end
	
	-- Are there any messages?
	if i == 1 then
		return '<b class="success">Glory to Arstotzka.</b>'
	else
		ret:insert(1, '<b class="warning">Discrepancies detected:</b>')
		
		return ret:concat('\n')
	end
end

return export