summary refs log tree commit diff stats
path: root/build/share/xml/iso-codes
diff options
context:
space:
mode:
authorberkeviktor@aol.com <berkeviktor@aol.com>2011-08-07 13:41:43 +0200
committerberkeviktor@aol.com <berkeviktor@aol.com>2011-08-07 13:41:43 +0200
commit08e5778b19abcde484056e0cac76c237c2180142 (patch)
treef1fb1cfccf79d5228374b484367bfbe61b47614f /build/share/xml/iso-codes
parent19b7e2f062f6224be07beb7be964343e200ceb4e (diff)
spell checker support for multiple languages
Diffstat (limited to 'build/share/xml/iso-codes')
-rw-r--r--build/share/xml/iso-codes/iso_3166.xml1703
-rw-r--r--build/share/xml/iso-codes/iso_639.xml2169
2 files changed, 3872 insertions, 0 deletions
diff --git a/build/share/xml/iso-codes/iso_3166.xml b/build/share/xml/iso-codes/iso_3166.xml
new file mode 100644
index 00000000..77c72eb2
--- /dev/null
+++ b/build/share/xml/iso-codes/iso_3166.xml
@@ -0,0 +1,1703 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+This file gives a list of all countries in the ISO 3166
+standard, and is used to provide translations via gettext
+
+Copyright (C) 2002, 2004, 2006 Alastair McKinstry <mckinstry@computer.org>
+Copyright (C) 2004 Andreas Jochens <aj@andaco.de>
+Copyright (C) 2004, 2007 Christian Perrier <bubulle@debian.org>
+Copyright (C) 2005, 2006, 2007 Tobias Quathamer <toddy@debian.org>
+
+    This file is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This file is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this file; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Source: <http://www.iso.org/iso/country_codes>
+-->
+
+<!DOCTYPE iso_3166_entries [
+	<!ELEMENT iso_3166_entries (iso_3166_entry+, iso_3166_3_entry*)>
+	<!ELEMENT iso_3166_entry EMPTY>
+	<!ATTLIST iso_3166_entry
+		alpha_2_code		CDATA	#REQUIRED
+		alpha_3_code		CDATA	#REQUIRED
+		numeric_code		CDATA	#REQUIRED
+		common_name		CDATA	#IMPLIED
+		name			CDATA	#REQUIRED
+		official_name		CDATA	#IMPLIED
+	>
+	<!ELEMENT iso_3166_3_entry EMPTY>
+	<!ATTLIST iso_3166_3_entry
+		alpha_4_code		CDATA	#REQUIRED
+		alpha_3_code		CDATA	#REQUIRED
+		numeric_code		CDATA	#IMPLIED
+		date_withdrawn		CDATA	#IMPLIED
+		names			CDATA	#REQUIRED
+		comment			CDATA	#IMPLIED
+	>
+]>
+
+<iso_3166_entries>
+	<iso_3166_entry
+		alpha_2_code="AF"
+		alpha_3_code="AFG"
+		numeric_code="004"
+		name="Afghanistan"
+		official_name="Islamic Republic of Afghanistan" />
+	<iso_3166_entry
+		alpha_2_code="AX"
+		alpha_3_code="ALA"
+		numeric_code="248"
+		name="Åland Islands" />
+	<iso_3166_entry
+		alpha_2_code="AL"
+		alpha_3_code="ALB"
+		numeric_code="008"
+		name="Albania"
+		official_name="Republic of Albania" />
+	<iso_3166_entry
+		alpha_2_code="DZ"
+		alpha_3_code="DZA"
+		numeric_code="012"
+		name="Algeria"
+		official_name="People's Democratic Republic of Algeria" />
+	<iso_3166_entry
+		alpha_2_code="AS"
+		alpha_3_code="ASM"
+		numeric_code="016"
+		name="American Samoa" />
+	<iso_3166_entry
+		alpha_2_code="AD"
+		alpha_3_code="AND"
+		numeric_code="020"
+		name="Andorra"
+		official_name="Principality of Andorra" />
+	<iso_3166_entry
+		alpha_2_code="AO"
+		alpha_3_code="AGO"
+		numeric_code="024"
+		name="Angola"
+		official_name="Republic of Angola" />
+	<iso_3166_entry
+		alpha_2_code="AI"
+		alpha_3_code="AIA"
+		numeric_code="660"
+		name="Anguilla" />
+	<iso_3166_entry
+		alpha_2_code="AQ"
+		alpha_3_code="ATA"
+		numeric_code="010"
+		name="Antarctica" />
+	<iso_3166_entry
+		alpha_2_code="AG"
+		alpha_3_code="ATG"
+		numeric_code="028"
+		name="Antigua and Barbuda" />
+	<iso_3166_entry
+		alpha_2_code="AR"
+		alpha_3_code="ARG"
+		numeric_code="032"
+		name="Argentina"
+		official_name="Argentine Republic" />
+	<iso_3166_entry
+		alpha_2_code="AM"
+		alpha_3_code="ARM"
+		numeric_code="051"
+		name="Armenia"
+		official_name="Republic of Armenia" />
+	<iso_3166_entry
+		alpha_2_code="AW"
+		alpha_3_code="ABW"
+		numeric_code="533"
+		name="Aruba" />
+	<iso_3166_entry
+		alpha_2_code="AU"
+		alpha_3_code="AUS"
+		numeric_code="036"
+		name="Australia" />
+	<iso_3166_entry
+		alpha_2_code="AT"
+		alpha_3_code="AUT"
+		numeric_code="040"
+		name="Austria"
+		official_name="Republic of Austria" />
+	<iso_3166_entry
+		alpha_2_code="AZ"
+		alpha_3_code="AZE"
+		numeric_code="031"
+		name="Azerbaijan"
+		official_name="Republic of Azerbaijan" />
+	<iso_3166_entry
+		alpha_2_code="BS"
+		alpha_3_code="BHS"
+		numeric_code="044"
+		name="Bahamas"
+		official_name="Commonwealth of the Bahamas" />
+	<iso_3166_entry
+		alpha_2_code="BH"
+		alpha_3_code="BHR"
+		numeric_code="048"
+		name="Bahrain"
+		official_name="Kingdom of Bahrain" />
+	<iso_3166_entry
+		alpha_2_code="BD"
+		alpha_3_code="BGD"
+		numeric_code="050"
+		name="Bangladesh"
+		official_name="People's Republic of Bangladesh" />
+	<iso_3166_entry
+		alpha_2_code="BB"
+		alpha_3_code="BRB"
+		numeric_code="052"
+		name="Barbados" />
+	<iso_3166_entry
+		alpha_2_code="BY"
+		alpha_3_code="BLR"
+		numeric_code="112"
+		name="Belarus"
+		official_name="Republic of Belarus" />
+	<iso_3166_entry
+		alpha_2_code="BE"
+		alpha_3_code="BEL"
+		numeric_code="056"
+		name="Belgium"
+		official_name="Kingdom of Belgium" />
+	<iso_3166_entry
+		alpha_2_code="BZ"
+		alpha_3_code="BLZ"
+		numeric_code="084"
+		name="Belize" />
+	<iso_3166_entry
+		alpha_2_code="BJ"
+		alpha_3_code="BEN"
+		numeric_code="204"
+		name="Benin"
+		official_name="Republic of Benin" />
+	<iso_3166_entry
+		alpha_2_code="BM"
+		alpha_3_code="BMU"
+		numeric_code="060"
+		name="Bermuda" />
+	<iso_3166_entry
+		alpha_2_code="BT"
+		alpha_3_code="BTN"
+		numeric_code="064"
+		name="Bhutan"
+		official_name="Kingdom of Bhutan" />
+	<iso_3166_entry
+		alpha_2_code="BO"
+		alpha_3_code="BOL"
+		numeric_code="068"
+		common_name="Bolivia"
+		name="Bolivia, Plurinational State of"
+		official_name="Plurinational State of Bolivia" />
+	<iso_3166_entry
+		alpha_2_code="BQ"
+		alpha_3_code="BES"
+		numeric_code="535"
+		name="Bonaire, Sint Eustatius and Saba"
+		official_name="Bonaire, Sint Eustatius and Saba" />
+	<iso_3166_entry
+		alpha_2_code="BA"
+		alpha_3_code="BIH"
+		numeric_code="070"
+		name="Bosnia and Herzegovina"
+		official_name="Republic of Bosnia and Herzegovina" />
+	<iso_3166_entry
+		alpha_2_code="BW"
+		alpha_3_code="BWA"
+		numeric_code="072"
+		name="Botswana"
+		official_name="Republic of Botswana" />
+	<iso_3166_entry
+		alpha_2_code="BV"
+		alpha_3_code="BVT"
+		numeric_code="074"
+		name="Bouvet Island" />
+	<iso_3166_entry
+		alpha_2_code="BR"
+		alpha_3_code="BRA"
+		numeric_code="076"
+		name="Brazil"
+		official_name="Federative Republic of Brazil" />
+	<iso_3166_entry
+		alpha_2_code="IO"
+		alpha_3_code="IOT"
+		numeric_code="086"
+		name="British Indian Ocean Territory" />
+	<iso_3166_entry
+		alpha_2_code="BN"
+		alpha_3_code="BRN"
+		numeric_code="096"
+		name="Brunei Darussalam" />
+	<iso_3166_entry
+		alpha_2_code="BG"
+		alpha_3_code="BGR"
+		numeric_code="100"
+		name="Bulgaria"
+		official_name="Republic of Bulgaria" />
+	<iso_3166_entry
+		alpha_2_code="BF"
+		alpha_3_code="BFA"
+		numeric_code="854"
+		name="Burkina Faso" />
+	<iso_3166_entry
+		alpha_2_code="BI"
+		alpha_3_code="BDI"
+		numeric_code="108"
+		name="Burundi"
+		official_name="Republic of Burundi" />
+	<iso_3166_entry
+		alpha_2_code="KH"
+		alpha_3_code="KHM"
+		numeric_code="116"
+		name="Cambodia"
+		official_name="Kingdom of Cambodia" />
+	<iso_3166_entry
+		alpha_2_code="CM"
+		alpha_3_code="CMR"
+		numeric_code="120"
+		name="Cameroon"
+		official_name="Republic of Cameroon" />
+	<iso_3166_entry
+		alpha_2_code="CA"
+		alpha_3_code="CAN"
+		numeric_code="124"
+		name="Canada" />
+	<iso_3166_entry
+		alpha_2_code="CV"
+		alpha_3_code="CPV"
+		numeric_code="132"
+		name="Cape Verde"
+		official_name="Republic of Cape Verde" />
+	<iso_3166_entry
+		alpha_2_code="KY"
+		alpha_3_code="CYM"
+		numeric_code="136"
+		name="Cayman Islands" />
+	<iso_3166_entry
+		alpha_2_code="CF"
+		alpha_3_code="CAF"
+		numeric_code="140"
+		name="Central African Republic" />
+	<iso_3166_entry
+		alpha_2_code="TD"
+		alpha_3_code="TCD"
+		numeric_code="148"
+		name="Chad"
+		official_name="Republic of Chad" />
+	<iso_3166_entry
+		alpha_2_code="CL"
+		alpha_3_code="CHL"
+		numeric_code="152"
+		name="Chile"
+		official_name="Republic of Chile" />
+	<iso_3166_entry
+		alpha_2_code="CN"
+		alpha_3_code="CHN"
+		numeric_code="156"
+		name="China"
+		official_name="People's Republic of China" />
+	<iso_3166_entry
+		alpha_2_code="CX"
+		alpha_3_code="CXR"
+		numeric_code="162"
+		name="Christmas Island" />
+	<iso_3166_entry
+		alpha_2_code="CC"
+		alpha_3_code="CCK"
+		numeric_code="166"
+		name="Cocos (Keeling) Islands" />
+	<iso_3166_entry
+		alpha_2_code="CO"
+		alpha_3_code="COL"
+		numeric_code="170"
+		name="Colombia"
+		official_name="Republic of Colombia" />
+	<iso_3166_entry
+		alpha_2_code="KM"
+		alpha_3_code="COM"
+		numeric_code="174"
+		name="Comoros"
+		official_name="Union of the Comoros" />
+	<iso_3166_entry
+		alpha_2_code="CG"
+		alpha_3_code="COG"
+		numeric_code="178"
+		name="Congo"
+		official_name="Republic of the Congo" />
+	<iso_3166_entry
+		alpha_2_code="CD"
+		alpha_3_code="COD"
+		numeric_code="180"
+		name="Congo, The Democratic Republic of the" />
+	<iso_3166_entry
+		alpha_2_code="CK"
+		alpha_3_code="COK"
+		numeric_code="184"
+		name="Cook Islands" />
+	<iso_3166_entry
+		alpha_2_code="CR"
+		alpha_3_code="CRI"
+		numeric_code="188"
+		name="Costa Rica"
+		official_name="Republic of Costa Rica" />
+	<iso_3166_entry
+		alpha_2_code="CI"
+		alpha_3_code="CIV"
+		numeric_code="384"
+		name="Côte d'Ivoire"
+		official_name="Republic of Côte d'Ivoire" />
+	<iso_3166_entry
+		alpha_2_code="HR"
+		alpha_3_code="HRV"
+		numeric_code="191"
+		name="Croatia"
+		official_name="Republic of Croatia" />
+	<iso_3166_entry
+		alpha_2_code="CU"
+		alpha_3_code="CUB"
+		numeric_code="192"
+		name="Cuba"
+		official_name="Republic of Cuba" />
+	<iso_3166_entry
+		alpha_2_code="CW"
+		alpha_3_code="CUW"
+		numeric_code="531"
+		name="Curaçao"
+		official_name="Curaçao" />
+	<iso_3166_entry
+		alpha_2_code="CY"
+		alpha_3_code="CYP"
+		numeric_code="196"
+		name="Cyprus"
+		official_name="Republic of Cyprus" />
+	<iso_3166_entry
+		alpha_2_code="CZ"
+		alpha_3_code="CZE"
+		numeric_code="203"
+		name="Czech Republic" />
+	<iso_3166_entry
+		alpha_2_code="DK"
+		alpha_3_code="DNK"
+		numeric_code="208"
+		name="Denmark"
+		official_name="Kingdom of Denmark" />
+	<iso_3166_entry
+		alpha_2_code="DJ"
+		alpha_3_code="DJI"
+		numeric_code="262"
+		name="Djibouti"
+		official_name="Republic of Djibouti" />
+	<iso_3166_entry
+		alpha_2_code="DM"
+		alpha_3_code="DMA"
+		numeric_code="212"
+		name="Dominica"
+		official_name="Commonwealth of Dominica" />
+	<iso_3166_entry
+		alpha_2_code="DO"
+		alpha_3_code="DOM"
+		numeric_code="214"
+		name="Dominican Republic" />
+	<iso_3166_entry
+		alpha_2_code="EC"
+		alpha_3_code="ECU"
+		numeric_code="218"
+		name="Ecuador"
+		official_name="Republic of Ecuador" />
+	<iso_3166_entry
+		alpha_2_code="EG"
+		alpha_3_code="EGY"
+		numeric_code="818"
+		name="Egypt"
+		official_name="Arab Republic of Egypt" />
+	<iso_3166_entry
+		alpha_2_code="SV"
+		alpha_3_code="SLV"
+		numeric_code="222"
+		name="El Salvador"
+		official_name="Republic of El Salvador" />
+	<iso_3166_entry
+		alpha_2_code="GQ"
+		alpha_3_code="GNQ"
+		numeric_code="226"
+		name="Equatorial Guinea"
+		official_name="Republic of Equatorial Guinea" />
+	<iso_3166_entry
+		alpha_2_code="ER"
+		alpha_3_code="ERI"
+		numeric_code="232"
+		name="Eritrea" />
+	<iso_3166_entry
+		alpha_2_code="EE"
+		alpha_3_code="EST"
+		numeric_code="233"
+		name="Estonia"
+		official_name="Republic of Estonia" />
+	<iso_3166_entry
+		alpha_2_code="ET"
+		alpha_3_code="ETH"
+		numeric_code="231"
+		name="Ethiopia"
+		official_name="Federal Democratic Republic of Ethiopia" />
+	<iso_3166_entry
+		alpha_2_code="FK"
+		alpha_3_code="FLK"
+		numeric_code="238"
+		name="Falkland Islands (Malvinas)" />
+	<iso_3166_entry
+		alpha_2_code="FO"
+		alpha_3_code="FRO"
+		numeric_code="234"
+		name="Faroe Islands" />
+	<iso_3166_entry
+		alpha_2_code="FJ"
+		alpha_3_code="FJI"
+		numeric_code="242"
+		name="Fiji"
+		official_name="Republic of Fiji" />
+	<iso_3166_entry
+		alpha_2_code="FI"
+		alpha_3_code="FIN"
+		numeric_code="246"
+		name="Finland"
+		official_name="Republic of Finland" />
+	<iso_3166_entry
+		alpha_2_code="FR"
+		alpha_3_code="FRA"
+		numeric_code="250"
+		name="France"
+		official_name="French Republic" />
+	<iso_3166_entry
+		alpha_2_code="GF"
+		alpha_3_code="GUF"
+		numeric_code="254"
+		name="French Guiana" />
+	<iso_3166_entry
+		alpha_2_code="PF"
+		alpha_3_code="PYF"
+		numeric_code="258"
+		name="French Polynesia" />
+	<iso_3166_entry
+		alpha_2_code="TF"
+		alpha_3_code="ATF"
+		numeric_code="260"
+		name="French Southern Territories" />
+	<iso_3166_entry
+		alpha_2_code="GA"
+		alpha_3_code="GAB"
+		numeric_code="266"
+		name="Gabon"
+		official_name="Gabonese Republic" />
+	<iso_3166_entry
+		alpha_2_code="GM"
+		alpha_3_code="GMB"
+		numeric_code="270"
+		name="Gambia"
+		official_name="Republic of the Gambia" />
+	<iso_3166_entry
+		alpha_2_code="GE"
+		alpha_3_code="GEO"
+		numeric_code="268"
+		name="Georgia" />
+	<iso_3166_entry
+		alpha_2_code="DE"
+		alpha_3_code="DEU"
+		numeric_code="276"
+		name="Germany"
+		official_name="Federal Republic of Germany" />
+	<iso_3166_entry
+		alpha_2_code="GH"
+		alpha_3_code="GHA"
+		numeric_code="288"
+		name="Ghana"
+		official_name="Republic of Ghana" />
+	<iso_3166_entry
+		alpha_2_code="GI"
+		alpha_3_code="GIB"
+		numeric_code="292"
+		name="Gibraltar" />
+	<iso_3166_entry
+		alpha_2_code="GR"
+		alpha_3_code="GRC"
+		numeric_code="300"
+		name="Greece"
+		official_name="Hellenic Republic" />
+	<iso_3166_entry
+		alpha_2_code="GL"
+		alpha_3_code="GRL"
+		numeric_code="304"
+		name="Greenland" />
+	<iso_3166_entry
+		alpha_2_code="GD"
+		alpha_3_code="GRD"
+		numeric_code="308"
+		name="Grenada" />
+	<iso_3166_entry
+		alpha_2_code="GP"
+		alpha_3_code="GLP"
+		numeric_code="312"
+		name="Guadeloupe" />
+	<iso_3166_entry
+		alpha_2_code="GU"
+		alpha_3_code="GUM"
+		numeric_code="316"
+		name="Guam" />
+	<iso_3166_entry
+		alpha_2_code="GT"
+		alpha_3_code="GTM"
+		numeric_code="320"
+		name="Guatemala"
+		official_name="Republic of Guatemala" />
+	<iso_3166_entry
+		alpha_2_code="GG"
+		alpha_3_code="GGY"
+		numeric_code="831"
+		name="Guernsey" />
+	<iso_3166_entry
+		alpha_2_code="GN"
+		alpha_3_code="GIN"
+		numeric_code="324"
+		name="Guinea"
+		official_name="Republic of Guinea" />
+	<iso_3166_entry
+		alpha_2_code="GW"
+		alpha_3_code="GNB"
+		numeric_code="624"
+		name="Guinea-Bissau"
+		official_name="Republic of Guinea-Bissau" />
+	<iso_3166_entry
+		alpha_2_code="GY"
+		alpha_3_code="GUY"
+		numeric_code="328"
+		name="Guyana"
+		official_name="Republic of Guyana" />
+	<iso_3166_entry
+		alpha_2_code="HT"
+		alpha_3_code="HTI"
+		numeric_code="332"
+		name="Haiti"
+		official_name="Republic of Haiti" />
+	<iso_3166_entry
+		alpha_2_code="HM"
+		alpha_3_code="HMD"
+		numeric_code="334"
+		name="Heard Island and McDonald Islands" />
+	<iso_3166_entry
+		alpha_2_code="VA"
+		alpha_3_code="VAT"
+		numeric_code="336"
+		name="Holy See (Vatican City State)" />
+	<iso_3166_entry
+		alpha_2_code="HN"
+		alpha_3_code="HND"
+		numeric_code="340"
+		name="Honduras"
+		official_name="Republic of Honduras" />
+	<iso_3166_entry
+		alpha_2_code="HK"
+		alpha_3_code="HKG"
+		numeric_code="344"
+		name="Hong Kong"
+		official_name="Hong Kong Special Administrative Region of China" />
+	<iso_3166_entry
+		alpha_2_code="HU"
+		alpha_3_code="HUN"
+		numeric_code="348"
+		name="Hungary"
+		official_name="Republic of Hungary" />
+	<iso_3166_entry
+		alpha_2_code="IS"
+		alpha_3_code="ISL"
+		numeric_code="352"
+		name="Iceland"
+		official_name="Republic of Iceland" />
+	<iso_3166_entry
+		alpha_2_code="IN"
+		alpha_3_code="IND"
+		numeric_code="356"
+		name="India"
+		official_name="Republic of India" />
+	<iso_3166_entry
+		alpha_2_code="ID"
+		alpha_3_code="IDN"
+		numeric_code="360"
+		name="Indonesia"
+		official_name="Republic of Indonesia" />
+	<iso_3166_entry
+		alpha_2_code="IR"
+		alpha_3_code="IRN"
+		numeric_code="364"
+		name="Iran, Islamic Republic of"
+		official_name="Islamic Republic of Iran" />
+	<iso_3166_entry
+		alpha_2_code="IQ"
+		alpha_3_code="IRQ"
+		numeric_code="368"
+		name="Iraq"
+		official_name="Republic of Iraq" />
+	<iso_3166_entry
+		alpha_2_code="IE"
+		alpha_3_code="IRL"
+		numeric_code="372"
+		name="Ireland" />
+	<iso_3166_entry
+		alpha_2_code="IM"
+		alpha_3_code="IMN"
+		numeric_code="833"
+		name="Isle of Man" />
+	<iso_3166_entry
+		alpha_2_code="IL"
+		alpha_3_code="ISR"
+		numeric_code="376"
+		name="Israel"
+		official_name="State of Israel" />
+	<iso_3166_entry
+		alpha_2_code="IT"
+		alpha_3_code="ITA"
+		numeric_code="380"
+		name="Italy"
+		official_name="Italian Republic" />
+	<iso_3166_entry
+		alpha_2_code="JM"
+		alpha_3_code="JAM"
+		numeric_code="388"
+		name="Jamaica" />
+	<iso_3166_entry
+		alpha_2_code="JP"
+		alpha_3_code="JPN"
+		numeric_code="392"
+		name="Japan" />
+	<iso_3166_entry
+		alpha_2_code="JE"
+		alpha_3_code="JEY"
+		numeric_code="832"
+		name="Jersey" />
+	<iso_3166_entry
+		alpha_2_code="JO"
+		alpha_3_code="JOR"
+		numeric_code="400"
+		name="Jordan"
+		official_name="Hashemite Kingdom of Jordan" />
+	<iso_3166_entry
+		alpha_2_code="KZ"
+		alpha_3_code="KAZ"
+		numeric_code="398"
+		name="Kazakhstan"
+		official_name="Republic of Kazakhstan" />
+	<iso_3166_entry
+		alpha_2_code="KE"
+		alpha_3_code="KEN"
+		numeric_code="404"
+		name="Kenya"
+		official_name="Republic of Kenya" />
+	<iso_3166_entry
+		alpha_2_code="KI"
+		alpha_3_code="KIR"
+		numeric_code="296"
+		name="Kiribati"
+		official_name="Republic of Kiribati" />
+	<iso_3166_entry
+		alpha_2_code="KP"
+		alpha_3_code="PRK"
+		numeric_code="408"
+		name="Korea, Democratic People's Republic of"
+		official_name="Democratic People's Republic of Korea" />
+	<iso_3166_entry
+		alpha_2_code="KR"
+		alpha_3_code="KOR"
+		numeric_code="410"
+		name="Korea, Republic of" />
+	<iso_3166_entry
+		alpha_2_code="KW"
+		alpha_3_code="KWT"
+		numeric_code="414"
+		name="Kuwait"
+		official_name="State of Kuwait" />
+	<iso_3166_entry
+		alpha_2_code="KG"
+		alpha_3_code="KGZ"
+		numeric_code="417"
+		name="Kyrgyzstan"
+		official_name="Kyrgyz Republic" />
+	<iso_3166_entry
+		alpha_2_code="LA"
+		alpha_3_code="LAO"
+		numeric_code="418"
+		name="Lao People's Democratic Republic" />
+	<iso_3166_entry
+		alpha_2_code="LV"
+		alpha_3_code="LVA"
+		numeric_code="428"
+		name="Latvia"
+		official_name="Republic of Latvia" />
+	<iso_3166_entry
+		alpha_2_code="LB"
+		alpha_3_code="LBN"
+		numeric_code="422"
+		name="Lebanon"
+		official_name="Lebanese Republic" />
+	<iso_3166_entry
+		alpha_2_code="LS"
+		alpha_3_code="LSO"
+		numeric_code="426"
+		name="Lesotho"
+		official_name="Kingdom of Lesotho" />
+	<iso_3166_entry
+		alpha_2_code="LR"
+		alpha_3_code="LBR"
+		numeric_code="430"
+		name="Liberia"
+		official_name="Republic of Liberia" />
+	<iso_3166_entry
+		alpha_2_code="LY"
+		alpha_3_code="LBY"
+		numeric_code="434"
+		common_name="Libya"
+		name="Libyan Arab Jamahiriya"
+		official_name="Socialist People's Libyan Arab Jamahiriya" />
+	<iso_3166_entry
+		alpha_2_code="LI"
+		alpha_3_code="LIE"
+		numeric_code="438"
+		name="Liechtenstein"
+		official_name="Principality of Liechtenstein" />
+	<iso_3166_entry
+		alpha_2_code="LT"
+		alpha_3_code="LTU"
+		numeric_code="440"
+		name="Lithuania"
+		official_name="Republic of Lithuania" />
+	<iso_3166_entry
+		alpha_2_code="LU"
+		alpha_3_code="LUX"
+		numeric_code="442"
+		name="Luxembourg"
+		official_name="Grand Duchy of Luxembourg" />
+	<iso_3166_entry
+		alpha_2_code="MO"
+		alpha_3_code="MAC"
+		numeric_code="446"
+		name="Macao"
+		official_name="Macao Special Administrative Region of China" />
+	<iso_3166_entry
+		alpha_2_code="MK"
+		alpha_3_code="MKD"
+		numeric_code="807"
+		name="Macedonia, Republic of"
+		official_name="The Former Yugoslav Republic of Macedonia" />
+	<iso_3166_entry
+		alpha_2_code="MG"
+		alpha_3_code="MDG"
+		numeric_code="450"
+		name="Madagascar"
+		official_name="Republic of Madagascar" />
+	<iso_3166_entry
+		alpha_2_code="MW"
+		alpha_3_code="MWI"
+		numeric_code="454"
+		name="Malawi"
+		official_name="Republic of Malawi" />
+	<iso_3166_entry
+		alpha_2_code="MY"
+		alpha_3_code="MYS"
+		numeric_code="458"
+		name="Malaysia" />
+	<iso_3166_entry
+		alpha_2_code="MV"
+		alpha_3_code="MDV"
+		numeric_code="462"
+		name="Maldives"
+		official_name="Republic of Maldives" />
+	<iso_3166_entry
+		alpha_2_code="ML"
+		alpha_3_code="MLI"
+		numeric_code="466"
+		name="Mali"
+		official_name="Republic of Mali" />
+	<iso_3166_entry
+		alpha_2_code="MT"
+		alpha_3_code="MLT"
+		numeric_code="470"
+		name="Malta"
+		official_name="Republic of Malta" />
+	<iso_3166_entry
+		alpha_2_code="MH"
+		alpha_3_code="MHL"
+		numeric_code="584"
+		name="Marshall Islands"
+		official_name="Republic of the Marshall Islands" />
+	<iso_3166_entry
+		alpha_2_code="MQ"
+		alpha_3_code="MTQ"
+		numeric_code="474"
+		name="Martinique" />
+	<iso_3166_entry
+		alpha_2_code="MR"
+		alpha_3_code="MRT"
+		numeric_code="478"
+		name="Mauritania"
+		official_name="Islamic Republic of Mauritania" />
+	<iso_3166_entry
+		alpha_2_code="MU"
+		alpha_3_code="MUS"
+		numeric_code="480"
+		name="Mauritius"
+		official_name="Republic of Mauritius" />
+	<iso_3166_entry
+		alpha_2_code="YT"
+		alpha_3_code="MYT"
+		numeric_code="175"
+		name="Mayotte" />
+	<iso_3166_entry
+		alpha_2_code="MX"
+		alpha_3_code="MEX"
+		numeric_code="484"
+		name="Mexico"
+		official_name="United Mexican States" />
+	<iso_3166_entry
+		alpha_2_code="FM"
+		alpha_3_code="FSM"
+		numeric_code="583"
+		name="Micronesia, Federated States of"
+		official_name="Federated States of Micronesia" />
+	<iso_3166_entry
+		alpha_2_code="MD"
+		alpha_3_code="MDA"
+		numeric_code="498"
+		common_name="Moldova"
+		name="Moldova, Republic of"
+		official_name="Republic of Moldova" />
+	<iso_3166_entry
+		alpha_2_code="MC"
+		alpha_3_code="MCO"
+		numeric_code="492"
+		name="Monaco"
+		official_name="Principality of Monaco" />
+	<iso_3166_entry
+		alpha_2_code="MN"
+		alpha_3_code="MNG"
+		numeric_code="496"
+		name="Mongolia" />
+	<iso_3166_entry
+		alpha_2_code="ME"
+		alpha_3_code="MNE"
+		numeric_code="499"
+		name="Montenegro"
+		official_name="Montenegro" />
+	<iso_3166_entry
+		alpha_2_code="MS"
+		alpha_3_code="MSR"
+		numeric_code="500"
+		name="Montserrat" />
+	<iso_3166_entry
+		alpha_2_code="MA"
+		alpha_3_code="MAR"
+		numeric_code="504"
+		name="Morocco"
+		official_name="Kingdom of Morocco" />
+	<iso_3166_entry
+		alpha_2_code="MZ"
+		alpha_3_code="MOZ"
+		numeric_code="508"
+		name="Mozambique"
+		official_name="Republic of Mozambique" />
+	<iso_3166_entry
+		alpha_2_code="MM"
+		alpha_3_code="MMR"
+		numeric_code="104"
+		name="Myanmar"
+		official_name="Republic of Myanmar" />
+	<iso_3166_entry
+		alpha_2_code="NA"
+		alpha_3_code="NAM"
+		numeric_code="516"
+		name="Namibia"
+		official_name="Republic of Namibia" />
+	<iso_3166_entry
+		alpha_2_code="NR"
+		alpha_3_code="NRU"
+		numeric_code="520"
+		name="Nauru"
+		official_name="Republic of Nauru" />
+	<iso_3166_entry
+		alpha_2_code="NP"
+		alpha_3_code="NPL"
+		numeric_code="524"
+		name="Nepal"
+		official_name="Federal Democratic Republic of Nepal" />
+	<iso_3166_entry
+		alpha_2_code="NL"
+		alpha_3_code="NLD"
+		numeric_code="528"
+		name="Netherlands"
+		official_name="Kingdom of the Netherlands" />
+	<iso_3166_entry
+		alpha_2_code="NC"
+		alpha_3_code="NCL"
+		numeric_code="540"
+		name="New Caledonia" />
+	<iso_3166_entry
+		alpha_2_code="NZ"
+		alpha_3_code="NZL"
+		numeric_code="554"
+		name="New Zealand" />
+	<iso_3166_entry
+		alpha_2_code="NI"
+		alpha_3_code="NIC"
+		numeric_code="558"
+		name="Nicaragua"
+		official_name="Republic of Nicaragua" />
+	<iso_3166_entry
+		alpha_2_code="NE"
+		alpha_3_code="NER"
+		numeric_code="562"
+		name="Niger"
+		official_name="Republic of the Niger" />
+	<iso_3166_entry
+		alpha_2_code="NG"
+		alpha_3_code="NGA"
+		numeric_code="566"
+		name="Nigeria"
+		official_name="Federal Republic of Nigeria" />
+	<iso_3166_entry
+		alpha_2_code="NU"
+		alpha_3_code="NIU"
+		numeric_code="570"
+		name="Niue"
+		official_name="Niue" />
+	<iso_3166_entry
+		alpha_2_code="NF"
+		alpha_3_code="NFK"
+		numeric_code="574"
+		name="Norfolk Island" />
+	<iso_3166_entry
+		alpha_2_code="MP"
+		alpha_3_code="MNP"
+		numeric_code="580"
+		name="Northern Mariana Islands"
+		official_name="Commonwealth of the Northern Mariana Islands" />
+	<iso_3166_entry
+		alpha_2_code="NO"
+		alpha_3_code="NOR"
+		numeric_code="578"
+		name="Norway"
+		official_name="Kingdom of Norway" />
+	<iso_3166_entry
+		alpha_2_code="OM"
+		alpha_3_code="OMN"
+		numeric_code="512"
+		name="Oman"
+		official_name="Sultanate of Oman" />
+	<iso_3166_entry
+		alpha_2_code="PK"
+		alpha_3_code="PAK"
+		numeric_code="586"
+		name="Pakistan"
+		official_name="Islamic Republic of Pakistan" />
+	<iso_3166_entry
+		alpha_2_code="PW"
+		alpha_3_code="PLW"
+		numeric_code="585"
+		name="Palau"
+		official_name="Republic of Palau" />
+	<iso_3166_entry
+		alpha_2_code="PS"
+		alpha_3_code="PSE"
+		numeric_code="275"
+		name="Palestinian Territory, Occupied"
+		official_name="Occupied Palestinian Territory" />
+	<iso_3166_entry
+		alpha_2_code="PA"
+		alpha_3_code="PAN"
+		numeric_code="591"
+		name="Panama"
+		official_name="Republic of Panama" />
+	<iso_3166_entry
+		alpha_2_code="PG"
+		alpha_3_code="PNG"
+		numeric_code="598"
+		name="Papua New Guinea" />
+	<iso_3166_entry
+		alpha_2_code="PY"
+		alpha_3_code="PRY"
+		numeric_code="600"
+		name="Paraguay"
+		official_name="Republic of Paraguay" />
+	<iso_3166_entry
+		alpha_2_code="PE"
+		alpha_3_code="PER"
+		numeric_code="604"
+		name="Peru"
+		official_name="Republic of Peru" />
+	<iso_3166_entry
+		alpha_2_code="PH"
+		alpha_3_code="PHL"
+		numeric_code="608"
+		name="Philippines"
+		official_name="Republic of the Philippines" />
+	<iso_3166_entry
+		alpha_2_code="PN"
+		alpha_3_code="PCN"
+		numeric_code="612"
+		name="Pitcairn" />
+	<iso_3166_entry
+		alpha_2_code="PL"
+		alpha_3_code="POL"
+		numeric_code="616"
+		name="Poland"
+		official_name="Republic of Poland" />
+	<iso_3166_entry
+		alpha_2_code="PT"
+		alpha_3_code="PRT"
+		numeric_code="620"
+		name="Portugal"
+		official_name="Portuguese Republic" />
+	<iso_3166_entry
+		alpha_2_code="PR"
+		alpha_3_code="PRI"
+		numeric_code="630"
+		name="Puerto Rico" />
+	<iso_3166_entry
+		alpha_2_code="QA"
+		alpha_3_code="QAT"
+		numeric_code="634"
+		name="Qatar"
+		official_name="State of Qatar" />
+	<iso_3166_entry
+		alpha_2_code="RE"
+		alpha_3_code="REU"
+		numeric_code="638"
+		name="Reunion" />
+	<iso_3166_entry
+		alpha_2_code="RO"
+		alpha_3_code="ROU"
+		numeric_code="642"
+		name="Romania" />
+	<iso_3166_entry
+		alpha_2_code="RU"
+		alpha_3_code="RUS"
+		numeric_code="643"
+		name="Russian Federation" />
+	<iso_3166_entry
+		alpha_2_code="RW"
+		alpha_3_code="RWA"
+		numeric_code="646"
+		name="Rwanda"
+		official_name="Rwandese Republic" />
+	<iso_3166_entry
+		alpha_2_code="BL"
+		alpha_3_code="BLM"
+		numeric_code="652"
+		name="Saint Barthélemy" />
+	<iso_3166_entry
+		alpha_2_code="SH"
+		alpha_3_code="SHN"
+		numeric_code="654"
+		name="Saint Helena, Ascension and Tristan da Cunha" />
+	<iso_3166_entry
+		alpha_2_code="KN"
+		alpha_3_code="KNA"
+		numeric_code="659"
+		name="Saint Kitts and Nevis" />
+	<iso_3166_entry
+		alpha_2_code="LC"
+		alpha_3_code="LCA"
+		numeric_code="662"
+		name="Saint Lucia" />
+	<iso_3166_entry
+		alpha_2_code="MF"
+		alpha_3_code="MAF"
+		numeric_code="663"
+		name="Saint Martin (French part)" />
+	<iso_3166_entry
+		alpha_2_code="PM"
+		alpha_3_code="SPM"
+		numeric_code="666"
+		name="Saint Pierre and Miquelon" />
+	<iso_3166_entry
+		alpha_2_code="VC"
+		alpha_3_code="VCT"
+		numeric_code="670"
+		name="Saint Vincent and the Grenadines" />
+	<iso_3166_entry
+		alpha_2_code="WS"
+		alpha_3_code="WSM"
+		numeric_code="882"
+		name="Samoa"
+		official_name="Independent State of Samoa" />
+	<iso_3166_entry
+		alpha_2_code="SM"
+		alpha_3_code="SMR"
+		numeric_code="674"
+		name="San Marino"
+		official_name="Republic of San Marino" />
+	<iso_3166_entry
+		alpha_2_code="ST"
+		alpha_3_code="STP"
+		numeric_code="678"
+		name="Sao Tome and Principe"
+		official_name="Democratic Republic of Sao Tome and Principe" />
+	<iso_3166_entry
+		alpha_2_code="SA"
+		alpha_3_code="SAU"
+		numeric_code="682"
+		name="Saudi Arabia"
+		official_name="Kingdom of Saudi Arabia" />
+	<iso_3166_entry
+		alpha_2_code="SN"
+		alpha_3_code="SEN"
+		numeric_code="686"
+		name="Senegal"
+		official_name="Republic of Senegal" />
+	<iso_3166_entry
+		alpha_2_code="RS"
+		alpha_3_code="SRB"
+		numeric_code="688"
+		name="Serbia"
+		official_name="Republic of Serbia" />
+	<iso_3166_entry
+		alpha_2_code="SC"
+		alpha_3_code="SYC"
+		numeric_code="690"
+		name="Seychelles"
+		official_name="Republic of Seychelles" />
+	<iso_3166_entry
+		alpha_2_code="SL"
+		alpha_3_code="SLE"
+		numeric_code="694"
+		name="Sierra Leone"
+		official_name="Republic of Sierra Leone" />
+	<iso_3166_entry
+		alpha_2_code="SG"
+		alpha_3_code="SGP"
+		numeric_code="702"
+		name="Singapore"
+		official_name="Republic of Singapore" />
+	<iso_3166_entry
+		alpha_2_code="SX"
+		alpha_3_code="SXM"
+		numeric_code="702"
+		name="Sint Maarten"
+		official_name="Sint Maarten (Dutch part)" />
+	<iso_3166_entry
+		alpha_2_code="SK"
+		alpha_3_code="SVK"
+		numeric_code="703"
+		name="Slovakia"
+		official_name="Slovak Republic" />
+	<iso_3166_entry
+		alpha_2_code="SI"
+		alpha_3_code="SVN"
+		numeric_code="705"
+		name="Slovenia"
+		official_name="Republic of Slovenia" />
+	<iso_3166_entry
+		alpha_2_code="SB"
+		alpha_3_code="SLB"
+		numeric_code="090"
+		name="Solomon Islands" />
+	<iso_3166_entry
+		alpha_2_code="SO"
+		alpha_3_code="SOM"
+		numeric_code="706"
+		name="Somalia"
+		official_name="Somali Republic" />
+	<iso_3166_entry
+		alpha_2_code="ZA"
+		alpha_3_code="ZAF"
+		numeric_code="710"
+		name="South Africa"
+		official_name="Republic of South Africa" />
+	<iso_3166_entry
+		alpha_2_code="GS"
+		alpha_3_code="SGS"
+		numeric_code="239"
+		name="South Georgia and the South Sandwich Islands" />
+	<iso_3166_entry
+		alpha_2_code="ES"
+		alpha_3_code="ESP"
+		numeric_code="724"
+		name="Spain"
+		official_name="Kingdom of Spain" />
+	<iso_3166_entry
+		alpha_2_code="LK"
+		alpha_3_code="LKA"
+		numeric_code="144"
+		name="Sri Lanka"
+		official_name="Democratic Socialist Republic of Sri Lanka" />
+	<iso_3166_entry
+		alpha_2_code="SD"
+		alpha_3_code="SDN"
+		numeric_code="736"
+		name="Sudan"
+		official_name="Republic of the Sudan" />
+	<iso_3166_entry
+		alpha_2_code="SR"
+		alpha_3_code="SUR"
+		numeric_code="740"
+		name="Suriname"
+		official_name="Republic of Suriname" />
+	<iso_3166_entry
+		alpha_2_code="SJ"
+		alpha_3_code="SJM"
+		numeric_code="744"
+		name="Svalbard and Jan Mayen" />
+	<iso_3166_entry
+		alpha_2_code="SZ"
+		alpha_3_code="SWZ"
+		numeric_code="748"
+		name="Swaziland"
+		official_name="Kingdom of Swaziland" />
+	<iso_3166_entry
+		alpha_2_code="SE"
+		alpha_3_code="SWE"
+		numeric_code="752"
+		name="Sweden"
+		official_name="Kingdom of Sweden" />
+	<iso_3166_entry
+		alpha_2_code="CH"
+		alpha_3_code="CHE"
+		numeric_code="756"
+		name="Switzerland"
+		official_name="Swiss Confederation" />
+	<iso_3166_entry
+		alpha_2_code="SY"
+		alpha_3_code="SYR"
+		numeric_code="760"
+		name="Syrian Arab Republic" />
+	<iso_3166_entry
+		alpha_2_code="TW"
+		alpha_3_code="TWN"
+		numeric_code="158"
+		common_name="Taiwan"
+		name="Taiwan, Province of China"
+		official_name="Taiwan, Province of China" />
+	<iso_3166_entry
+		alpha_2_code="TJ"
+		alpha_3_code="TJK"
+		numeric_code="762"
+		name="Tajikistan"
+		official_name="Republic of Tajikistan" />
+	<iso_3166_entry
+		alpha_2_code="TZ"
+		alpha_3_code="TZA"
+		numeric_code="834"
+		name="Tanzania, United Republic of"
+		official_name="United Republic of Tanzania" />
+	<iso_3166_entry
+		alpha_2_code="TH"
+		alpha_3_code="THA"
+		numeric_code="764"
+		name="Thailand"
+		official_name="Kingdom of Thailand" />
+	<iso_3166_entry
+		alpha_2_code="TL"
+		alpha_3_code="TLS"
+		numeric_code="626"
+		name="Timor-Leste"
+		official_name="Democratic Republic of Timor-Leste" />
+	<iso_3166_entry
+		alpha_2_code="TG"
+		alpha_3_code="TGO"
+		numeric_code="768"
+		name="Togo"
+		official_name="Togolese Republic" />
+	<iso_3166_entry
+		alpha_2_code="TK"
+		alpha_3_code="TKL"
+		numeric_code="772"
+		name="Tokelau" />
+	<iso_3166_entry
+		alpha_2_code="TO"
+		alpha_3_code="TON"
+		numeric_code="776"
+		name="Tonga"
+		official_name="Kingdom of Tonga" />
+	<iso_3166_entry
+		alpha_2_code="TT"
+		alpha_3_code="TTO"
+		numeric_code="780"
+		name="Trinidad and Tobago"
+		official_name="Republic of Trinidad and Tobago" />
+	<iso_3166_entry
+		alpha_2_code="TN"
+		alpha_3_code="TUN"
+		numeric_code="788"
+		name="Tunisia"
+		official_name="Republic of Tunisia" />
+	<iso_3166_entry
+		alpha_2_code="TR"
+		alpha_3_code="TUR"
+		numeric_code="792"
+		name="Turkey"
+		official_name="Republic of Turkey" />
+	<iso_3166_entry
+		alpha_2_code="TM"
+		alpha_3_code="TKM"
+		numeric_code="795"
+		name="Turkmenistan" />
+	<iso_3166_entry
+		alpha_2_code="TC"
+		alpha_3_code="TCA"
+		numeric_code="796"
+		name="Turks and Caicos Islands" />
+	<iso_3166_entry
+		alpha_2_code="TV"
+		alpha_3_code="TUV"
+		numeric_code="798"
+		name="Tuvalu" />
+	<iso_3166_entry
+		alpha_2_code="UG"
+		alpha_3_code="UGA"
+		numeric_code="800"
+		name="Uganda"
+		official_name="Republic of Uganda" />
+	<iso_3166_entry
+		alpha_2_code="UA"
+		alpha_3_code="UKR"
+		numeric_code="804"
+		name="Ukraine" />
+	<iso_3166_entry
+		alpha_2_code="AE"
+		alpha_3_code="ARE"
+		numeric_code="784"
+		name="United Arab Emirates" />
+	<iso_3166_entry
+		alpha_2_code="GB"
+		alpha_3_code="GBR"
+		numeric_code="826"
+		name="United Kingdom"
+		official_name="United Kingdom of Great Britain and Northern Ireland" />
+	<iso_3166_entry
+		alpha_2_code="US"
+		alpha_3_code="USA"
+		numeric_code="840"
+		name="United States"
+		official_name="United States of America" />
+	<iso_3166_entry
+		alpha_2_code="UM"
+		alpha_3_code="UMI"
+		numeric_code="581"
+		name="United States Minor Outlying Islands" />
+	<iso_3166_entry
+		alpha_2_code="UY"
+		alpha_3_code="URY"
+		numeric_code="858"
+		name="Uruguay"
+		official_name="Eastern Republic of Uruguay" />
+	<iso_3166_entry
+		alpha_2_code="UZ"
+		alpha_3_code="UZB"
+		numeric_code="860"
+		name="Uzbekistan"
+		official_name="Republic of Uzbekistan" />
+	<iso_3166_entry
+		alpha_2_code="VU"
+		alpha_3_code="VUT"
+		numeric_code="548"
+		name="Vanuatu"
+		official_name="Republic of Vanuatu" />
+	<iso_3166_entry
+		alpha_2_code="VE"
+		alpha_3_code="VEN"
+		numeric_code="862"
+		common_name="Venezuela"
+		name="Venezuela, Bolivarian republic of"
+		official_name="Bolivarian Republic of Venezuela" />
+	<iso_3166_entry
+		alpha_2_code="VN"
+		alpha_3_code="VNM"
+		numeric_code="704"
+		name="Viet Nam"
+		official_name="Socialist Republic of Viet Nam" />
+	<!-- FIXME CHECK OFFICIAL NAME -->
+	<iso_3166_entry
+		alpha_2_code="VG"
+		alpha_3_code="VGB"
+		numeric_code="092"
+		name="Virgin Islands, British"
+		official_name="British Virgin Islands" />
+	<iso_3166_entry
+		alpha_2_code="VI"
+		alpha_3_code="VIR"
+		numeric_code="850"
+		name="Virgin Islands, U.S."
+		official_name="Virgin Islands of the United States" />
+	<iso_3166_entry
+		alpha_2_code="WF"
+		alpha_3_code="WLF"
+		numeric_code="876"
+		name="Wallis and Futuna" />
+	<iso_3166_entry
+		alpha_2_code="EH"
+		alpha_3_code="ESH"
+		numeric_code="732"
+		name="Western Sahara" />
+	<iso_3166_entry
+		alpha_2_code="YE"
+		alpha_3_code="YEM"
+		numeric_code="887"
+		name="Yemen"
+		official_name="Republic of Yemen" />
+	<iso_3166_entry
+		alpha_2_code="ZM"
+		alpha_3_code="ZMB"
+		numeric_code="894"
+		name="Zambia"
+		official_name="Republic of Zambia" />
+	<iso_3166_entry
+		alpha_2_code="ZW"
+		alpha_3_code="ZWE"
+		numeric_code="716"
+		name="Zimbabwe"
+		official_name="Republic of Zimbabwe" />
+	<iso_3166_3_entry
+		alpha_4_code="BQAQ"
+		alpha_3_code="ATB"
+		date_withdrawn="1979"
+		names="British Antarctic Territory" />
+	<iso_3166_3_entry
+		alpha_4_code="BUMM"
+		alpha_3_code="BUR"
+		numeric_code="104"
+		date_withdrawn="1989-12-05"
+		names="Burma, Socialist Republic of the Union of" />
+	<iso_3166_3_entry
+		alpha_4_code="BYAA"
+		alpha_3_code="BYS"
+		numeric_code="112"
+		date_withdrawn="1992-06-15"
+		names="Byelorussian SSR Soviet Socialist Republic" />
+	<iso_3166_3_entry
+		alpha_4_code="CTKI"
+		alpha_3_code="CTE"
+		numeric_code="128"
+		date_withdrawn="1984"
+		names="Canton and Enderbury Islands" />
+	<iso_3166_3_entry
+		alpha_4_code="CSHH"
+		alpha_3_code="CSK"
+		numeric_code="200"
+		date_withdrawn="1993-06-15"
+		names="Czechoslovakia, Czechoslovak Socialist Republic" />
+	<iso_3166_3_entry
+		alpha_4_code="DYBJ"
+		alpha_3_code="DHY"
+		numeric_code="204"
+		date_withdrawn="1977"
+		names="Dahomey" />
+	<iso_3166_3_entry
+		alpha_4_code="NQAQ"
+		alpha_3_code="ATN"
+		numeric_code="216"
+		date_withdrawn="1983"
+		names="Dronning Maud Land" />
+	<iso_3166_3_entry
+		alpha_4_code="TPTL"
+		alpha_3_code="TMP"
+		numeric_code="626"
+		date_withdrawn="2002-05-20"
+		names="East Timor"
+		comment="was Portuguese Timor" />
+	<iso_3166_3_entry
+		alpha_4_code="ET"
+		alpha_3_code="ETH"
+		numeric_code="230"
+		date_withdrawn="1993-07-16"
+		names="Ethiopia" />
+	<iso_3166_3_entry
+		alpha_4_code="FXFR"
+		alpha_3_code="FXX"
+		numeric_code="249"
+		date_withdrawn="1997-07-14"
+		names="France, Metropolitan" />
+	<iso_3166_3_entry
+		alpha_4_code="AIDJ"
+		alpha_3_code="AFI"
+		numeric_code="262"
+		date_withdrawn="1977"
+		names="French Afars and Issas" />
+	<iso_3166_3_entry
+		alpha_4_code="FQHH"
+		alpha_3_code="ATF"
+		date_withdrawn="1979"
+		names="French Southern and Antarctic Territories"
+		comment="now split between AQ and TF" />
+	<iso_3166_3_entry
+		alpha_4_code="DDDE"
+		alpha_3_code="DDR"
+		numeric_code="278"
+		date_withdrawn="1990-10-30"
+		names="German Democratic Republic" />
+	<iso_3166_3_entry
+		alpha_4_code="DE"
+		alpha_3_code="DEU"
+		numeric_code="280"
+		date_withdrawn="1990-10-30"
+		names="Germany, Federal Republic of" />
+	<iso_3166_3_entry
+		alpha_4_code="GEHH"
+		alpha_3_code="GEL"
+		numeric_code="296"
+		date_withdrawn="1979"
+		names="Gilbert and Ellice Islands"
+		comment="now split into Kiribati and Tuvalu" />
+	<iso_3166_3_entry
+		alpha_4_code="JTUM"
+		alpha_3_code="JTN"
+		numeric_code="396"
+		date_withdrawn="1986"
+		names="Johnston Island" />
+	<iso_3166_3_entry
+		alpha_4_code="MIUM"
+		alpha_3_code="MID"
+		numeric_code="488"
+		date_withdrawn="1986"
+		names="Midway Islands" />
+	<iso_3166_3_entry
+		alpha_4_code="AN"
+		alpha_3_code="ANT"
+		numeric_code="532"
+		date_withdrawn="1993-07-12"
+		names="Netherlands Antilles" />
+	<iso_3166_3_entry
+		alpha_4_code="NTHH"
+		alpha_3_code="NTZ"
+		numeric_code="536"
+		date_withdrawn="1993-07-12"
+		names="Neutral Zone"
+		comment="formerly between Saudi Arabia and Iraq" />
+	<iso_3166_3_entry
+		alpha_4_code="NHVU"
+		alpha_3_code="NHB"
+		numeric_code="548"
+		date_withdrawn="1980"
+		names="New Hebrides" />
+	<iso_3166_3_entry
+		alpha_4_code="PCHH"
+		alpha_3_code="PCI"
+		numeric_code="582"
+		date_withdrawn="1986"
+		names="Pacific Islands (trust territory)"
+		comment="divided into FM, MH, MP, and PW" />
+	<iso_3166_3_entry
+		alpha_4_code="PA"
+		alpha_3_code="PAN"
+		numeric_code="590"
+		date_withdrawn="1993-07-22"
+		names="Panama, Republic of" />
+	<iso_3166_3_entry
+		alpha_4_code="PZPA"
+		alpha_3_code="PCZ"
+		date_withdrawn="1980"
+		names="Panama Canal Zone" />
+	<iso_3166_3_entry
+		alpha_4_code="RO"
+		alpha_3_code="ROM"
+		numeric_code="642"
+		date_withdrawn="2002-02-01"
+		names="Romania, Socialist Republic of" />
+	<iso_3166_3_entry
+		alpha_4_code="KN"
+		alpha_3_code="KNA"
+		numeric_code="658"
+		date_withdrawn="1988"
+		names="St. Kitts-Nevis-Anguilla"
+		comment="now St. Kitts and Nevis and Anguilla" />
+	<iso_3166_3_entry
+		alpha_4_code="CSXX"
+		alpha_3_code="SCG"
+		numeric_code="891"
+		date_withdrawn="2006-06-05"
+		names="Serbia and Montenegro" />
+	<iso_3166_3_entry
+		alpha_4_code="SKIN"
+		alpha_3_code="SKM"
+		date_withdrawn="1975"
+		names="Sikkim" />
+	<iso_3166_3_entry
+		alpha_4_code="RHZW"
+		alpha_3_code="RHO"
+		numeric_code="716"
+		date_withdrawn="1980"
+		names="Southern Rhodesia" />
+	<iso_3166_3_entry
+		alpha_4_code="EH"
+		alpha_3_code="ESH"
+		numeric_code="732"
+		date_withdrawn="1988"
+		names="Spanish Sahara"
+		comment="now Western Sahara" />
+	<iso_3166_3_entry
+		alpha_4_code="PUUM"
+		alpha_3_code="PUS"
+		numeric_code="849"
+		date_withdrawn="1986"
+		names="US Miscellaneous Pacific Islands" />
+	<iso_3166_3_entry
+		alpha_4_code="SUHH"
+		alpha_3_code="SUN"
+		numeric_code="810"
+		date_withdrawn="1992-08-30"
+		names="USSR, Union of Soviet Socialist Republics" />
+	<iso_3166_3_entry
+		alpha_4_code="HVBF"
+		alpha_3_code="HVO"
+		numeric_code="854"
+		date_withdrawn="1984"
+		names="Upper Volta, Republic of" />
+	<iso_3166_3_entry
+		alpha_4_code="VA"
+		alpha_3_code="VAT"
+		numeric_code="336"
+		date_withdrawn="1996-04-03"
+		names="Vatican City State (Holy See)" />
+	<iso_3166_3_entry
+		alpha_4_code="VDVN"
+		alpha_3_code="VDR"
+		date_withdrawn="1977"
+		names="Viet-Nam, Democratic Republic of" />
+	<iso_3166_3_entry
+		alpha_4_code="WKUM"
+		alpha_3_code="WAK"
+		numeric_code="872"
+		date_withdrawn="1986"
+		names="Wake Island" />
+	<iso_3166_3_entry
+		alpha_4_code="YDYE"
+		alpha_3_code="YMD"
+		numeric_code="720"
+		date_withdrawn="1990-08-14"
+		names="Yemen, Democratic, People's Democratic Republic of" />
+	<iso_3166_3_entry
+		alpha_4_code="YE"
+		alpha_3_code="YEM"
+		numeric_code="891"
+		date_withdrawn="1990-08-14"
+		names="Yemen, Yemen Arab Republic" />
+	<iso_3166_3_entry
+		alpha_4_code="YUCS"
+		alpha_3_code="YUG"
+		numeric_code="891"
+		date_withdrawn="1993-07-28"
+		names="Yugoslavia, Socialist Federal Republic of" />
+	<iso_3166_3_entry
+		alpha_4_code="ZRCD"
+		alpha_3_code="ZAR"
+		numeric_code="180"
+		date_withdrawn="1997-07-14"
+		names="Zaire, Republic of" />
+</iso_3166_entries>
diff --git a/build/share/xml/iso-codes/iso_639.xml b/build/share/xml/iso-codes/iso_639.xml
new file mode 100644
index 00000000..02fa01fb
--- /dev/null
+++ b/build/share/xml/iso-codes/iso_639.xml
@@ -0,0 +1,2169 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+This file gives a list of all languages in the ISO 639
+standard, and is used to provide translations via gettext
+
+Copyright (C) 2004-2006 Alastair McKinstry <mckinstry@computer.org>
+Copyright (C) 2004-2009 Christian Perrier <bubulle@debian.org>
+Copyright (C) 2005-2008 Tobias Quathamer <toddy@debian.org>
+
+    This file is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This file is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this file; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Source: <http://www.loc.gov/standards/iso639-2/>
+-->
+
+<!DOCTYPE iso_639_entries [
+	<!ELEMENT iso_639_entries (iso_639_entry+)>
+	<!ELEMENT iso_639_entry EMPTY>
+	<!ATTLIST iso_639_entry
+		iso_639_2B_code		CDATA	#REQUIRED
+		iso_639_2T_code		CDATA	#REQUIRED
+		iso_639_1_code		CDATA	#IMPLIED
+		name			CDATA	#REQUIRED
+	>
+]>
+
+<iso_639_entries>
+	<iso_639_entry
+		iso_639_2B_code="aar"
+		iso_639_2T_code="aar"
+		iso_639_1_code="aa"
+		name="Afar" />
+	<iso_639_entry
+		iso_639_2B_code="abk"
+		iso_639_2T_code="abk"
+		iso_639_1_code="ab"
+		name="Abkhazian" />
+	<iso_639_entry
+		iso_639_2B_code="ace"
+		iso_639_2T_code="ace"
+		name="Achinese" />
+	<iso_639_entry
+		iso_639_2B_code="ach"
+		iso_639_2T_code="ach"
+		name="Acoli" />
+	<iso_639_entry
+		iso_639_2B_code="ada"
+		iso_639_2T_code="ada"
+		name="Adangme" />
+	<iso_639_entry
+		iso_639_2B_code="ady"
+		iso_639_2T_code="ady"
+		name="Adyghe; Adygei" />
+	<iso_639_entry
+		iso_639_2B_code="afa"
+		iso_639_2T_code="afa"
+		name="Afro-Asiatic languages" />
+	<iso_639_entry
+		iso_639_2B_code="afh"
+		iso_639_2T_code="afh"
+		name="Afrihili" />
+	<iso_639_entry
+		iso_639_2B_code="afr"
+		iso_639_2T_code="afr"
+		iso_639_1_code="af"
+		name="Afrikaans" />
+	<iso_639_entry
+		iso_639_2B_code="ain"
+		iso_639_2T_code="ain"
+		name="Ainu" />
+	<iso_639_entry
+		iso_639_2B_code="aka"
+		iso_639_2T_code="aka"
+		iso_639_1_code="ak"
+		name="Akan" />
+	<iso_639_entry
+		iso_639_2B_code="akk"
+		iso_639_2T_code="akk"
+		name="Akkadian" />
+	<iso_639_entry
+		iso_639_2B_code="alb"
+		iso_639_2T_code="sqi"
+		iso_639_1_code="sq"
+		name="Albanian" />
+	<iso_639_entry
+		iso_639_2B_code="ale"
+		iso_639_2T_code="ale"
+		name="Aleut" />
+	<iso_639_entry
+		iso_639_2B_code="alg"
+		iso_639_2T_code="alg"
+		name="Algonquian languages" />
+	<iso_639_entry
+		iso_639_2B_code="alt"
+		iso_639_2T_code="alt"
+		name="Southern Altai" />
+	<iso_639_entry
+		iso_639_2B_code="amh"
+		iso_639_2T_code="amh"
+		iso_639_1_code="am"
+		name="Amharic" />
+	<iso_639_entry
+		iso_639_2B_code="ang"
+		iso_639_2T_code="ang"
+		name="English, Old (ca. 450-1100)" />
+	<iso_639_entry
+		iso_639_2B_code="anp"
+		iso_639_2T_code="anp"
+		name="Angika" />
+	<iso_639_entry
+		iso_639_2B_code="apa"
+		iso_639_2T_code="apa"
+		name="Apache languages" />
+	<iso_639_entry
+		iso_639_2B_code="ara"
+		iso_639_2T_code="ara"
+		iso_639_1_code="ar"
+		name="Arabic" />
+	<iso_639_entry
+		iso_639_2B_code="arc"
+		iso_639_2T_code="arc"
+		name="Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)" />
+	<iso_639_entry
+		iso_639_2B_code="arg"
+		iso_639_2T_code="arg"
+		iso_639_1_code="an"
+		name="Aragonese" />
+	<iso_639_entry
+		iso_639_2B_code="arm"
+		iso_639_2T_code="hye"
+		iso_639_1_code="hy"
+		name="Armenian" />
+	<iso_639_entry
+		iso_639_2B_code="arn"
+		iso_639_2T_code="arn"
+		name="Mapudungun; Mapuche" />
+	<iso_639_entry
+		iso_639_2B_code="arp"
+		iso_639_2T_code="arp"
+		name="Arapaho" />
+	<iso_639_entry
+		iso_639_2B_code="art"
+		iso_639_2T_code="art"
+		name="Artificial languages" />
+	<iso_639_entry
+		iso_639_2B_code="arw"
+		iso_639_2T_code="arw"
+		name="Arawak" />
+	<iso_639_entry
+		iso_639_2B_code="asm"
+		iso_639_2T_code="asm"
+		iso_639_1_code="as"
+		name="Assamese" />
+	<iso_639_entry
+		iso_639_2B_code="ast"
+		iso_639_2T_code="ast"
+		name="Asturian; Bable; Leonese; Asturleonese" />
+	<iso_639_entry
+		iso_639_2B_code="ath"
+		iso_639_2T_code="ath"
+		name="Athapascan languages" />
+	<iso_639_entry
+		iso_639_2B_code="aus"
+		iso_639_2T_code="aus"
+		name="Australian languages" />
+	<iso_639_entry
+		iso_639_2B_code="ava"
+		iso_639_2T_code="ava"
+		iso_639_1_code="av"
+		name="Avaric" />
+	<iso_639_entry
+		iso_639_2B_code="ave"
+		iso_639_2T_code="ave"
+		iso_639_1_code="ae"
+		name="Avestan" />
+	<iso_639_entry
+		iso_639_2B_code="awa"
+		iso_639_2T_code="awa"
+		name="Awadhi" />
+	<iso_639_entry
+		iso_639_2B_code="aym"
+		iso_639_2T_code="aym"
+		iso_639_1_code="ay"
+		name="Aymara" />
+	<iso_639_entry
+		iso_639_2B_code="aze"
+		iso_639_2T_code="aze"
+		iso_639_1_code="az"
+		name="Azerbaijani" />
+	<iso_639_entry
+		iso_639_2B_code="bad"
+		iso_639_2T_code="bad"
+		name="Banda languages" />
+	<iso_639_entry
+		iso_639_2B_code="bai"
+		iso_639_2T_code="bai"
+		name="Bamileke languages" />
+	<iso_639_entry
+		iso_639_2B_code="bak"
+		iso_639_2T_code="bak"
+		iso_639_1_code="ba"
+		name="Bashkir" />
+	<iso_639_entry
+		iso_639_2B_code="bal"
+		iso_639_2T_code="bal"
+		name="Baluchi" />
+	<iso_639_entry
+		iso_639_2B_code="bam"
+		iso_639_2T_code="bam"
+		iso_639_1_code="bm"
+		name="Bambara" />
+	<iso_639_entry
+		iso_639_2B_code="ban"
+		iso_639_2T_code="ban"
+		name="Balinese" />
+	<iso_639_entry
+		iso_639_2B_code="baq"
+		iso_639_2T_code="eus"
+		iso_639_1_code="eu"
+		name="Basque" />
+	<iso_639_entry
+		iso_639_2B_code="bas"
+		iso_639_2T_code="bas"
+		name="Basa" />
+	<iso_639_entry
+		iso_639_2B_code="bat"
+		iso_639_2T_code="bat"
+		name="Baltic languages" />
+	<iso_639_entry
+		iso_639_2B_code="bej"
+		iso_639_2T_code="bej"
+		name="Beja; Bedawiyet" />
+	<iso_639_entry
+		iso_639_2B_code="bel"
+		iso_639_2T_code="bel"
+		iso_639_1_code="be"
+		name="Belarusian" />
+	<iso_639_entry
+		iso_639_2B_code="bem"
+		iso_639_2T_code="bem"
+		name="Bemba" />
+	<iso_639_entry
+		iso_639_2B_code="ben"
+		iso_639_2T_code="ben"
+		iso_639_1_code="bn"
+		name="Bengali" />
+	<iso_639_entry
+		iso_639_2B_code="ber"
+		iso_639_2T_code="ber"
+		name="Berber languages" />
+	<iso_639_entry
+		iso_639_2B_code="bho"
+		iso_639_2T_code="bho"
+		name="Bhojpuri" />
+	<iso_639_entry
+		iso_639_2B_code="bih"
+		iso_639_2T_code="bih"
+		iso_639_1_code="bh"
+		name="Bihari languages" />
+	<iso_639_entry
+		iso_639_2B_code="bik"
+		iso_639_2T_code="bik"
+		name="Bikol" />
+	<iso_639_entry
+		iso_639_2B_code="bin"
+		iso_639_2T_code="bin"
+		name="Bini; Edo" />
+	<iso_639_entry
+		iso_639_2B_code="bis"
+		iso_639_2T_code="bis"
+		iso_639_1_code="bi"
+		name="Bislama" />
+	<iso_639_entry
+		iso_639_2B_code="bla"
+		iso_639_2T_code="bla"
+		name="Siksika" />
+	<iso_639_entry
+		iso_639_2B_code="bnt"
+		iso_639_2T_code="bnt"
+		name="Bantu languages" />
+	<iso_639_entry
+		iso_639_2B_code="bos"
+		iso_639_2T_code="bos"
+		iso_639_1_code="bs"
+		name="Bosnian" />
+	<iso_639_entry
+		iso_639_2B_code="bra"
+		iso_639_2T_code="bra"
+		name="Braj" />
+	<iso_639_entry
+		iso_639_2B_code="bre"
+		iso_639_2T_code="bre"
+		iso_639_1_code="br"
+		name="Breton" />
+	<iso_639_entry
+		iso_639_2B_code="btk"
+		iso_639_2T_code="btk"
+		name="Batak languages" />
+	<iso_639_entry
+		iso_639_2B_code="bua"
+		iso_639_2T_code="bua"
+		name="Buriat" />
+	<iso_639_entry
+		iso_639_2B_code="bug"
+		iso_639_2T_code="bug"
+		name="Buginese" />
+	<iso_639_entry
+		iso_639_2B_code="bul"
+		iso_639_2T_code="bul"
+		iso_639_1_code="bg"
+		name="Bulgarian" />
+	<iso_639_entry
+		iso_639_2B_code="bur"
+		iso_639_2T_code="mya"
+		iso_639_1_code="my"
+		name="Burmese" />
+	<iso_639_entry
+		iso_639_2B_code="byn"
+		iso_639_2T_code="byn"
+		name="Blin; Bilin" />
+	<iso_639_entry
+		iso_639_2B_code="cad"
+		iso_639_2T_code="cad"
+		name="Caddo" />
+	<iso_639_entry
+		iso_639_2B_code="cai"
+		iso_639_2T_code="cai"
+		name="Central American Indian languages" />
+	<iso_639_entry
+		iso_639_2B_code="car"
+		iso_639_2T_code="car"
+		name="Galibi Carib" />
+	<iso_639_entry
+		iso_639_2B_code="cat"
+		iso_639_2T_code="cat"
+		iso_639_1_code="ca"
+		name="Catalan; Valencian" />
+	<iso_639_entry
+		iso_639_2B_code="cau"
+		iso_639_2T_code="cau"
+		name="Caucasian languages" />
+	<iso_639_entry
+		iso_639_2B_code="ceb"
+		iso_639_2T_code="ceb"
+		name="Cebuano" />
+	<iso_639_entry
+		iso_639_2B_code="cel"
+		iso_639_2T_code="cel"
+		name="Celtic languages" />
+	<iso_639_entry
+		iso_639_2B_code="cha"
+		iso_639_2T_code="cha"
+		iso_639_1_code="ch"
+		name="Chamorro" />
+	<iso_639_entry
+		iso_639_2B_code="chb"
+		iso_639_2T_code="chb"
+		name="Chibcha" />
+	<iso_639_entry
+		iso_639_2B_code="che"
+		iso_639_2T_code="che"
+		iso_639_1_code="ce"
+		name="Chechen" />
+	<iso_639_entry
+		iso_639_2B_code="chg"
+		iso_639_2T_code="chg"
+		name="Chagatai" />
+	<iso_639_entry
+		iso_639_2B_code="chi"
+		iso_639_2T_code="zho"
+		iso_639_1_code="zh"
+		name="Chinese" />
+	<iso_639_entry
+		iso_639_2B_code="chk"
+		iso_639_2T_code="chk"
+		name="Chuukese" />
+	<iso_639_entry
+		iso_639_2B_code="chm"
+		iso_639_2T_code="chm"
+		name="Mari" />
+	<iso_639_entry
+		iso_639_2B_code="chn"
+		iso_639_2T_code="chn"
+		name="Chinook jargon" />
+	<iso_639_entry
+		iso_639_2B_code="cho"
+		iso_639_2T_code="cho"
+		name="Choctaw" />
+	<iso_639_entry
+		iso_639_2B_code="chp"
+		iso_639_2T_code="chp"
+		name="Chipewyan; Dene Suline" />
+	<iso_639_entry
+		iso_639_2B_code="chr"
+		iso_639_2T_code="chr"
+		name="Cherokee" />
+	<iso_639_entry
+		iso_639_2B_code="chu"
+		iso_639_2T_code="chu"
+		iso_639_1_code="cu"
+		name="Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic" />
+	<iso_639_entry
+		iso_639_2B_code="chv"
+		iso_639_2T_code="chv"
+		iso_639_1_code="cv"
+		name="Chuvash" />
+	<iso_639_entry
+		iso_639_2B_code="chy"
+		iso_639_2T_code="chy"
+		name="Cheyenne" />
+	<iso_639_entry
+		iso_639_2B_code="cmc"
+		iso_639_2T_code="cmc"
+		name="Chamic languages" />
+	<iso_639_entry
+		iso_639_2B_code="cop"
+		iso_639_2T_code="cop"
+		name="Coptic" />
+	<iso_639_entry
+		iso_639_2B_code="cor"
+		iso_639_2T_code="cor"
+		iso_639_1_code="kw"
+		name="Cornish" />
+	<iso_639_entry
+		iso_639_2B_code="cos"
+		iso_639_2T_code="cos"
+		iso_639_1_code="co"
+		name="Corsican" />
+	<iso_639_entry
+		iso_639_2B_code="cpe"
+		iso_639_2T_code="cpe"
+		name="Creoles and pidgins, English based" />
+	<iso_639_entry
+		iso_639_2B_code="cpf"
+		iso_639_2T_code="cpf"
+		name="Creoles and pidgins, French-based" />
+	<iso_639_entry
+		iso_639_2B_code="cpp"
+		iso_639_2T_code="cpp"
+		name="Creoles and pidgins, Portuguese-based" />
+	<iso_639_entry
+		iso_639_2B_code="cre"
+		iso_639_2T_code="cre"
+		iso_639_1_code="cr"
+		name="Cree" />
+	<iso_639_entry
+		iso_639_2B_code="crh"
+		iso_639_2T_code="crh"
+		name="Crimean Tatar; Crimean Turkish" />
+	<iso_639_entry
+		iso_639_2B_code="crp"
+		iso_639_2T_code="crp"
+		name="Creoles and pidgins" />
+	<iso_639_entry
+		iso_639_2B_code="csb"
+		iso_639_2T_code="csb"
+		name="Kashubian" />
+	<iso_639_entry
+		iso_639_2B_code="cus"
+		iso_639_2T_code="cus"
+		name="Cushitic languages" />
+	<iso_639_entry
+		iso_639_2B_code="cze"
+		iso_639_2T_code="ces"
+		iso_639_1_code="cs"
+		name="Czech" />
+	<iso_639_entry
+		iso_639_2B_code="dak"
+		iso_639_2T_code="dak"
+		name="Dakota" />
+	<iso_639_entry
+		iso_639_2B_code="dan"
+		iso_639_2T_code="dan"
+		iso_639_1_code="da"
+		name="Danish" />
+	<iso_639_entry
+		iso_639_2B_code="dar"
+		iso_639_2T_code="dar"
+		name="Dargwa" />
+	<iso_639_entry
+		iso_639_2B_code="day"
+		iso_639_2T_code="day"
+		name="Land Dayak languages" />
+	<iso_639_entry
+		iso_639_2B_code="del"
+		iso_639_2T_code="del"
+		name="Delaware" />
+	<iso_639_entry
+		iso_639_2B_code="den"
+		iso_639_2T_code="den"
+		name="Slave (Athapascan)" />
+	<iso_639_entry
+		iso_639_2B_code="dgr"
+		iso_639_2T_code="dgr"
+		name="Dogrib" />
+	<iso_639_entry
+		iso_639_2B_code="din"
+		iso_639_2T_code="din"
+		name="Dinka" />
+	<iso_639_entry
+		iso_639_2B_code="div"
+		iso_639_2T_code="div"
+		iso_639_1_code="dv"
+		name="Divehi; Dhivehi; Maldivian" />
+	<iso_639_entry
+		iso_639_2B_code="doi"
+		iso_639_2T_code="doi"
+		name="Dogri" />
+	<iso_639_entry
+		iso_639_2B_code="dra"
+		iso_639_2T_code="dra"
+		name="Dravidian languages" />
+	<iso_639_entry
+		iso_639_2B_code="dsb"
+		iso_639_2T_code="dsb"
+		name="Lower Sorbian" />
+	<iso_639_entry
+		iso_639_2B_code="dua"
+		iso_639_2T_code="dua"
+		name="Duala" />
+	<iso_639_entry
+		iso_639_2B_code="dum"
+		iso_639_2T_code="dum"
+		name="Dutch, Middle (ca. 1050-1350)" />
+	<iso_639_entry
+		iso_639_2B_code="dut"
+		iso_639_2T_code="nld"
+		iso_639_1_code="nl"
+		name="Dutch; Flemish" />
+	<iso_639_entry
+		iso_639_2B_code="dyu"
+		iso_639_2T_code="dyu"
+		name="Dyula" />
+	<iso_639_entry
+		iso_639_2B_code="dzo"
+		iso_639_2T_code="dzo"
+		iso_639_1_code="dz"
+		name="Dzongkha" />
+	<iso_639_entry
+		iso_639_2B_code="efi"
+		iso_639_2T_code="efi"
+		name="Efik" />
+	<iso_639_entry
+		iso_639_2B_code="egy"
+		iso_639_2T_code="egy"
+		name="Egyptian (Ancient)" />
+	<iso_639_entry
+		iso_639_2B_code="eka"
+		iso_639_2T_code="eka"
+		name="Ekajuk" />
+	<iso_639_entry
+		iso_639_2B_code="elx"
+		iso_639_2T_code="elx"
+		name="Elamite" />
+	<iso_639_entry
+		iso_639_2B_code="eng"
+		iso_639_2T_code="eng"
+		iso_639_1_code="en"
+		name="English" />
+	<iso_639_entry
+		iso_639_2B_code="enm"
+		iso_639_2T_code="enm"
+		name="English, Middle (1100-1500)" />
+	<iso_639_entry
+		iso_639_2B_code="epo"
+		iso_639_2T_code="epo"
+		iso_639_1_code="eo"
+		name="Esperanto" />
+	<iso_639_entry
+		iso_639_2B_code="est"
+		iso_639_2T_code="est"
+		iso_639_1_code="et"
+		name="Estonian" />
+	<iso_639_entry
+		iso_639_2B_code="ewe"
+		iso_639_2T_code="ewe"
+		iso_639_1_code="ee"
+		name="Ewe" />
+	<iso_639_entry
+		iso_639_2B_code="ewo"
+		iso_639_2T_code="ewo"
+		name="Ewondo" />
+	<iso_639_entry
+		iso_639_2B_code="fan"
+		iso_639_2T_code="fan"
+		name="Fang" />
+	<iso_639_entry
+		iso_639_2B_code="fao"
+		iso_639_2T_code="fao"
+		iso_639_1_code="fo"
+		name="Faroese" />
+	<iso_639_entry
+		iso_639_2B_code="fat"
+		iso_639_2T_code="fat"
+		name="Fanti" />
+	<iso_639_entry
+		iso_639_2B_code="fij"
+		iso_639_2T_code="fij"
+		iso_639_1_code="fj"
+		name="Fijian" />
+	<iso_639_entry
+		iso_639_2B_code="fil"
+		iso_639_2T_code="fil"
+		name="Filipino; Pilipino" />
+	<iso_639_entry
+		iso_639_2B_code="fin"
+		iso_639_2T_code="fin"
+		iso_639_1_code="fi"
+		name="Finnish" />
+	<iso_639_entry
+		iso_639_2B_code="fiu"
+		iso_639_2T_code="fiu"
+		name="Finno-Ugrian languages" />
+	<iso_639_entry
+		iso_639_2B_code="fon"
+		iso_639_2T_code="fon"
+		name="Fon" />
+	<iso_639_entry
+		iso_639_2B_code="fre"
+		iso_639_2T_code="fra"
+		iso_639_1_code="fr"
+		name="French" />
+	<iso_639_entry
+		iso_639_2B_code="frm"
+		iso_639_2T_code="frm"
+		name="French, Middle (ca. 1400-1600)" />
+	<iso_639_entry
+		iso_639_2B_code="fro"
+		iso_639_2T_code="fro"
+		name="French, Old (842-ca. 1400)" />
+	<iso_639_entry
+		iso_639_2B_code="frr"
+		iso_639_2T_code="frr"
+		name="Northern Frisian" />
+	<iso_639_entry
+		iso_639_2B_code="frs"
+		iso_639_2T_code="frs"
+		name="Eastern Frisian" />
+	<iso_639_entry
+		iso_639_2B_code="fry"
+		iso_639_2T_code="fry"
+		iso_639_1_code="fy"
+		name="Western Frisian" />
+	<iso_639_entry
+		iso_639_2B_code="ful"
+		iso_639_2T_code="ful"
+		iso_639_1_code="ff"
+		name="Fulah" />
+	<iso_639_entry
+		iso_639_2B_code="fur"
+		iso_639_2T_code="fur"
+		name="Friulian" />
+	<iso_639_entry
+		iso_639_2B_code="gaa"
+		iso_639_2T_code="gaa"
+		name="Ga" />
+	<iso_639_entry
+		iso_639_2B_code="gay"
+		iso_639_2T_code="gay"
+		name="Gayo" />
+	<iso_639_entry
+		iso_639_2B_code="gba"
+		iso_639_2T_code="gba"
+		name="Gbaya" />
+	<iso_639_entry
+		iso_639_2B_code="gem"
+		iso_639_2T_code="gem"
+		name="Germanic languages" />
+	<iso_639_entry
+		iso_639_2B_code="geo"
+		iso_639_2T_code="kat"
+		iso_639_1_code="ka"
+		name="Georgian" />
+	<iso_639_entry
+		iso_639_2B_code="ger"
+		iso_639_2T_code="deu"
+		iso_639_1_code="de"
+		name="German" />
+	<iso_639_entry
+		iso_639_2B_code="gez"
+		iso_639_2T_code="gez"
+		name="Geez" />
+	<iso_639_entry
+		iso_639_2B_code="gil"
+		iso_639_2T_code="gil"
+		name="Gilbertese" />
+	<iso_639_entry
+		iso_639_2B_code="gla"
+		iso_639_2T_code="gla"
+		iso_639_1_code="gd"
+		name="Gaelic; Scottish Gaelic" />
+	<iso_639_entry
+		iso_639_2B_code="gle"
+		iso_639_2T_code="gle"
+		iso_639_1_code="ga"
+		name="Irish" />
+	<iso_639_entry
+		iso_639_2B_code="glg"
+		iso_639_2T_code="glg"
+		iso_639_1_code="gl"
+		name="Galician" />
+	<iso_639_entry
+		iso_639_2B_code="glv"
+		iso_639_2T_code="glv"
+		iso_639_1_code="gv"
+		name="Manx" />
+	<iso_639_entry
+		iso_639_2B_code="gmh"
+		iso_639_2T_code="gmh"
+		name="German, Middle High (ca. 1050-1500)" />
+	<iso_639_entry
+		iso_639_2B_code="goh"
+		iso_639_2T_code="goh"
+		name="German, Old High (ca. 750-1050)" />
+	<iso_639_entry
+		iso_639_2B_code="gon"
+		iso_639_2T_code="gon"
+		name="Gondi" />
+	<iso_639_entry
+		iso_639_2B_code="gor"
+		iso_639_2T_code="gor"
+		name="Gorontalo" />
+	<iso_639_entry
+		iso_639_2B_code="got"
+		iso_639_2T_code="got"
+		name="Gothic" />
+	<iso_639_entry
+		iso_639_2B_code="grb"
+		iso_639_2T_code="grb"
+		name="Grebo" />
+	<iso_639_entry
+		iso_639_2B_code="grc"
+		iso_639_2T_code="grc"
+		name="Greek, Ancient (to 1453)" />
+	<iso_639_entry
+		iso_639_2B_code="gre"
+		iso_639_2T_code="ell"
+		iso_639_1_code="el"
+		name="Greek, Modern (1453-)" />
+	<iso_639_entry
+		iso_639_2B_code="grn"
+		iso_639_2T_code="grn"
+		iso_639_1_code="gn"
+		name="Guarani" />
+	<iso_639_entry
+		iso_639_2B_code="gsw"
+		iso_639_2T_code="gsw"
+		name="Swiss German; Alemannic; Alsatian" />
+	<iso_639_entry
+		iso_639_2B_code="guj"
+		iso_639_2T_code="guj"
+		iso_639_1_code="gu"
+		name="Gujarati" />
+	<iso_639_entry
+		iso_639_2B_code="gwi"
+		iso_639_2T_code="gwi"
+		name="Gwich'in" />
+	<iso_639_entry
+		iso_639_2B_code="hai"
+		iso_639_2T_code="hai"
+		name="Haida" />
+	<iso_639_entry
+		iso_639_2B_code="hat"
+		iso_639_2T_code="hat"
+		iso_639_1_code="ht"
+		name="Haitian; Haitian Creole" />
+	<iso_639_entry
+		iso_639_2B_code="hau"
+		iso_639_2T_code="hau"
+		iso_639_1_code="ha"
+		name="Hausa" />
+	<iso_639_entry
+		iso_639_2B_code="haw"
+		iso_639_2T_code="haw"
+		name="Hawaiian" />
+	<iso_639_entry
+		iso_639_2B_code="heb"
+		iso_639_2T_code="heb"
+		iso_639_1_code="he"
+		name="Hebrew" />
+	<iso_639_entry
+		iso_639_2B_code="her"
+		iso_639_2T_code="her"
+		iso_639_1_code="hz"
+		name="Herero" />
+	<iso_639_entry
+		iso_639_2B_code="hil"
+		iso_639_2T_code="hil"
+		name="Hiligaynon" />
+	<iso_639_entry
+		iso_639_2B_code="him"
+		iso_639_2T_code="him"
+		name="Himachali languages; Western Pahari languages" />
+	<iso_639_entry
+		iso_639_2B_code="hin"
+		iso_639_2T_code="hin"
+		iso_639_1_code="hi"
+		name="Hindi" />
+	<iso_639_entry
+		iso_639_2B_code="hit"
+		iso_639_2T_code="hit"
+		name="Hittite" />
+	<iso_639_entry
+		iso_639_2B_code="hmn"
+		iso_639_2T_code="hmn"
+		name="Hmong; Mong" />
+	<iso_639_entry
+		iso_639_2B_code="hmo"
+		iso_639_2T_code="hmo"
+		iso_639_1_code="ho"
+		name="Hiri Motu" />
+	<iso_639_entry
+		iso_639_2B_code="hrv"
+		iso_639_2T_code="hrv"
+		iso_639_1_code="hr"
+		name="Croatian" />
+	<iso_639_entry
+		iso_639_2B_code="hsb"
+		iso_639_2T_code="hsb"
+		name="Upper Sorbian" />
+	<iso_639_entry
+		iso_639_2B_code="hun"
+		iso_639_2T_code="hun"
+		iso_639_1_code="hu"
+		name="Hungarian" />
+	<iso_639_entry
+		iso_639_2B_code="hup"
+		iso_639_2T_code="hup"
+		name="Hupa" />
+	<iso_639_entry
+		iso_639_2B_code="iba"
+		iso_639_2T_code="iba"
+		name="Iban" />
+	<iso_639_entry
+		iso_639_2B_code="ibo"
+		iso_639_2T_code="ibo"
+		iso_639_1_code="ig"
+		name="Igbo" />
+	<iso_639_entry
+		iso_639_2B_code="ice"
+		iso_639_2T_code="isl"
+		iso_639_1_code="is"
+		name="Icelandic" />
+	<iso_639_entry
+		iso_639_2B_code="ido"
+		iso_639_2T_code="ido"
+		iso_639_1_code="io"
+		name="Ido" />
+	<iso_639_entry
+		iso_639_2B_code="iii"
+		iso_639_2T_code="iii"
+		iso_639_1_code="ii"
+		name="Sichuan Yi; Nuosu" />
+	<iso_639_entry
+		iso_639_2B_code="ijo"
+		iso_639_2T_code="ijo"
+		name="Ijo languages" />
+	<iso_639_entry
+		iso_639_2B_code="iku"
+		iso_639_2T_code="iku"
+		iso_639_1_code="iu"
+		name="Inuktitut" />
+	<iso_639_entry
+		iso_639_2B_code="ile"
+		iso_639_2T_code="ile"
+		iso_639_1_code="ie"
+		name="Interlingue; Occidental" />
+	<iso_639_entry
+		iso_639_2B_code="ilo"
+		iso_639_2T_code="ilo"
+		name="Iloko" />
+	<iso_639_entry
+		iso_639_2B_code="ina"
+		iso_639_2T_code="ina"
+		iso_639_1_code="ia"
+		name="Interlingua (International Auxiliary Language Association)" />
+	<iso_639_entry
+		iso_639_2B_code="inc"
+		iso_639_2T_code="inc"
+		name="Indic languages" />
+	<iso_639_entry
+		iso_639_2B_code="ind"
+		iso_639_2T_code="ind"
+		iso_639_1_code="id"
+		name="Indonesian" />
+	<iso_639_entry
+		iso_639_2B_code="ine"
+		iso_639_2T_code="ine"
+		name="Indo-European languages" />
+	<iso_639_entry
+		iso_639_2B_code="inh"
+		iso_639_2T_code="inh"
+		name="Ingush" />
+	<iso_639_entry
+		iso_639_2B_code="ipk"
+		iso_639_2T_code="ipk"
+		iso_639_1_code="ik"
+		name="Inupiaq" />
+	<iso_639_entry
+		iso_639_2B_code="ira"
+		iso_639_2T_code="ira"
+		name="Iranian languages" />
+	<iso_639_entry
+		iso_639_2B_code="iro"
+		iso_639_2T_code="iro"
+		name="Iroquoian languages" />
+	<iso_639_entry
+		iso_639_2B_code="ita"
+		iso_639_2T_code="ita"
+		iso_639_1_code="it"
+		name="Italian" />
+	<iso_639_entry
+		iso_639_2B_code="jav"
+		iso_639_2T_code="jav"
+		iso_639_1_code="jv"
+		name="Javanese" />
+	<iso_639_entry
+		iso_639_2B_code="jbo"
+		iso_639_2T_code="jbo"
+		name="Lojban" />
+	<iso_639_entry
+		iso_639_2B_code="jpn"
+		iso_639_2T_code="jpn"
+		iso_639_1_code="ja"
+		name="Japanese" />
+	<iso_639_entry
+		iso_639_2B_code="jpr"
+		iso_639_2T_code="jpr"
+		name="Judeo-Persian" />
+	<iso_639_entry
+		iso_639_2B_code="jrb"
+		iso_639_2T_code="jrb"
+		name="Judeo-Arabic" />
+	<iso_639_entry
+		iso_639_2B_code="kaa"
+		iso_639_2T_code="kaa"
+		name="Kara-Kalpak" />
+	<iso_639_entry
+		iso_639_2B_code="kab"
+		iso_639_2T_code="kab"
+		name="Kabyle" />
+	<iso_639_entry
+		iso_639_2B_code="kac"
+		iso_639_2T_code="kac"
+		name="Kachin; Jingpho" />
+	<iso_639_entry
+		iso_639_2B_code="kal"
+		iso_639_2T_code="kal"
+		iso_639_1_code="kl"
+		name="Kalaallisut; Greenlandic" />
+	<iso_639_entry
+		iso_639_2B_code="kam"
+		iso_639_2T_code="kam"
+		name="Kamba" />
+	<iso_639_entry
+		iso_639_2B_code="kan"
+		iso_639_2T_code="kan"
+		iso_639_1_code="kn"
+		name="Kannada" />
+	<iso_639_entry
+		iso_639_2B_code="kar"
+		iso_639_2T_code="kar"
+		name="Karen languages" />
+	<iso_639_entry
+		iso_639_2B_code="kas"
+		iso_639_2T_code="kas"
+		iso_639_1_code="ks"
+		name="Kashmiri" />
+	<iso_639_entry
+		iso_639_2B_code="kau"
+		iso_639_2T_code="kau"
+		iso_639_1_code="kr"
+		name="Kanuri" />
+	<iso_639_entry
+		iso_639_2B_code="kaw"
+		iso_639_2T_code="kaw"
+		name="Kawi" />
+	<iso_639_entry
+		iso_639_2B_code="kaz"
+		iso_639_2T_code="kaz"
+		iso_639_1_code="kk"
+		name="Kazakh" />
+	<iso_639_entry
+		iso_639_2B_code="kbd"
+		iso_639_2T_code="kbd"
+		name="Kabardian" />
+	<iso_639_entry
+		iso_639_2B_code="kha"
+		iso_639_2T_code="kha"
+		name="Khasi" />
+	<iso_639_entry
+		iso_639_2B_code="khi"
+		iso_639_2T_code="khi"
+		name="Khoisan languages" />
+	<iso_639_entry
+		iso_639_2B_code="khm"
+		iso_639_2T_code="khm"
+		iso_639_1_code="km"
+		name="Central Khmer" />
+	<iso_639_entry
+		iso_639_2B_code="kho"
+		iso_639_2T_code="kho"
+		name="Khotanese;Sakan" />
+	<iso_639_entry
+		iso_639_2B_code="kik"
+		iso_639_2T_code="kik"
+		iso_639_1_code="ki"
+		name="Kikuyu; Gikuyu" />
+	<iso_639_entry
+		iso_639_2B_code="kin"
+		iso_639_2T_code="kin"
+		iso_639_1_code="rw"
+		name="Kinyarwanda" />
+	<iso_639_entry
+		iso_639_2B_code="kir"
+		iso_639_2T_code="kir"
+		iso_639_1_code="ky"
+		name="Kirghiz; Kyrgyz" />
+	<iso_639_entry
+		iso_639_2B_code="kmb"
+		iso_639_2T_code="kmb"
+		name="Kimbundu" />
+	<iso_639_entry
+		iso_639_2B_code="kok"
+		iso_639_2T_code="kok"
+		name="Konkani" />
+	<iso_639_entry
+		iso_639_2B_code="kom"
+		iso_639_2T_code="kom"
+		iso_639_1_code="kv"
+		name="Komi" />
+	<iso_639_entry
+		iso_639_2B_code="kon"
+		iso_639_2T_code="kon"
+		iso_639_1_code="kg"
+		name="Kongo" />
+	<iso_639_entry
+		iso_639_2B_code="kor"
+		iso_639_2T_code="kor"
+		iso_639_1_code="ko"
+		name="Korean" />
+	<iso_639_entry
+		iso_639_2B_code="kos"
+		iso_639_2T_code="kos"
+		name="Kosraean" />
+	<iso_639_entry
+		iso_639_2B_code="kpe"
+		iso_639_2T_code="kpe"
+		name="Kpelle" />
+	<iso_639_entry
+		iso_639_2B_code="krc"
+		iso_639_2T_code="krc"
+		name="Karachay-Balkar" />
+	<iso_639_entry
+		iso_639_2B_code="krl"
+		iso_639_2T_code="krl"
+		name="Karelian" />
+	<iso_639_entry
+		iso_639_2B_code="kro"
+		iso_639_2T_code="kro"
+		name="Kru languages" />
+	<iso_639_entry
+		iso_639_2B_code="kru"
+		iso_639_2T_code="kru"
+		name="Kurukh" />
+	<iso_639_entry
+		iso_639_2B_code="kua"
+		iso_639_2T_code="kua"
+		iso_639_1_code="kj"
+		name="Kuanyama; Kwanyama" />
+	<iso_639_entry
+		iso_639_2B_code="kum"
+		iso_639_2T_code="kum"
+		name="Kumyk" />
+	<iso_639_entry
+		iso_639_2B_code="kur"
+		iso_639_2T_code="kur"
+		iso_639_1_code="ku"
+		name="Kurdish" />
+	<iso_639_entry
+		iso_639_2B_code="kut"
+		iso_639_2T_code="kut"
+		name="Kutenai" />
+	<iso_639_entry
+		iso_639_2B_code="lad"
+		iso_639_2T_code="lad"
+		name="Ladino" />
+	<iso_639_entry
+		iso_639_2B_code="lah"
+		iso_639_2T_code="lah"
+		name="Lahnda" />
+	<iso_639_entry
+		iso_639_2B_code="lam"
+		iso_639_2T_code="lam"
+		name="Lamba" />
+	<iso_639_entry
+		iso_639_2B_code="lao"
+		iso_639_2T_code="lao"
+		iso_639_1_code="lo"
+		name="Lao" />
+	<iso_639_entry
+		iso_639_2B_code="lat"
+		iso_639_2T_code="lat"
+		iso_639_1_code="la"
+		name="Latin" />
+	<iso_639_entry
+		iso_639_2B_code="lav"
+		iso_639_2T_code="lav"
+		iso_639_1_code="lv"
+		name="Latvian" />
+	<iso_639_entry
+		iso_639_2B_code="lez"
+		iso_639_2T_code="lez"
+		name="Lezghian" />
+	<iso_639_entry
+		iso_639_2B_code="lim"
+		iso_639_2T_code="lim"
+		iso_639_1_code="li"
+		name="Limburgan; Limburger; Limburgish" />
+	<iso_639_entry
+		iso_639_2B_code="lin"
+		iso_639_2T_code="lin"
+		iso_639_1_code="ln"
+		name="Lingala" />
+	<iso_639_entry
+		iso_639_2B_code="lit"
+		iso_639_2T_code="lit"
+		iso_639_1_code="lt"
+		name="Lithuanian" />
+	<iso_639_entry
+		iso_639_2B_code="lol"
+		iso_639_2T_code="lol"
+		name="Mongo" />
+	<iso_639_entry
+		iso_639_2B_code="loz"
+		iso_639_2T_code="loz"
+		name="Lozi" />
+	<iso_639_entry
+		iso_639_2B_code="ltz"
+		iso_639_2T_code="ltz"
+		iso_639_1_code="lb"
+		name="Luxembourgish; Letzeburgesch" />
+	<iso_639_entry
+		iso_639_2B_code="lua"
+		iso_639_2T_code="lua"
+		name="Luba-Lulua" />
+	<iso_639_entry
+		iso_639_2B_code="lub"
+		iso_639_2T_code="lub"
+		iso_639_1_code="lu"
+		name="Luba-Katanga" />
+	<iso_639_entry
+		iso_639_2B_code="lug"
+		iso_639_2T_code="lug"
+		iso_639_1_code="lg"
+		name="Ganda" />
+	<iso_639_entry
+		iso_639_2B_code="lui"
+		iso_639_2T_code="lui"
+		name="Luiseno" />
+	<iso_639_entry
+		iso_639_2B_code="lun"
+		iso_639_2T_code="lun"
+		name="Lunda" />
+	<iso_639_entry
+		iso_639_2B_code="luo"
+		iso_639_2T_code="luo"
+		name="Luo (Kenya and Tanzania)" />
+	<iso_639_entry
+		iso_639_2B_code="lus"
+		iso_639_2T_code="lus"
+		name="Lushai" />
+	<iso_639_entry
+		iso_639_2B_code="mac"
+		iso_639_2T_code="mkd"
+		iso_639_1_code="mk"
+		name="Macedonian" />
+	<iso_639_entry
+		iso_639_2B_code="mad"
+		iso_639_2T_code="mad"
+		name="Madurese" />
+	<iso_639_entry
+		iso_639_2B_code="mag"
+		iso_639_2T_code="mag"
+		name="Magahi" />
+	<iso_639_entry
+		iso_639_2B_code="mah"
+		iso_639_2T_code="mah"
+		iso_639_1_code="mh"
+		name="Marshallese" />
+	<iso_639_entry
+		iso_639_2B_code="mai"
+		iso_639_2T_code="mai"
+		name="Maithili" />
+	<iso_639_entry
+		iso_639_2B_code="mak"
+		iso_639_2T_code="mak"
+		name="Makasar" />
+	<iso_639_entry
+		iso_639_2B_code="mal"
+		iso_639_2T_code="mal"
+		iso_639_1_code="ml"
+		name="Malayalam" />
+	<iso_639_entry
+		iso_639_2B_code="man"
+		iso_639_2T_code="man"
+		name="Mandingo" />
+	<iso_639_entry
+		iso_639_2B_code="mao"
+		iso_639_2T_code="mri"
+		iso_639_1_code="mi"
+		name="Maori" />
+	<iso_639_entry
+		iso_639_2B_code="map"
+		iso_639_2T_code="map"
+		name="Austronesian languages" />
+	<iso_639_entry
+		iso_639_2B_code="mar"
+		iso_639_2T_code="mar"
+		iso_639_1_code="mr"
+		name="Marathi" />
+	<iso_639_entry
+		iso_639_2B_code="mas"
+		iso_639_2T_code="mas"
+		name="Masai" />
+	<iso_639_entry
+		iso_639_2B_code="may"
+		iso_639_2T_code="msa"
+		iso_639_1_code="ms"
+		name="Malay" />
+	<iso_639_entry
+		iso_639_2B_code="mdf"
+		iso_639_2T_code="mdf"
+		name="Moksha" />
+	<iso_639_entry
+		iso_639_2B_code="mdr"
+		iso_639_2T_code="mdr"
+		name="Mandar" />
+	<iso_639_entry
+		iso_639_2B_code="men"
+		iso_639_2T_code="men"
+		name="Mende" />
+	<iso_639_entry
+		iso_639_2B_code="mga"
+		iso_639_2T_code="mga"
+		name="Irish, Middle (900-1200)" />
+	<iso_639_entry
+		iso_639_2B_code="mic"
+		iso_639_2T_code="mic"
+		name="Mi'kmaq; Micmac" />
+	<iso_639_entry
+		iso_639_2B_code="min"
+		iso_639_2T_code="min"
+		name="Minangkabau" />
+	<iso_639_entry
+		iso_639_2B_code="mis"
+		iso_639_2T_code="mis"
+		name="Uncoded languages" />
+	<iso_639_entry
+		iso_639_2B_code="mkh"
+		iso_639_2T_code="mkh"
+		name="Mon-Khmer languages" />
+	<iso_639_entry
+		iso_639_2B_code="mlg"
+		iso_639_2T_code="mlg"
+		iso_639_1_code="mg"
+		name="Malagasy" />
+	<iso_639_entry
+		iso_639_2B_code="mlt"
+		iso_639_2T_code="mlt"
+		iso_639_1_code="mt"
+		name="Maltese" />
+	<iso_639_entry
+		iso_639_2B_code="mnc"
+		iso_639_2T_code="mnc"
+		name="Manchu" />
+	<iso_639_entry
+		iso_639_2B_code="mni"
+		iso_639_2T_code="mni"
+		name="Manipuri" />
+	<iso_639_entry
+		iso_639_2B_code="mno"
+		iso_639_2T_code="mno"
+		name="Manobo languages" />
+	<iso_639_entry
+		iso_639_2B_code="moh"
+		iso_639_2T_code="moh"
+		name="Mohawk" />
+	<iso_639_entry
+		iso_639_2B_code="mol"
+		iso_639_2T_code="mol"
+		iso_639_1_code="mo"
+		name="Moldavian; Moldovan" />
+	<iso_639_entry
+		iso_639_2B_code="mon"
+		iso_639_2T_code="mon"
+		iso_639_1_code="mn"
+		name="Mongolian" />
+	<iso_639_entry
+		iso_639_2B_code="mos"
+		iso_639_2T_code="mos"
+		name="Mossi" />
+	<iso_639_entry
+		iso_639_2B_code="mul"
+		iso_639_2T_code="mul"
+		name="Multiple languages" />
+	<iso_639_entry
+		iso_639_2B_code="mun"
+		iso_639_2T_code="mun"
+		name="Munda languages" />
+	<iso_639_entry
+		iso_639_2B_code="mus"
+		iso_639_2T_code="mus"
+		name="Creek" />
+	<iso_639_entry
+		iso_639_2B_code="mwl"
+		iso_639_2T_code="mwl"
+		name="Mirandese" />
+	<iso_639_entry
+		iso_639_2B_code="mwr"
+		iso_639_2T_code="mwr"
+		name="Marwari" />
+	<iso_639_entry
+		iso_639_2B_code="myn"
+		iso_639_2T_code="myn"
+		name="Mayan languages" />
+	<iso_639_entry
+		iso_639_2B_code="myv"
+		iso_639_2T_code="myv"
+		name="Erzya" />
+	<iso_639_entry
+		iso_639_2B_code="nah"
+		iso_639_2T_code="nah"
+		name="Nahuatl languages" />
+	<iso_639_entry
+		iso_639_2B_code="nai"
+		iso_639_2T_code="nai"
+		name="North American Indian languages" />
+	<iso_639_entry
+		iso_639_2B_code="nap"
+		iso_639_2T_code="nap"
+		name="Neapolitan" />
+	<iso_639_entry
+		iso_639_2B_code="nau"
+		iso_639_2T_code="nau"
+		iso_639_1_code="na"
+		name="Nauru" />
+	<iso_639_entry
+		iso_639_2B_code="nav"
+		iso_639_2T_code="nav"
+		iso_639_1_code="nv"
+		name="Navajo; Navaho" />
+	<iso_639_entry
+		iso_639_2B_code="nbl"
+		iso_639_2T_code="nbl"
+		iso_639_1_code="nr"
+		name="Ndebele, South; South Ndebele" />
+	<iso_639_entry
+		iso_639_2B_code="nde"
+		iso_639_2T_code="nde"
+		iso_639_1_code="nd"
+		name="Ndebele, North; North Ndebele" />
+	<iso_639_entry
+		iso_639_2B_code="ndo"
+		iso_639_2T_code="ndo"
+		iso_639_1_code="ng"
+		name="Ndonga" />
+	<iso_639_entry
+		iso_639_2B_code="nds"
+		iso_639_2T_code="nds"
+		name="Low German; Low Saxon; German, Low; Saxon, Low" />
+	<iso_639_entry
+		iso_639_2B_code="nep"
+		iso_639_2T_code="nep"
+		iso_639_1_code="ne"
+		name="Nepali" />
+	<iso_639_entry
+		iso_639_2B_code="new"
+		iso_639_2T_code="new"
+		name="Nepal Bhasa; Newari" />
+	<iso_639_entry
+		iso_639_2B_code="nia"
+		iso_639_2T_code="nia"
+		name="Nias" />
+	<iso_639_entry
+		iso_639_2B_code="nic"
+		iso_639_2T_code="nic"
+		name="Niger-Kordofanian languages" />
+	<iso_639_entry
+		iso_639_2B_code="niu"
+		iso_639_2T_code="niu"
+		name="Niuean" />
+	<iso_639_entry
+		iso_639_2B_code="nno"
+		iso_639_2T_code="nno"
+		iso_639_1_code="nn"
+		name="Norwegian Nynorsk; Nynorsk, Norwegian" />
+	<iso_639_entry
+		iso_639_2B_code="nob"
+		iso_639_2T_code="nob"
+		iso_639_1_code="nb"
+		name="Bokmål, Norwegian; Norwegian Bokmål" />
+	<iso_639_entry
+		iso_639_2B_code="nog"
+		iso_639_2T_code="nog"
+		name="Nogai" />
+	<iso_639_entry
+		iso_639_2B_code="non"
+		iso_639_2T_code="non"
+		name="Norse, Old" />
+	<iso_639_entry
+		iso_639_2B_code="nor"
+		iso_639_2T_code="nor"
+		iso_639_1_code="no"
+		name="Norwegian" />
+	<iso_639_entry
+		iso_639_2B_code="nqo"
+		iso_639_2T_code="nqo"
+		name="N'Ko" />
+	<iso_639_entry
+		iso_639_2B_code="nso"
+		iso_639_2T_code="nso"
+		name="Pedi; Sepedi; Northern Sotho" />
+	<iso_639_entry
+		iso_639_2B_code="nub"
+		iso_639_2T_code="nub"
+		name="Nubian languages" />
+	<iso_639_entry
+		iso_639_2B_code="nwc"
+		iso_639_2T_code="nwc"
+		name="Classical Newari; Old Newari; Classical Nepal Bhasa" />
+	<iso_639_entry
+		iso_639_2B_code="nya"
+		iso_639_2T_code="nya"
+		iso_639_1_code="ny"
+		name="Chichewa; Chewa; Nyanja" />
+	<iso_639_entry
+		iso_639_2B_code="nym"
+		iso_639_2T_code="nym"
+		name="Nyamwezi" />
+	<iso_639_entry
+		iso_639_2B_code="nyn"
+		iso_639_2T_code="nyn"
+		name="Nyankole" />
+	<iso_639_entry
+		iso_639_2B_code="nyo"
+		iso_639_2T_code="nyo"
+		name="Nyoro" />
+	<iso_639_entry
+		iso_639_2B_code="nzi"
+		iso_639_2T_code="nzi"
+		name="Nzima" />
+	<iso_639_entry
+		iso_639_2B_code="oci"
+		iso_639_2T_code="oci"
+		iso_639_1_code="oc"
+		name="Occitan (post 1500)" />
+	<iso_639_entry
+		iso_639_2B_code="oji"
+		iso_639_2T_code="oji"
+		iso_639_1_code="oj"
+		name="Ojibwa" />
+	<iso_639_entry
+		iso_639_2B_code="ori"
+		iso_639_2T_code="ori"
+		iso_639_1_code="or"
+		name="Oriya" />
+	<iso_639_entry
+		iso_639_2B_code="orm"
+		iso_639_2T_code="orm"
+		iso_639_1_code="om"
+		name="Oromo" />
+	<iso_639_entry
+		iso_639_2B_code="osa"
+		iso_639_2T_code="osa"
+		name="Osage" />
+	<iso_639_entry
+		iso_639_2B_code="oss"
+		iso_639_2T_code="oss"
+		iso_639_1_code="os"
+		name="Ossetian; Ossetic" />
+	<iso_639_entry
+		iso_639_2B_code="ota"
+		iso_639_2T_code="ota"
+		name="Turkish, Ottoman (1500-1928)" />
+	<iso_639_entry
+		iso_639_2B_code="oto"
+		iso_639_2T_code="oto"
+		name="Otomian languages" />
+	<iso_639_entry
+		iso_639_2B_code="paa"
+		iso_639_2T_code="paa"
+		name="Papuan languages" />
+	<iso_639_entry
+		iso_639_2B_code="pag"
+		iso_639_2T_code="pag"
+		name="Pangasinan" />
+	<iso_639_entry
+		iso_639_2B_code="pal"
+		iso_639_2T_code="pal"
+		name="Pahlavi" />
+	<iso_639_entry
+		iso_639_2B_code="pam"
+		iso_639_2T_code="pam"
+		name="Pampanga; Kapampangan" />
+	<iso_639_entry
+		iso_639_2B_code="pan"
+		iso_639_2T_code="pan"
+		iso_639_1_code="pa"
+		name="Panjabi; Punjabi" />
+	<iso_639_entry
+		iso_639_2B_code="pap"
+		iso_639_2T_code="pap"
+		name="Papiamento" />
+	<iso_639_entry
+		iso_639_2B_code="pau"
+		iso_639_2T_code="pau"
+		name="Palauan" />
+	<iso_639_entry
+		iso_639_2B_code="peo"
+		iso_639_2T_code="peo"
+		name="Persian, Old (ca. 600-400 B.C.)" />
+	<iso_639_entry
+		iso_639_2B_code="per"
+		iso_639_2T_code="fas"
+		iso_639_1_code="fa"
+		name="Persian" />
+	<iso_639_entry
+		iso_639_2B_code="phi"
+		iso_639_2T_code="phi"
+		name="Philippine languages" />
+	<iso_639_entry
+		iso_639_2B_code="phn"
+		iso_639_2T_code="phn"
+		name="Phoenician" />
+	<iso_639_entry
+		iso_639_2B_code="pli"
+		iso_639_2T_code="pli"
+		iso_639_1_code="pi"
+		name="Pali" />
+	<iso_639_entry
+		iso_639_2B_code="pol"
+		iso_639_2T_code="pol"
+		iso_639_1_code="pl"
+		name="Polish" />
+	<iso_639_entry
+		iso_639_2B_code="pon"
+		iso_639_2T_code="pon"
+		name="Pohnpeian" />
+	<iso_639_entry
+		iso_639_2B_code="por"
+		iso_639_2T_code="por"
+		iso_639_1_code="pt"
+		name="Portuguese" />
+	<iso_639_entry
+		iso_639_2B_code="pra"
+		iso_639_2T_code="pra"
+		name="Prakrit languages" />
+	<iso_639_entry
+		iso_639_2B_code="pro"
+		iso_639_2T_code="pro"
+		name="Provençal, Old (to 1500); Occitan, Old (to 1500)" />
+	<iso_639_entry
+		iso_639_2B_code="pus"
+		iso_639_2T_code="pus"
+		iso_639_1_code="ps"
+		name="Pushto; Pashto" />
+	<iso_639_entry
+		iso_639_2B_code="qaa-qtz"
+		iso_639_2T_code="qaa-qtz"
+		name="Reserved for local use" />
+	<iso_639_entry
+		iso_639_2B_code="que"
+		iso_639_2T_code="que"
+		iso_639_1_code="qu"
+		name="Quechua" />
+	<iso_639_entry
+		iso_639_2B_code="raj"
+		iso_639_2T_code="raj"
+		name="Rajasthani" />
+	<iso_639_entry
+		iso_639_2B_code="rap"
+		iso_639_2T_code="rap"
+		name="Rapanui" />
+	<iso_639_entry
+		iso_639_2B_code="rar"
+		iso_639_2T_code="rar"
+		name="Rarotongan; Cook Islands Maori" />
+	<iso_639_entry
+		iso_639_2B_code="roa"
+		iso_639_2T_code="roa"
+		name="Romance languages" />
+	<iso_639_entry
+		iso_639_2B_code="roh"
+		iso_639_2T_code="roh"
+		iso_639_1_code="rm"
+		name="Romansh" />
+	<iso_639_entry
+		iso_639_2B_code="rom"
+		iso_639_2T_code="rom"
+		name="Romany" />
+	<iso_639_entry
+		iso_639_2B_code="rum"
+		iso_639_2T_code="ron"
+		iso_639_1_code="ro"
+		name="Romanian" />
+	<iso_639_entry
+		iso_639_2B_code="run"
+		iso_639_2T_code="run"
+		iso_639_1_code="rn"
+		name="Rundi" />
+	<iso_639_entry
+		iso_639_2B_code="rup"
+		iso_639_2T_code="rup"
+		name="Aromanian; Arumanian; Macedo-Romanian" />
+	<iso_639_entry
+		iso_639_2B_code="rus"
+		iso_639_2T_code="rus"
+		iso_639_1_code="ru"
+		name="Russian" />
+	<iso_639_entry
+		iso_639_2B_code="sad"
+		iso_639_2T_code="sad"
+		name="Sandawe" />
+	<iso_639_entry
+		iso_639_2B_code="sag"
+		iso_639_2T_code="sag"
+		iso_639_1_code="sg"
+		name="Sango" />
+	<iso_639_entry
+		iso_639_2B_code="sah"
+		iso_639_2T_code="sah"
+		name="Yakut" />
+	<iso_639_entry
+		iso_639_2B_code="sai"
+		iso_639_2T_code="sai"
+		name="South American Indian languages" />
+	<iso_639_entry
+		iso_639_2B_code="sal"
+		iso_639_2T_code="sal"
+		name="Salishan languages" />
+	<iso_639_entry
+		iso_639_2B_code="sam"
+		iso_639_2T_code="sam"
+		name="Samaritan Aramaic" />
+	<iso_639_entry
+		iso_639_2B_code="san"
+		iso_639_2T_code="san"
+		iso_639_1_code="sa"
+		name="Sanskrit" />
+	<iso_639_entry
+		iso_639_2B_code="sas"
+		iso_639_2T_code="sas"
+		name="Sasak" />
+	<iso_639_entry
+		iso_639_2B_code="sat"
+		iso_639_2T_code="sat"
+		name="Santali" />
+	<iso_639_entry
+		iso_639_2B_code="scn"
+		iso_639_2T_code="scn"
+		name="Sicilian" />
+	<iso_639_entry
+		iso_639_2B_code="sco"
+		iso_639_2T_code="sco"
+		name="Scots" />
+	<iso_639_entry
+		iso_639_2B_code="sel"
+		iso_639_2T_code="sel"
+		name="Selkup" />
+	<iso_639_entry
+		iso_639_2B_code="sem"
+		iso_639_2T_code="sem"
+		name="Semitic languages" />
+	<iso_639_entry
+		iso_639_2B_code="sga"
+		iso_639_2T_code="sga"
+		name="Irish, Old (to 900)" />
+	<iso_639_entry
+		iso_639_2B_code="sgn"
+		iso_639_2T_code="sgn"
+		name="Sign Languages" />
+	<iso_639_entry
+		iso_639_2B_code="shn"
+		iso_639_2T_code="shn"
+		name="Shan" />
+	<iso_639_entry
+		iso_639_2B_code="sid"
+		iso_639_2T_code="sid"
+		name="Sidamo" />
+	<iso_639_entry
+		iso_639_2B_code="sin"
+		iso_639_2T_code="sin"
+		iso_639_1_code="si"
+		name="Sinhala; Sinhalese" />
+	<iso_639_entry
+		iso_639_2B_code="sio"
+		iso_639_2T_code="sio"
+		name="Siouan languages" />
+	<iso_639_entry
+		iso_639_2B_code="sit"
+		iso_639_2T_code="sit"
+		name="Sino-Tibetan languages" />
+	<iso_639_entry
+		iso_639_2B_code="sla"
+		iso_639_2T_code="sla"
+		name="Slavic languages" />
+	<iso_639_entry
+		iso_639_2B_code="slo"
+		iso_639_2T_code="slk"
+		iso_639_1_code="sk"
+		name="Slovak" />
+	<iso_639_entry
+		iso_639_2B_code="slv"
+		iso_639_2T_code="slv"
+		iso_639_1_code="sl"
+		name="Slovenian" />
+	<iso_639_entry
+		iso_639_2B_code="sma"
+		iso_639_2T_code="sma"
+		name="Southern Sami" />
+	<iso_639_entry
+		iso_639_2B_code="sme"
+		iso_639_2T_code="sme"
+		iso_639_1_code="se"
+		name="Northern Sami" />
+	<iso_639_entry
+		iso_639_2B_code="smi"
+		iso_639_2T_code="smi"
+		name="Sami languages" />
+	<iso_639_entry
+		iso_639_2B_code="smj"
+		iso_639_2T_code="smj"
+		name="Lule Sami" />
+	<iso_639_entry
+		iso_639_2B_code="smn"
+		iso_639_2T_code="smn"
+		name="Inari Sami" />
+	<iso_639_entry
+		iso_639_2B_code="smo"
+		iso_639_2T_code="smo"
+		iso_639_1_code="sm"
+		name="Samoan" />
+	<iso_639_entry
+		iso_639_2B_code="sms"
+		iso_639_2T_code="sms"
+		name="Skolt Sami" />
+	<iso_639_entry
+		iso_639_2B_code="sna"
+		iso_639_2T_code="sna"
+		iso_639_1_code="sn"
+		name="Shona" />
+	<iso_639_entry
+		iso_639_2B_code="snd"
+		iso_639_2T_code="snd"
+		iso_639_1_code="sd"
+		name="Sindhi" />
+	<iso_639_entry
+		iso_639_2B_code="snk"
+		iso_639_2T_code="snk"
+		name="Soninke" />
+	<iso_639_entry
+		iso_639_2B_code="sog"
+		iso_639_2T_code="sog"
+		name="Sogdian" />
+	<iso_639_entry
+		iso_639_2B_code="som"
+		iso_639_2T_code="som"
+		iso_639_1_code="so"
+		name="Somali" />
+	<iso_639_entry
+		iso_639_2B_code="son"
+		iso_639_2T_code="son"
+		name="Songhai languages" />
+	<iso_639_entry
+		iso_639_2B_code="sot"
+		iso_639_2T_code="sot"
+		iso_639_1_code="st"
+		name="Sotho, Southern" />
+	<iso_639_entry
+		iso_639_2B_code="spa"
+		iso_639_2T_code="spa"
+		iso_639_1_code="es"
+		name="Spanish; Castilian" />
+	<iso_639_entry
+		iso_639_2B_code="srd"
+		iso_639_2T_code="srd"
+		iso_639_1_code="sc"
+		name="Sardinian" />
+	<iso_639_entry
+		iso_639_2B_code="srn"
+		iso_639_2T_code="srn"
+		name="Sranan Tongo" />
+	<iso_639_entry
+		iso_639_2B_code="srp"
+		iso_639_2T_code="srp"
+		iso_639_1_code="sr"
+		name="Serbian" />
+	<iso_639_entry
+		iso_639_2B_code="srr"
+		iso_639_2T_code="srr"
+		name="Serer" />
+	<iso_639_entry
+		iso_639_2B_code="ssa"
+		iso_639_2T_code="ssa"
+		name="Nilo-Saharan languages" />
+	<iso_639_entry
+		iso_639_2B_code="ssw"
+		iso_639_2T_code="ssw"
+		iso_639_1_code="ss"
+		name="Swati" />
+	<iso_639_entry
+		iso_639_2B_code="suk"
+		iso_639_2T_code="suk"
+		name="Sukuma" />
+	<iso_639_entry
+		iso_639_2B_code="sun"
+		iso_639_2T_code="sun"
+		iso_639_1_code="su"
+		name="Sundanese" />
+	<iso_639_entry
+		iso_639_2B_code="sus"
+		iso_639_2T_code="sus"
+		name="Susu" />
+	<iso_639_entry
+		iso_639_2B_code="sux"
+		iso_639_2T_code="sux"
+		name="Sumerian" />
+	<iso_639_entry
+		iso_639_2B_code="swa"
+		iso_639_2T_code="swa"
+		iso_639_1_code="sw"
+		name="Swahili" />
+	<iso_639_entry
+		iso_639_2B_code="swe"
+		iso_639_2T_code="swe"
+		iso_639_1_code="sv"
+		name="Swedish" />
+	<iso_639_entry
+		iso_639_2B_code="syc"
+		iso_639_2T_code="syc"
+		name="Classical Syriac" />
+	<iso_639_entry
+		iso_639_2B_code="syr"
+		iso_639_2T_code="syr"
+		name="Syriac" />
+	<iso_639_entry
+		iso_639_2B_code="tah"
+		iso_639_2T_code="tah"
+		iso_639_1_code="ty"
+		name="Tahitian" />
+	<iso_639_entry
+		iso_639_2B_code="tai"
+		iso_639_2T_code="tai"
+		name="Tai languages" />
+	<iso_639_entry
+		iso_639_2B_code="tam"
+		iso_639_2T_code="tam"
+		iso_639_1_code="ta"
+		name="Tamil" />
+	<iso_639_entry
+		iso_639_2B_code="tat"
+		iso_639_2T_code="tat"
+		iso_639_1_code="tt"
+		name="Tatar" />
+	<iso_639_entry
+		iso_639_2B_code="tel"
+		iso_639_2T_code="tel"
+		iso_639_1_code="te"
+		name="Telugu" />
+	<iso_639_entry
+		iso_639_2B_code="tem"
+		iso_639_2T_code="tem"
+		name="Timne" />
+	<iso_639_entry
+		iso_639_2B_code="ter"
+		iso_639_2T_code="ter"
+		name="Tereno" />
+	<iso_639_entry
+		iso_639_2B_code="tet"
+		iso_639_2T_code="tet"
+		name="Tetum" />
+	<iso_639_entry
+		iso_639_2B_code="tgk"
+		iso_639_2T_code="tgk"
+		iso_639_1_code="tg"
+		name="Tajik" />
+	<iso_639_entry
+		iso_639_2B_code="tgl"
+		iso_639_2T_code="tgl"
+		iso_639_1_code="tl"
+		name="Tagalog" />
+	<iso_639_entry
+		iso_639_2B_code="tha"
+		iso_639_2T_code="tha"
+		iso_639_1_code="th"
+		name="Thai" />
+	<iso_639_entry
+		iso_639_2B_code="tib"
+		iso_639_2T_code="bod"
+		iso_639_1_code="bo"
+		name="Tibetan" />
+	<iso_639_entry
+		iso_639_2B_code="tig"
+		iso_639_2T_code="tig"
+		name="Tigre" />
+	<iso_639_entry
+		iso_639_2B_code="tir"
+		iso_639_2T_code="tir"
+		iso_639_1_code="ti"
+		name="Tigrinya" />
+	<iso_639_entry
+		iso_639_2B_code="tiv"
+		iso_639_2T_code="tiv"
+		name="Tiv" />
+	<iso_639_entry
+		iso_639_2B_code="tkl"
+		iso_639_2T_code="tkl"
+		name="Tokelau" />
+	<iso_639_entry
+		iso_639_2B_code="tlh"
+		iso_639_2T_code="tlh"
+		name="Klingon; tlhIngan-Hol" />
+	<iso_639_entry
+		iso_639_2B_code="tli"
+		iso_639_2T_code="tli"
+		name="Tlingit" />
+	<iso_639_entry
+		iso_639_2B_code="tmh"
+		iso_639_2T_code="tmh"
+		name="Tamashek" />
+	<iso_639_entry
+		iso_639_2B_code="tog"
+		iso_639_2T_code="tog"
+		name="Tonga (Nyasa)" />
+	<iso_639_entry
+		iso_639_2B_code="ton"
+		iso_639_2T_code="ton"
+		iso_639_1_code="to"
+		name="Tonga (Tonga Islands)" />
+	<iso_639_entry
+		iso_639_2B_code="tpi"
+		iso_639_2T_code="tpi"
+		name="Tok Pisin" />
+	<iso_639_entry
+		iso_639_2B_code="tsi"
+		iso_639_2T_code="tsi"
+		name="Tsimshian" />
+	<iso_639_entry
+		iso_639_2B_code="tsn"
+		iso_639_2T_code="tsn"
+		iso_639_1_code="tn"
+		name="Tswana" />
+	<iso_639_entry
+		iso_639_2B_code="tso"
+		iso_639_2T_code="tso"
+		iso_639_1_code="ts"
+		name="Tsonga" />
+	<iso_639_entry
+		iso_639_2B_code="tuk"
+		iso_639_2T_code="tuk"
+		iso_639_1_code="tk"
+		name="Turkmen" />
+	<iso_639_entry
+		iso_639_2B_code="tum"
+		iso_639_2T_code="tum"
+		name="Tumbuka" />
+	<iso_639_entry
+		iso_639_2B_code="tup"
+		iso_639_2T_code="tup"
+		name="Tupi languages" />
+	<iso_639_entry
+		iso_639_2B_code="tur"
+		iso_639_2T_code="tur"
+		iso_639_1_code="tr"
+		name="Turkish" />
+	<iso_639_entry
+		iso_639_2B_code="tut"
+		iso_639_2T_code="tut"
+		name="Altaic languages" />
+	<iso_639_entry
+		iso_639_2B_code="tvl"
+		iso_639_2T_code="tvl"
+		name="Tuvalu" />
+	<iso_639_entry
+		iso_639_2B_code="twi"
+		iso_639_2T_code="twi"
+		iso_639_1_code="tw"
+		name="Twi" />
+	<iso_639_entry
+		iso_639_2B_code="tyv"
+		iso_639_2T_code="tyv"
+		name="Tuvinian" />
+	<iso_639_entry
+		iso_639_2B_code="udm"
+		iso_639_2T_code="udm"
+		name="Udmurt" />
+	<iso_639_entry
+		iso_639_2B_code="uga"
+		iso_639_2T_code="uga"
+		name="Ugaritic" />
+	<iso_639_entry
+		iso_639_2B_code="uig"
+		iso_639_2T_code="uig"
+		iso_639_1_code="ug"
+		name="Uighur; Uyghur" />
+	<iso_639_entry
+		iso_639_2B_code="ukr"
+		iso_639_2T_code="ukr"
+		iso_639_1_code="uk"
+		name="Ukrainian" />
+	<iso_639_entry
+		iso_639_2B_code="umb"
+		iso_639_2T_code="umb"
+		name="Umbundu" />
+	<iso_639_entry
+		iso_639_2B_code="und"
+		iso_639_2T_code="und"
+		name="Undetermined" />
+	<iso_639_entry
+		iso_639_2B_code="urd"
+		iso_639_2T_code="urd"
+		iso_639_1_code="ur"
+		name="Urdu" />
+	<iso_639_entry
+		iso_639_2B_code="uzb"
+		iso_639_2T_code="uzb"
+		iso_639_1_code="uz"
+		name="Uzbek" />
+	<iso_639_entry
+		iso_639_2B_code="vai"
+		iso_639_2T_code="vai"
+		name="Vai" />
+	<iso_639_entry
+		iso_639_2B_code="ven"
+		iso_639_2T_code="ven"
+		iso_639_1_code="ve"
+		name="Venda" />
+	<iso_639_entry
+		iso_639_2B_code="vie"
+		iso_639_2T_code="vie"
+		iso_639_1_code="vi"
+		name="Vietnamese" />
+	<iso_639_entry
+		iso_639_2B_code="vol"
+		iso_639_2T_code="vol"
+		iso_639_1_code="vo"
+		name="Volapük" />
+	<iso_639_entry
+		iso_639_2B_code="vot"
+		iso_639_2T_code="vot"
+		name="Votic" />
+	<iso_639_entry
+		iso_639_2B_code="wak"
+		iso_639_2T_code="wak"
+		name="Wakashan languages" />
+	<iso_639_entry
+		iso_639_2B_code="wal"
+		iso_639_2T_code="wal"
+		name="Wolaitta; Wolaytta" />
+	<iso_639_entry
+		iso_639_2B_code="war"
+		iso_639_2T_code="war"
+		name="Waray" />
+	<iso_639_entry
+		iso_639_2B_code="was"
+		iso_639_2T_code="was"
+		name="Washo" />
+	<iso_639_entry
+		iso_639_2B_code="wel"
+		iso_639_2T_code="cym"
+		iso_639_1_code="cy"
+		name="Welsh" />
+	<iso_639_entry
+		iso_639_2B_code="wen"
+		iso_639_2T_code="wen"
+		name="Sorbian languages" />
+	<iso_639_entry
+		iso_639_2B_code="wln"
+		iso_639_2T_code="wln"
+		iso_639_1_code="wa"
+		name="Walloon" />
+	<iso_639_entry
+		iso_639_2B_code="wol"
+		iso_639_2T_code="wol"
+		iso_639_1_code="wo"
+		name="Wolof" />
+	<iso_639_entry
+		iso_639_2B_code="xal"
+		iso_639_2T_code="xal"
+		name="Kalmyk; Oirat" />
+	<iso_639_entry
+		iso_639_2B_code="xho"
+		iso_639_2T_code="xho"
+		iso_639_1_code="xh"
+		name="Xhosa" />
+	<iso_639_entry
+		iso_639_2B_code="yao"
+		iso_639_2T_code="yao"
+		name="Yao" />
+	<iso_639_entry
+		iso_639_2B_code="yap"
+		iso_639_2T_code="yap"
+		name="Yapese" />
+	<iso_639_entry
+		iso_639_2B_code="yid"
+		iso_639_2T_code="yid"
+		iso_639_1_code="yi"
+		name="Yiddish" />
+	<iso_639_entry
+		iso_639_2B_code="yor"
+		iso_639_2T_code="yor"
+		iso_639_1_code="yo"
+		name="Yoruba" />
+	<iso_639_entry
+		iso_639_2B_code="ypk"
+		iso_639_2T_code="ypk"
+		name="Yupik languages" />
+	<iso_639_entry
+		iso_639_2B_code="zap"
+		iso_639_2T_code="zap"
+		name="Zapotec" />
+	<iso_639_entry
+		iso_639_2B_code="zbl"
+		iso_639_2T_code="zbl"
+		name="Blissymbols; Blissymbolics; Bliss" />
+	<iso_639_entry
+		iso_639_2B_code="zen"
+		iso_639_2T_code="zen"
+		name="Zenaga" />
+	<iso_639_entry
+		iso_639_2B_code="zha"
+		iso_639_2T_code="zha"
+		iso_639_1_code="za"
+		name="Zhuang; Chuang" />
+	<iso_639_entry
+		iso_639_2B_code="znd"
+		iso_639_2T_code="znd"
+		name="Zande languages" />
+	<iso_639_entry
+		iso_639_2B_code="zul"
+		iso_639_2T_code="zul"
+		iso_639_1_code="zu"
+		name="Zulu" />
+	<iso_639_entry
+		iso_639_2B_code="zun"
+		iso_639_2T_code="zun"
+		name="Zuni" />
+	<iso_639_entry
+		iso_639_2B_code="zxx"
+		iso_639_2T_code="zxx"
+		name="No linguistic content; Not applicable" />
+	<iso_639_entry
+		iso_639_2B_code="zza"
+		iso_639_2T_code="zza"
+		name="Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki" />
+</iso_639_entries>
lass="w"> char *text, int len, gsize *bytes_written) { unsigned int idx; unsigned char *res, *output; static const unsigned short lowtable[] = /* 74 byte table for 80-a4 */ { /* compressed utf-8 table: if the first byte's 0x20 bit is set, it indicates a 2-byte utf-8 sequence, otherwise prepend a 0xe2. */ 0x82ac, /* 80 Euro. CP1252 from here on... */ 0xe281, /* 81 NA */ 0x809a, /* 82 */ 0xe692, /* 83 */ 0x809e, /* 84 */ 0x80a6, /* 85 */ 0x80a0, /* 86 */ 0x80a1, /* 87 */ 0xeb86, /* 88 */ 0x80b0, /* 89 */ 0xe5a0, /* 8a */ 0x80b9, /* 8b */ 0xe592, /* 8c */ 0xe28d, /* 8d NA */ 0xe5bd, /* 8e */ 0xe28f, /* 8f NA */ 0xe290, /* 90 NA */ 0x8098, /* 91 */ 0x8099, /* 92 */ 0x809c, /* 93 */ 0x809d, /* 94 */ 0x80a2, /* 95 */ 0x8093, /* 96 */ 0x8094, /* 97 */ 0xeb9c, /* 98 */ 0x84a2, /* 99 */ 0xe5a1, /* 9a */ 0x80ba, /* 9b */ 0xe593, /* 9c */ 0xe29d, /* 9d NA */ 0xe5be, /* 9e */ 0xe5b8, /* 9f */ 0xe2a0, /* a0 */ 0xe2a1, /* a1 */ 0xe2a2, /* a2 */ 0xe2a3, /* a3 */ 0x82ac /* a4 ISO-8859-15 Euro. */ }; if (len == -1) len = strlen (text); /* worst case scenario: every byte turns into 3 bytes */ res = output = g_malloc ((len * 3) + 1); if (!output) return NULL; while (len) { if (G_LIKELY (*text < 0x80)) { *output = *text; /* ascii maps directly */ } else if (*text <= 0xa4) /* 80-a4 use a lookup table */ { idx = *text - 0x80; if (lowtable[idx] & 0x2000) { *output++ = (lowtable[idx] >> 8) & 0xdf; /* 2 byte utf-8 */ *output = lowtable[idx] & 0xff; } else { *output++ = 0xe2; /* 3 byte utf-8 */ *output++ = (lowtable[idx] >> 8) & 0xff; *output = lowtable[idx] & 0xff; } } else if (*text < 0xc0) { *output++ = 0xc2; *output = *text; } else { *output++ = 0xc3; *output = *text - 0x40; } output++; text++; len--; } *output = 0; /* terminate */ *bytes_written = output - res; return res; } #ifdef WIN32 /* replace characters outside of the Basic Multilingual Plane with * replacement characters (0xFFFD) */ #if 0 char * text_replace_non_bmp (char *utf8_input, int input_length, glong *output_length) { gunichar *ucs4_text; gunichar suspect; gchar *utf8_text; glong ucs4_length; glong index; ucs4_text = g_utf8_to_ucs4_fast (utf8_input, input_length, &ucs4_length); /* replace anything not in the Basic Multilingual Plane * (code points above 0xFFFF) with the replacement * character */ for (index = 0; index < ucs4_length; index++) { suspect = ucs4_text[index]; if ((suspect >= 0x1D173 && suspect <= 0x1D17A) || (suspect >= 0xE0001 && suspect <= 0xE007F)) { ucs4_text[index] = 0xFFFD; /* replacement character */ } } utf8_text = g_ucs4_to_utf8 ( ucs4_text, ucs4_length, NULL, output_length, NULL ); g_free (ucs4_text); return utf8_text; } #endif void text_replace_non_bmp2 (char *utf8_input) { char *tmp = utf8_input, *next; gunichar suspect; while (tmp != NULL && *tmp) { next = g_utf8_next_char(tmp); suspect = g_utf8_get_char_validated(tmp, next - tmp); if ((suspect >= 0x1D173 && suspect <= 0x1D17A) || (suspect >= 0xE0001 && suspect <= 0xE007F)) { /* 0xFFFD - replacement character */ *tmp = 0xEF; *(++tmp) = 0xBF; *(++tmp) = 0xBD; *(++tmp) = 0x1A; /* ASCII Sub to fill the 4th non-BMP byte */ } tmp = next; } } #endif char * text_validate (char **text, int *len) { char *utf; gsize utf_len; /* valid utf8? */ if (g_utf8_validate (*text, *len, 0)) return NULL; #ifdef WIN32 if (GetACP () == 1252) /* our routine is better than iconv's 1252 */ #else if (prefs.utf8_locale) #endif /* fallback to iso-8859-1 */ utf = iso_8859_1_to_utf8 (*text, *len, &utf_len); else { /* fallback to locale */ utf = g_locale_to_utf8 (*text, *len, 0, &utf_len, NULL); if (!utf) utf = iso_8859_1_to_utf8 (*text, *len, &utf_len); } if (!utf) { *text = g_strdup ("%INVALID%"); *len = 9; } else { *text = utf; *len = utf_len; } return utf; } void PrintText (session *sess, char *text) { char *conv; if (!sess) { if (!sess_list) return; sess = (session *) sess_list->data; } /* make sure it's valid utf8 */ if (text[0] == 0) { text = "\n"; conv = NULL; } else { int len = -1; conv = text_validate ((char **)&text, &len); } log_write (sess, text); scrollback_save (sess, text); fe_print_text (sess, text, 0); if (conv) g_free (conv); } void PrintTextf (session *sess, char *format, ...) { va_list args; char *buf; va_start (args, format); buf = g_strdup_vprintf (format, args); va_end (args); PrintText (sess, buf); g_free (buf); } /* Print Events stuff here --AGL */ /* Consider the following a NOTES file: The main upshot of this is: * Plugins and Perl scripts (when I get round to signaling perl.c) can intercept text events and do what they like * The default text engine can be config'ed By default it should appear *exactly* the same (I'm working hard not to change the default style) but if you go into Settings->Edit Event Texts you can change the text's. The format is thus: The normal %Cx (color) and %B (bold) etc work $x is replaced with the data in var x (e.g. $1 is often the nick) $axxx is replace with a single byte of value xxx (in base 10) AGL (990507) */ /* These lists are thus: pntevts_text[] are the strings the user sees (WITH %x etc) pntevts[] are the data strings with \000 etc */ /* To add a new event: Think up a name (like "Join") Make up a pevt_name_help struct Add an entry to textevents.in Type: make textevents */ /* Internals: On startup ~/.xchat/printevents.conf is loaded if it doesn't exist the defaults are loaded. Any missing events are filled from defaults. Each event is parsed by pevt_build_string and a binary output is produced which looks like: (byte) value: 0 = { (int) numbers of bytes (char []) that number of byte to be memcpy'ed into the buffer } 1 = (byte) number of varable to insert 2 = end of buffer Each XP_TE_* signal is hard coded to call text_emit which calls display_event which decodes the data This means that this system *should be faster* than snprintf because it always 'knows' that format of the string (basically is preparses much of the work) --AGL */ char *pntevts_text[NUM_XP]; char *pntevts[NUM_XP]; #define pevt_generic_none_help NULL static char * const pevt_genmsg_help[] = { N_("Left message"), N_("Right message"), }; #if 0 static char * const pevt_identd_help[] = { N_("IP address"), N_("Username") }; #endif static char * const pevt_join_help[] = { N_("The nick of the joining person"), N_("The channel being joined"), N_("The host of the person"), }; static char * const pevt_chanaction_help[] = { N_("Nickname"), N_("The action"), N_("Mode char"), N_("Identified text"), }; static char * const pevt_chanmsg_help[] = { N_("Nickname"), N_("The text"), N_("Mode char"), N_("Identified text"), }; static char * const pevt_privmsg_help[] = { N_("Nickname"), N_("The message"), N_("Identified text") }; static char * const pevt_capack_help[] = { N_("Server Name"), N_("Acknowledged Capabilities") }; static char * const pevt_caplist_help[] = { N_("Server Name"), N_("Server Capabilities") }; static char * const pevt_capreq_help[] = { N_("Requested Capabilities") }; static char * const pevt_changenick_help[] = { N_("Old nickname"), N_("New nickname"), }; static char * const pevt_newtopic_help[] = { N_("Nick of person who changed the topic"), N_("Topic"), N_("Channel"), }; static char * const pevt_topic_help[] = { N_("Channel"), N_("Topic"), }; static char * const pevt_kick_help[] = { N_("The nickname of the kicker"), N_("The person being kicked"), N_("The channel"), N_("The reason"), }; static char * const pevt_part_help[] = { N_("The nick of the person leaving"), N_("The host of the person"), N_("The channel"), }; static char * const pevt_chandate_help[] = { N_("The channel"), N_("The time"), }; static char * const pevt_topicdate_help[] = { N_("The channel"), N_("The creator"), N_("The time"), }; static char * const pevt_quit_help[] = { N_("Nick"), N_("Reason"), N_("Host"), }; static char * const pevt_pingrep_help[] = { N_("Who it's from"), N_("The time in x.x format (see below)"), }; static char * const pevt_notice_help[] = { N_("Who it's from"), N_("The message"), }; static char * const pevt_channotice_help[] = { N_("Who it's from"), N_("The Channel it's going to"), N_("The message"), }; static char * const pevt_uchangenick_help[] = { N_("Old nickname"), N_("New nickname"), }; static char * const pevt_ukick_help[] = { N_("The person being kicked"), N_("The channel"), N_("The nickname of the kicker"), N_("The reason"), }; static char * const pevt_partreason_help[] = { N_("The nick of the person leaving"), N_("The host of the person"), N_("The channel"), N_("The reason"), }; static char * const pevt_ctcpsnd_help[] = { N_("The sound"), N_("The nick of the person"), N_("The channel"), }; static char * const pevt_ctcpgen_help[] = { N_("The CTCP event"), N_("The nick of the person"), }; static char * const pevt_ctcpgenc_help[] = { N_("The CTCP event"), N_("The nick of the person"), N_("The Channel it's going to"), }; static char * const pevt_chansetkey_help[] = { N_("The nick of the person who set the key"), N_("The key"), }; static char * const pevt_chansetlimit_help[] = { N_("The nick of the person who set the limit"), N_("The limit"), }; static char * const pevt_chanop_help[] = { N_("The nick of the person who did the op'ing"), N_("The nick of the person who has been op'ed"), }; static char * const pevt_chanhop_help[] = { N_("The nick of the person who has been halfop'ed"), N_("The nick of the person who did the halfop'ing"), }; static char * const pevt_chanvoice_help[] = { N_("The nick of the person who did the voice'ing"), N_("The nick of the person who has been voice'ed"), }; static char * const pevt_chanban_help[] = { N_("The nick of the person who did the banning"), N_("The ban mask"), }; static char * const pevt_chanrmkey_help[] = { N_("The nick who removed the key"), }; static char * const pevt_chanrmlimit_help[] = { N_("The nick who removed the limit"), }; static char * const pevt_chandeop_help[] = { N_("The nick of the person of did the deop'ing"), N_("The nick of the person who has been deop'ed"), }; static char * const pevt_chandehop_help[] = { N_("The nick of the person of did the dehalfop'ing"), N_("The nick of the person who has been dehalfop'ed"), }; static char * const pevt_chandevoice_help[] = { N_("The nick of the person of did the devoice'ing"), N_("The nick of the person who has been devoice'ed"), }; static char * const pevt_chanunban_help[] = { N_("The nick of the person of did the unban'ing"), N_("The ban mask"), }; static char * const pevt_chanexempt_help[] = { N_("The nick of the person who did the exempt"), N_("The exempt mask"), }; static char * const pevt_chanrmexempt_help[] = { N_("The nick of the person removed the exempt"), N_("The exempt mask"), }; static char * const pevt_chaninvite_help[] = { N_("The nick of the person who did the invite"), N_("The invite mask"), }; static char * const pevt_chanrminvite_help[] = { N_("The nick of the person removed the invite"), N_("The invite mask"), }; static char * const pevt_chanmodegen_help[] = { N_("The nick of the person setting the mode"), N_("The mode's sign (+/-)"), N_("The mode letter"), N_("The channel it's being set on"), }; static char * const pevt_whois1_help[] = { N_("Nickname"), N_("Username"), N_("Host"), N_("Full name"), }; static char * const pevt_whois2_help[] = { N_("Nickname"), N_("Channel Membership/\"is an IRC operator\""), }; static char * const pevt_whois3_help[] = { N_("Nickname"), N_("Server Information"), }; static char * const pevt_whois4_help[] = { N_("Nickname"), N_("Idle time"), }; static char * const pevt_whois4t_help[] = { N_("Nickname"), N_("Idle time"), N_("Signon time"), }; static char * const pevt_whois5_help[] = { N_("Nickname"), N_("Away reason"), }; static char * const pevt_whois6_help[] = { N_("Nickname"), }; static char * const pevt_whoisid_help[] = { N_("Nickname"), N_("Message"), "Numeric" }; static char * const pevt_whoisauth_help[] = { N_("Nickname"), N_("Message"), N_("Account"), }; static char * const pevt_whoisrealhost_help[] = { N_("Nickname"), N_("Real user@host"), N_("Real IP"), N_("Message"), }; static char * const pevt_generic_channel_help[] = { N_("Channel Name"), }; static char * const pevt_saslauth_help[] = { N_("Username") }; static char * const pevt_saslresponse_help[] = { N_("Server Name"), N_("Raw Numeric or Identifier"), N_("Username"), N_("Message") }; static char * const pevt_servertext_help[] = { N_("Text"), N_("Server Name"), N_("Raw Numeric or Identifier") }; static char * const pevt_sslmessage_help[] = { N_("Text"), N_("Server Name") }; static char * const pevt_invited_help[] = { N_("Channel Name"), N_("Nick of person who invited you"), N_("Server Name"), }; static char * const pevt_usersonchan_help[] = { N_("Channel Name"), N_("Users"), }; static char * const pevt_nickclash_help[] = { N_("Nickname in use"), N_("Nick being tried"), }; static char * const pevt_connfail_help[] = { N_("Error"), }; static char * const pevt_connect_help[] = { N_("Host"), N_("IP"), N_("Port"), }; static char * const pevt_sconnect_help[] = { "PID" }; static char * const pevt_generic_nick_help[] = { N_("Nickname"), N_("Server Name"), N_("Network") }; static char * const pevt_chanmodes_help[] = { N_("Channel Name"), N_("Modes string"), }; static char * const pevt_rawmodes_help[] = { N_("Nickname"), N_("Modes string"), }; static char * const pevt_kill_help[] = { N_("Nickname"), N_("Reason"), }; static char * const pevt_dccchaterr_help[] = { N_("Nickname"), N_("IP address"), N_("Port"), N_("Error"), }; static char * const pevt_dccstall_help[] = { N_("DCC Type"), N_("Filename"), N_("Nickname"), }; static char * const pevt_generic_file_help[] = { N_("Filename"), N_("Error"), }; static char * const pevt_dccrecverr_help[] = { N_("Filename"), N_("Destination filename"), N_("Nickname"), N_("Error"), }; static char * const pevt_dccrecvcomp_help[] = { N_("Filename"), N_("Destination filename"), N_("Nickname"), N_("CPS"), }; static char * const pevt_dccconfail_help[] = { N_("DCC Type"), N_("Nickname"), N_("Error"), }; static char * const pevt_dccchatcon_help[] = { N_("Nickname"), N_("IP address"), }; static char * const pevt_dcccon_help[] = { N_("Nickname"), N_("IP address"), N_("Filename"), }; static char * const pevt_dccsendfail_help[] = { N_("Filename"), N_("Nickname"), N_("Error"), }; static char * const pevt_dccsendcomp_help[] = { N_("Filename"), N_("Nickname"), N_("CPS"), }; static char * const pevt_dccoffer_help[] = { N_("Filename"), N_("Nickname"), N_("Pathname"), }; static char * const pevt_dccfileabort_help[] = { N_("Nickname"), N_("Filename") }; static char * const pevt_dccchatabort_help[] = { N_("Nickname"), }; static char * const pevt_dccresumeoffer_help[] = { N_("Nickname"), N_("Filename"), N_("Position"), }; static char * const pevt_dccsendoffer_help[] = { N_("Nickname"), N_("Filename"), N_("Size"), N_("IP address"), }; static char * const pevt_dccgenericoffer_help[] = { N_("DCC String"), N_("Nickname"), }; static char * const pevt_notifynumber_help[] = { N_("Number of notify items"), }; static char * const pevt_serverlookup_help[] = { N_("Server Name"), }; static char * const pevt_servererror_help[] = { N_("Text"), }; static char * const pevt_foundip_help[] = { N_("IP"), }; static char * const pevt_dccrename_help[] = { N_("Old Filename"), N_("New Filename"), }; static char * const pevt_ctcpsend_help[] = { N_("Receiver"), N_("Message"), }; static char * const pevt_ignoreaddremove_help[] = { N_("Hostmask"), }; static char * const pevt_resolvinguser_help[] = { N_("Nickname"), N_("Hostname"), }; static char * const pevt_malformed_help[] = { N_("Nickname"), N_("The Packet"), }; static char * const pevt_pingtimeout_help[] = { N_("Seconds"), }; static char * const pevt_uinvite_help[] = { N_("Nick of person who have been invited"), N_("Channel Name"), N_("Server Name"), }; static char * const pevt_banlist_help[] = { N_("Channel"), N_("Banmask"), N_("Who set the ban"), N_("Ban time"), }; static char * const pevt_discon_help[] = { N_("Error"), }; #include "textevents.h" static void pevent_load_defaults () { int i; for (i = 0; i < NUM_XP; i++) { if (pntevts_text[i]) free (pntevts_text[i]); /* make-te.c sets this 128 flag (DON'T call gettext() flag) */ if (te[i].num_args & 128) pntevts_text[i] = strdup (te[i].def); else pntevts_text[i] = strdup (_(te[i].def)); } } void pevent_make_pntevts () { int i, m; char out[1024]; for (i = 0; i < NUM_XP; i++) { if (pntevts[i] != NULL) free (pntevts[i]); if (pevt_build_string (pntevts_text[i], &(pntevts[i]), &m) != 0) { snprintf (out, sizeof (out), _("Error parsing event %s.\nLoading default."), te[i].name); fe_message (out, FE_MSG_WARN); free (pntevts_text[i]); /* make-te.c sets this 128 flag (DON'T call gettext() flag) */ if (te[i].num_args & 128) pntevts_text[i] = strdup (te[i].def); else pntevts_text[i] = strdup (_(te[i].def)); if (pevt_build_string (pntevts_text[i], &(pntevts[i]), &m) != 0) { fprintf (stderr, "HexChat CRITICAL *** default event text failed to build!\n"); abort (); } } } } /* Loading happens at 2 levels: 1) File is read into blocks 2) Pe block is parsed and loaded --AGL */ /* Better hope you pass good args.. --AGL */ static void pevent_trigger_load (int *i_penum, char **i_text, char **i_snd) { int penum = *i_penum, len; char *text = *i_text, *snd = *i_snd; if (penum != -1 && text != NULL) { len = strlen (text) + 1; if (pntevts_text[penum]) free (pntevts_text[penum]); pntevts_text[penum] = malloc (len); memcpy (pntevts_text[penum], text, len); } if (text) free (text); if (snd) free (snd); *i_text = NULL; *i_snd = NULL; *i_penum = 0; } static int pevent_find (char *name, int *i_i) { int i = *i_i, j; j = i + 1; while (1) { if (j == NUM_XP) j = 0; if (strcmp (te[j].name, name) == 0) { *i_i = j; return j; } if (j == i) return -1; j++; } } int pevent_load (char *filename) { /* AGL, I've changed this file and pevent_save, could you please take a look at * the changes and possibly modify them to suit you * //David H */ char *buf, *ibuf; int fd, i = 0, pnt = 0; struct stat st; char *text = NULL, *snd = NULL; int penum = 0; char *ofs; if (filename == NULL) fd = hexchat_open_file ("pevents.conf", O_RDONLY, 0, 0); else fd = hexchat_open_file (filename, O_RDONLY, 0, XOF_FULLPATH); if (fd == -1) return 1; if (fstat (fd, &st) != 0) return 1; ibuf = malloc (st.st_size); read (fd, ibuf, st.st_size); close (fd); while (buf_get_line (ibuf, &buf, &pnt, st.st_size)) { if (buf[0] == '#') continue; if (strlen (buf) == 0) continue; ofs = strchr (buf, '='); if (!ofs) continue; *ofs = 0; ofs++; /*if (*ofs == 0) continue;*/ if (strcmp (buf, "event_name") == 0) { if (penum >= 0) pevent_trigger_load (&penum, &text, &snd); penum = pevent_find (ofs, &i); continue; } else if (strcmp (buf, "event_text") == 0) { if (text) free (text); #if 0 /* This allows updating of old strings. We don't use new defaults if the user has customized the strings (.e.g a text theme). Hash of the old default is enough to identify and replace it. This only works in English. */ switch (g_str_hash (ofs)) { case 0x526743a4: /* %C08,02 Hostmask PRIV NOTI CHAN CTCP INVI UNIG %O */ text = strdup (te[XP_TE_IGNOREHEADER].def); break; case 0xe91bc9c2: /* %C08,02 %O */ text = strdup (te[XP_TE_IGNOREFOOTER].def); break; case 0x1fbfdf22: /* -%C10-%C11-%O$tDCC RECV: Cannot open $1 for writing - aborting. */ text = strdup (te[XP_TE_DCCFILEERR].def); break; default: text = strdup (ofs); } #else text = strdup (ofs); #endif continue; }/* else if (strcmp (buf, "event_sound") == 0) { if (snd) free (snd); snd = strdup (ofs); continue; }*/ continue; } pevent_trigger_load (&penum, &text, &snd); free (ibuf); return 0; } static void pevent_check_all_loaded () { int i; for (i = 0; i < NUM_XP; i++) { if (pntevts_text[i] == NULL) { /*printf ("%s\n", te[i].name); snprintf(out, sizeof(out), "The data for event %s failed to load. Reverting to defaults.\nThis may be because a new version of HexChat is loading an old config file.\n\nCheck all print event texts are correct", evtnames[i]); gtkutil_simpledialog(out); */ /* make-te.c sets this 128 flag (DON'T call gettext() flag) */ if (te[i].num_args & 128) pntevts_text[i] = strdup (te[i].def); else pntevts_text[i] = strdup (_(te[i].def)); } } } void load_text_events () { memset (&pntevts_text, 0, sizeof (char *) * (NUM_XP)); memset (&pntevts, 0, sizeof (char *) * (NUM_XP)); if (pevent_load (NULL)) pevent_load_defaults (); pevent_check_all_loaded (); pevent_make_pntevts (); } /* CL: format_event now handles filtering of arguments: 1) if prefs.hex_text_stripcolor_msg is set, filter all style control codes from arguments 2) always strip \010 (ATTR_HIDDEN) from arguments: it is only for use in the format string itself */ #define ARG_FLAG(argn) (1 << (argn)) void format_event (session *sess, int index, char **args, char *o, int sizeofo, unsigned int stripcolor_args) { int len, oi, ii, numargs; char *i, *ar, d, a, done_all = FALSE; i = pntevts[index]; numargs = te[index].num_args & 0x7f; oi = ii = len = d = a = 0; o[0] = 0; if (i == NULL) return; while (done_all == FALSE) { d = i[ii++]; switch (d) { case 0: memcpy (&len, &(i[ii]), sizeof (int)); ii += sizeof (int); if (oi + len > sizeofo) { printf ("Overflow in display_event (%s)\n", i); o[0] = 0; return; } memcpy (&(o[oi]), &(i[ii]), len); oi += len; ii += len; break; case 1: a = i[ii++]; if (a > numargs) { fprintf (stderr, "HexChat DEBUG: display_event: arg > numargs (%d %d %s)\n", a, numargs, i); break; } ar = args[(int) a + 1]; if (ar == NULL) { printf ("arg[%d] is NULL in print event\n", a + 1); } else { if (stripcolor_args & ARG_FLAG(a + 1)) len = strip_color2 (ar, -1, &o[oi], STRIP_ALL); else len = strip_hidden_attribute (ar, &o[oi]); oi += len; } break; case 2: o[oi++] = '\n'; o[oi++] = 0; done_all = TRUE; continue; case 3: /* if (sess->type == SESS_DIALOG) { if (prefs.dialog_indent_nicks) o[oi++] = '\t'; else o[oi++] = ' '; } else {*/ if (prefs.hex_text_indent) o[oi++] = '\t'; else o[oi++] = ' '; /*}*/ break; } } o[oi] = 0; if (*o == '\n') o[0] = 0; } static void display_event (session *sess, int event, char **args, unsigned int stripcolor_args) { char o[4096]; format_event (sess, event, args, o, sizeof (o), stripcolor_args); if (o[0]) PrintText (sess, o); } int pevt_build_string (const char *input, char **output, int *max_arg) { struct pevt_stage1 *s = NULL, *base = NULL, *last = NULL, *next; int clen; char o[4096], d, *obuf, *i; int oi, ii, max = -1, len, x; len = strlen (input); i = malloc (len + 1); memcpy (i, input, len + 1); check_special_chars (i, TRUE); len = strlen (i); clen = oi = ii = 0; for (;;) { if (ii == len) break; d = i[ii++]; if (d != '$') { o[oi++] = d; continue; } if (i[ii] == '$') { o[oi++] = '$'; continue; } if (oi > 0) { s = (struct pevt_stage1 *) malloc (sizeof (struct pevt_stage1)); if (base == NULL) base = s; if (last != NULL) last->next = s; last = s; s->next = NULL; s->data = malloc (oi + sizeof (int) + 1); s->len = oi + sizeof (int) + 1; clen += oi + sizeof (int) + 1; s->data[0] = 0; memcpy (&(s->data[1]), &oi, sizeof (int)); memcpy (&(s->data[1 + sizeof (int)]), o, oi); oi = 0; } if (ii == len) { fe_message ("String ends with a $", FE_MSG_WARN); return 1; } d = i[ii++]; if (d == 'a') { /* Hex value */ x = 0; if (ii == len) goto a_len_error; d = i[ii++]; d -= '0'; x = d * 100; if (ii == len) goto a_len_error; d = i[ii++]; d -= '0'; x += d * 10; if (ii == len) goto a_len_error; d = i[ii++]; d -= '0'; x += d; if (x > 255) goto a_range_error; o[oi++] = x; continue; a_len_error: fe_message ("String ends in $a", FE_MSG_WARN); return 1; a_range_error: fe_message ("$a value is greater than 255", FE_MSG_WARN); return 1; } if (d == 't') { /* Tab - if tabnicks is set then write '\t' else ' ' */ s = (struct pevt_stage1 *) malloc (sizeof (struct pevt_stage1)); if (base == NULL) base = s; if (last != NULL) last->next = s; last = s; s->next = NULL; s->data = malloc (1); s->len = 1; clen += 1; s->data[0] = 3; continue; } if (d < '1' || d > '9') { snprintf (o, sizeof (o), "Error, invalid argument $%c\n", d); fe_message (o, FE_MSG_WARN); return 1; } d -= '0'; if (max < d) max = d; s = (struct pevt_stage1 *) malloc (sizeof (struct pevt_stage1)); if (base == NULL) base = s; if (last != NULL) last->next = s; last = s; s->next = NULL; s->data = malloc (2); s->len = 2; clen += 2; s->data[0] = 1; s->data[1] = d - 1; } if (oi > 0) { s = (struct pevt_stage1 *) malloc (sizeof (struct pevt_stage1)); if (base == NULL) base = s; if (last != NULL) last->next = s; last = s; s->next = NULL; s->data = malloc (oi + sizeof (int) + 1); s->len = oi + sizeof (int) + 1; clen += oi + sizeof (int) + 1; s->data[0] = 0; memcpy (&(s->data[1]), &oi, sizeof (int)); memcpy (&(s->data[1 + sizeof (int)]), o, oi); oi = 0; } s = (struct pevt_stage1 *) malloc (sizeof (struct pevt_stage1)); if (base == NULL) base = s; if (last != NULL) last->next = s; last = s; s->next = NULL; s->data = malloc (1); s->len = 1; clen += 1; s->data[0] = 2; oi = 0; s = base; obuf = malloc (clen); while (s) { next = s->next; memcpy (&obuf[oi], s->data, s->len); oi += s->len; free (s->data); free (s); s = next; } free (i); if (max_arg) *max_arg = max; if (output) *output = obuf; return 0; } /* black n white(0/1) are bad colors for nicks, and we'll use color 2 for us */ /* also light/dark gray (14/15) */ /* 5,7,8 are all shades of yellow which happen to look dman near the same */ static char rcolors[] = { 19, 20, 22, 24, 25, 26, 27, 28, 29 }; static int color_of (char *name) { int i = 0, sum = 0; while (name[i]) sum += name[i++]; sum %= sizeof (rcolors) / sizeof (char); return rcolors[sum]; } /* called by EMIT_SIGNAL macro */ void text_emit (int index, session *sess, char *a, char *b, char *c, char *d) { char *word[PDIWORDS]; int i; unsigned int stripcolor_args = (prefs.hex_text_stripcolor_msg ? 0xFFFFFFFF : 0); char tbuf[NICKLEN + 4]; if (prefs.hex_text_color_nicks && (index == XP_TE_CHANACTION || index == XP_TE_CHANMSG)) { snprintf (tbuf, sizeof (tbuf), "\003%d%s", color_of (a), a); a = tbuf; stripcolor_args &= ~ARG_FLAG(1); /* don't strip color from this argument */ } word[0] = te[index].name; word[1] = (a ? a : "\000"); word[2] = (b ? b : "\000"); word[3] = (c ? c : "\000"); word[4] = (d ? d : "\000"); for (i = 5; i < PDIWORDS; i++) word[i] = "\000"; if (plugin_emit_print (sess, word)) return; /* If a plugin's callback executes "/close", 'sess' may be invalid */ if (!is_session (sess)) return; switch (index) { case XP_TE_JOIN: case XP_TE_PART: case XP_TE_PARTREASON: case XP_TE_QUIT: /* implement ConfMode / Hide Join and Part Messages */ if (chanopt_is_set (prefs.hex_irc_conf_mode, sess->text_hidejoinpart)) return; break; /* ===Private message=== */ case XP_TE_PRIVMSG: case XP_TE_DPRIVMSG: case XP_TE_PRIVACTION: case XP_TE_DPRIVACTION: if (chanopt_is_set_a (prefs.hex_input_beep_priv, sess->alert_beep) && (!prefs.hex_away_omit_alerts || !sess->server->is_away)) sound_beep (sess); if (chanopt_is_set_a (prefs.hex_input_flash_priv, sess->alert_taskbar) && (!prefs.hex_away_omit_alerts || !sess->server->is_away)) fe_flash_window (sess); /* why is this one different? because of plugin-tray.c's hooks! ugly */ if (sess->alert_tray == SET_ON) fe_tray_set_icon (FE_ICON_MESSAGE); break; /* ===Highlighted message=== */ case XP_TE_HCHANACTION: case XP_TE_HCHANMSG: if (chanopt_is_set_a (prefs.hex_input_beep_hilight, sess->alert_beep) && (!prefs.hex_away_omit_alerts || !sess->server->is_away)) sound_beep (sess); if (chanopt_is_set_a (prefs.hex_input_flash_hilight, sess->alert_taskbar) && (!prefs.hex_away_omit_alerts || !sess->server->is_away)) fe_flash_window (sess); if (sess->alert_tray == SET_ON) fe_tray_set_icon (FE_ICON_MESSAGE); break; /* ===Channel message=== */ case XP_TE_CHANACTION: case XP_TE_CHANMSG: if (chanopt_is_set_a (prefs.hex_input_beep_chans, sess->alert_beep) && (!prefs.hex_away_omit_alerts || !sess->server->is_away)) sound_beep (sess); if (chanopt_is_set_a (prefs.hex_input_flash_chans, sess->alert_taskbar) && (!prefs.hex_away_omit_alerts || !sess->server->is_away)) fe_flash_window (sess); if (sess->alert_tray == SET_ON) fe_tray_set_icon (FE_ICON_MESSAGE); break; } sound_play_event (index); display_event (sess, index, word, stripcolor_args); } char * text_find_format_string (char *name) { int i = 0; i = pevent_find (name, &i); if (i >= 0) return pntevts_text[i]; return NULL; } int text_emit_by_name (char *name, session *sess, char *a, char *b, char *c, char *d) { int i = 0; i = pevent_find (name, &i); if (i >= 0) { text_emit (i, sess, a, b, c, d); return 1; } return 0; } void pevent_save (char *fn) { int fd, i; char buf[1024]; if (!fn) fd = hexchat_open_file ("pevents.conf", O_CREAT | O_TRUNC | O_WRONLY, 0x180, XOF_DOMODE); else fd = hexchat_open_file (fn, O_CREAT | O_TRUNC | O_WRONLY, 0x180, XOF_FULLPATH | XOF_DOMODE); if (fd == -1) { /* fe_message ("Error opening config file\n", FALSE); If we get here when X-Chat is closing the fe-message causes a nice & hard crash so we have to use perror which doesn't rely on GTK */ perror ("Error opening config file\n"); return; } for (i = 0; i < NUM_XP; i++) { write (fd, buf, snprintf (buf, sizeof (buf), "event_name=%s\n", te[i].name)); write (fd, buf, snprintf (buf, sizeof (buf), "event_text=%s\n\n", pntevts_text[i])); } close (fd); } /* =========================== */ /* ========== SOUND ========== */ /* =========================== */ char *sound_files[NUM_XP]; void sound_beep (session *sess) { if (sound_files[XP_TE_BEEP] && sound_files[XP_TE_BEEP][0]) /* user defined beep _file_ */ sound_play_event (XP_TE_BEEP); else /* system beep */ fe_beep (sess); } static char * sound_find_command (void) { /* some sensible unix players. You're bound to have one of them */ static const char * const progs[] = {"aplay", "esdplay", "soxplay", "artsplay", NULL}; char *cmd; int i = 0; if (prefs.hex_sound_command[0]) return g_strdup (prefs.hex_sound_command); while (progs[i]) { cmd = g_find_program_in_path (progs[i]); if (cmd) return cmd; i++; } return NULL; } void sound_play (const char *file, gboolean quiet) { char *buf; char *wavfile; char *cmd; #if 0 LPSTR lpRes; HANDLE hResInfo, hRes; #endif /* the pevents GUI editor triggers this after removing a soundfile */ if (!file[0]) return; #ifdef WIN32 /* check for fullpath */ if (file[0] == '\\' || (((file[0] >= 'A' && file[0] <= 'Z') || (file[0] >= 'a' && file[0] <= 'z')) && file[1] == ':')) #else if (file[0] == '/') #endif { wavfile = g_strdup (file); } else { wavfile = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "%s", prefs.hex_sound_dir, file); } if (g_access (wavfile, R_OK) == 0) { cmd = sound_find_command (); #ifdef WIN32 if (cmd == NULL || strcmp (cmd, "esdplay") == 0) { PlaySound (wavfile, NULL, SND_NODEFAULT|SND_FILENAME|SND_ASYNC); #if 0 /* this would require the wav file to be added to the executable as resource */ hResInfo = FindResource (NULL, file_fs, "WAVE"); if (hResInfo != NULL) { /* load the WAVE resource */ hRes = LoadResource (NULL, hResInfo); if (hRes != NULL) { /* lock the WAVE resource and play it */ lpRes = LockResource(hRes); if (lpRes != NULL) { sndPlaySound (lpRes, SND_MEMORY | SND_NODEFAULT | SND_FILENAME | SND_ASYNC); UnlockResource (hRes); } /* free the WAVE resource */ FreeResource (hRes); } } #endif } else #endif { if (cmd) { buf = g_strdup_printf ("%s \"%s\"", cmd, wavfile); hexchat_exec (buf); g_free (buf); } } if (cmd) g_free (cmd); } else { if (!quiet) { buf = g_strdup_printf (_("Cannot read sound file:\n%s"), wavfile); fe_message (buf, FE_MSG_ERROR); g_free (buf); } } g_free (wavfile); } void sound_play_event (int i) { if (sound_files[i]) sound_play (sound_files[i], FALSE); } static void sound_load_event (char *evt, char *file) { int i = 0; if (file[0] && pevent_find (evt, &i) != -1) { if (sound_files[i]) free (sound_files[i]); sound_files[i] = strdup (file); } } void sound_load () { int fd; char buf[512]; char evt[128]; memset (&sound_files, 0, sizeof (char *) * (NUM_XP)); fd = hexchat_open_file ("sound.conf", O_RDONLY, 0, 0); if (fd == -1) return; evt[0] = 0; while (waitline (fd, buf, sizeof buf, FALSE) != -1) { if (strncmp (buf, "event=", 6) == 0) { safe_strcpy (evt, buf + 6, sizeof (evt)); } else if (strncmp (buf, "sound=", 6) == 0) { if (evt[0] != 0) { sound_load_event (evt, buf + 6); evt[0] = 0; } } } close (fd); } void sound_save () { int fd, i; char buf[512]; fd = hexchat_open_file ("sound.conf", O_CREAT | O_TRUNC | O_WRONLY, 0x180, XOF_DOMODE); if (fd == -1) return; for (i = 0; i < NUM_XP; i++) { if (sound_files[i] && sound_files[i][0]) { write (fd, buf, snprintf (buf, sizeof (buf), "event=%s\n", te[i].name)); write (fd, buf, snprintf (buf, sizeof (buf), "sound=%s\n\n", sound_files[i])); } } close (fd); }