Difference between revisions of "Module:Language/data/ISO 639 name to code/make"
< Module:Language | data | ISO 639 name to code
Jump to navigation
Jump to search
blackwiki>Trappist the monk |
blackwiki>Trappist the monk |
||
| Line 5: | Line 5: | ||
--[[--------------------------< A D D _ L A N G >-------------------------------------------------------------- | --[[--------------------------< A D D _ L A N G >-------------------------------------------------------------- | ||
| − | temp table is a table of tables where the key is the language name and the value is a | + | temp table is a table of tables where the key is the language name and the value is a table listing the ISO 639 |
| − | the ISO 639 codes associated with that language name. | + | codes associated with that language name. |
| − | This function adds language name (as index) and its code (as a table element) | + | This function adds language name (as index) and its code (as a table element) using an appropriate index number. |
| − | lang is the language name from the source data | + | <lang> is the language name from the source data |
| − | code is the associated ISO 639 code from the source data | + | <code> is the associated ISO 639 code from the source data |
| − | part is 1 for ISO 639-1 language names and codes, 2 | + | <part> is 1 for ISO 639-1 language names and codes, 2, 2B, 3, 5. <part> for the override data is prefixed with 'O' |
| − | |||
| − | |||
| − | |||
]] | ]] | ||
local function lang_add (lang, code, part) | local function lang_add (lang, code, part) | ||
| − | part = ({['1']=1, ['2']=2, ['2B']=3, ['3']=4, ['5']=5, })[part]; | + | part = ({ -- convert string <part> to a numeric index |
| + | ['1']=1, ['2']=2, ['2B']=3, ['3']=4, ['5']=5, -- for the base ISO 639 parts | ||
| + | ['O1']=6, ['O2']=7, ['O2B']=8, ['O3']=9, ['O5']=10, -- for the override tables | ||
| + | })[part]; | ||
lang = mw.ustring.lower (lang); -- convert to lowercase for use as table index | lang = mw.ustring.lower (lang); -- convert to lowercase for use as table index | ||
| − | + | ||
if not temp[lang] then -- when no entry for this language | if not temp[lang] then -- when no entry for this language | ||
| − | temp[lang] = {}; -- make a blank entry | + | temp[lang] = {}; -- make a blank entry |
end | end | ||
| Line 31: | Line 31: | ||
'[', -- open the key | '[', -- open the key | ||
part, -- add the index | part, -- add the index | ||
| − | ']=\"', -- close key, add assignment operator and open quote | + | ']=\"', -- close key, add assignment operator and open quote because <code> is a string |
| − | code, -- add | + | code, -- add <code> |
| − | '\"' -- close the | + | '\"' -- close the quote |
})); | })); | ||
end | end | ||
| Line 60: | Line 60: | ||
end | end | ||
end | end | ||
| − | + | ||
part_data = mw.loadData ('Module:Language/data/ISO 639-2'); -- ISO 639-2 language codes / names | part_data = mw.loadData ('Module:Language/data/ISO 639-2'); -- ISO 639-2 language codes / names | ||
for code, v in pairs (part_data) do -- now part 2 | for code, v in pairs (part_data) do -- now part 2 | ||
| Line 67: | Line 67: | ||
end | end | ||
end | end | ||
| − | + | ||
part_data = mw.loadData ('Module:Language/data/ISO 639-2B'); -- ISO 639-2B language codes / names | part_data = mw.loadData ('Module:Language/data/ISO 639-2B'); -- ISO 639-2B language codes / names | ||
for code, v in pairs (part_data) do -- now part 2B | for code, v in pairs (part_data) do -- now part 2B | ||
| Line 74: | Line 74: | ||
end | end | ||
end | end | ||
| − | + | ||
part_data = mw.loadData ('Module:Language/data/iana languages'); -- used only for ISO 639-1 language codes / names'); | part_data = mw.loadData ('Module:Language/data/iana languages'); -- used only for ISO 639-1 language codes / names'); | ||
for code, v in pairs (part_data) do -- now part 1 | for code, v in pairs (part_data) do -- now part 1 | ||
| Line 80: | Line 80: | ||
for _, lang in ipairs (v) do | for _, lang in ipairs (v) do | ||
lang_add (lang, code, '1'); | lang_add (lang, code, '1'); | ||
| + | end | ||
| + | end | ||
| + | end | ||
| + | |||
| + | part_data = mw.loadData ('Module:Language/data/ISO 639 override'); -- has override data for all parts | ||
| + | for _, o_part in ipairs ({'1', '2', '2B', '3', '5'}) do -- for each of the override tables | ||
| + | local o_part_data = part_data['override_' .. o_part]; -- point to override data | ||
| + | o_part = 'O' .. o_part; -- prefix o_part | ||
| + | for code, v in pairs (o_part_data) do -- for each code in the data table | ||
| + | for _, lang in ipairs (v) do -- and for each language name associated with that code | ||
| + | lang_add (lang, code, o_part); -- add | ||
end | end | ||
end | end | ||
| Line 89: | Line 100: | ||
end | end | ||
| − | table.sort (out); | + | table.sort (out); -- sort in language name order |
| − | local key_str = '--[[Key:<br />	[1]=ISO 639-1<br />	[2]=ISO 639-2<br />	[3]=ISO 639-2B<br />	[4]=ISO 639-3<br />	[5]=ISO 639-5<br />]]<br /><br />' | + | |
| + | local key_str = table.concat ({ | ||
| + | '--[[--------------------------< I S O _ 6 3 9 _ N A M E _ T O _ C O D E >--------------------------------------<br /><br />', | ||
| + | 'Key:<br />	', | ||
| + | '[1]=ISO 639-1		[6]=ISO 639-1 override<br />	', | ||
| + | '[2]=ISO 639-2		[7]=ISO 639-2 override<br />	', | ||
| + | '[3]=ISO 639-2B		[8]=ISO 639-2B override<br />	', | ||
| + | '[4]=ISO 639-3		[9]=ISO 639-3 override<br />	', | ||
| + | '[5]=ISO 639-5		[10]=ISO 639-5 override', | ||
| + | '<br />]]<br /><br />' | ||
| + | }) | ||
| + | |||
return table.concat ({'<pre>', key_str, 'return {<br />	', table.concat (out, ',<br />	'), '<br />	}<br /></pre>'}); -- render | return table.concat ({'<pre>', key_str, 'return {<br />	', table.concat (out, ',<br />	'), '<br />	}<br /></pre>'}); -- render | ||
| − | |||
end | end | ||
| + | |||
| + | --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ | ||
| + | ]] | ||
return {iso_639_name_to_code = iso_639_name_to_code} | return {iso_639_name_to_code = iso_639_name_to_code} | ||
Revision as of 22:21, 1 September 2020
| This module depends on the following other modules: |
Usage
{{#invoke:Language/data/ISO 639 name to code/make|iso_639_name_to_code}}
Results are at Module talk:Language/data/ISO 639 name to code/make
require('Module:No globals');
local temp = {};
--[[--------------------------< A D D _ L A N G >--------------------------------------------------------------
temp table is a table of tables where the key is the language name and the value is a table listing the ISO 639
codes associated with that language name.
This function adds language name (as index) and its code (as a table element) using an appropriate index number.
<lang> is the language name from the source data
<code> is the associated ISO 639 code from the source data
<part> is 1 for ISO 639-1 language names and codes, 2, 2B, 3, 5. <part> for the override data is prefixed with 'O'
]]
local function lang_add (lang, code, part)
part = ({ -- convert string <part> to a numeric index
['1']=1, ['2']=2, ['2B']=3, ['3']=4, ['5']=5, -- for the base ISO 639 parts
['O1']=6, ['O2']=7, ['O2B']=8, ['O3']=9, ['O5']=10, -- for the override tables
})[part];
lang = mw.ustring.lower (lang); -- convert to lowercase for use as table index
if not temp[lang] then -- when no entry for this language
temp[lang] = {}; -- make a blank entry
end
table.insert (temp[lang], table.concat ({ -- add the code; codes are added in the order that this function is called in iso_639_name_to_code()
'[', -- open the key
part, -- add the index
']=\"', -- close key, add assignment operator and open quote because <code> is a string
code, -- add <code>
'\"' -- close the quote
}));
end
--[[--------------------------< I S O 6 3 9 _ N A M E _ T O _ C O D E >----------------------------------------
read code-to-name source tables and convert to a name-to-code table.
]]
local function iso_639_name_to_code ()
local out = {};
local part_data = mw.loadData ('Module:Language/data/ISO 639-3'); -- ISO 639-3 language codes / names
for code, v in pairs (part_data) do -- start with part 3 because it has the most codes
for _, lang in ipairs (v) do -- code can have multiple names so for each one
lang_add (lang, code, '3'); -- create and / or add this name / code pair to the output
end
end
part_data = mw.loadData ('Module:Language/data/ISO 639-5'); -- ISO 639-5 language codes / names
for code, v in pairs (part_data) do -- now part 5
for _, lang in ipairs (v) do
lang_add (lang, code, '5');
end
end
part_data = mw.loadData ('Module:Language/data/ISO 639-2'); -- ISO 639-2 language codes / names
for code, v in pairs (part_data) do -- now part 2
for _, lang in ipairs (v) do
lang_add (lang, code, '2');
end
end
part_data = mw.loadData ('Module:Language/data/ISO 639-2B'); -- ISO 639-2B language codes / names
for code, v in pairs (part_data) do -- now part 2B
for _, lang in ipairs (v) do
lang_add (lang, code, '2B');
end
end
part_data = mw.loadData ('Module:Language/data/iana languages'); -- used only for ISO 639-1 language codes / names');
for code, v in pairs (part_data) do -- now part 1
if 2 == #code then -- IANA source data includes a mix of 2- and 3-character codes; ISO 639-1 is the 2-character variety
for _, lang in ipairs (v) do
lang_add (lang, code, '1');
end
end
end
part_data = mw.loadData ('Module:Language/data/ISO 639 override'); -- has override data for all parts
for _, o_part in ipairs ({'1', '2', '2B', '3', '5'}) do -- for each of the override tables
local o_part_data = part_data['override_' .. o_part]; -- point to override data
o_part = 'O' .. o_part; -- prefix o_part
for code, v in pairs (o_part_data) do -- for each code in the data table
for _, lang in ipairs (v) do -- and for each language name associated with that code
lang_add (lang, code, o_part); -- add
end
end
end
for lang, codes in pairs (temp) do
table.sort (codes); -- codes are added in the order that lang_add() is called above; sort to make pretty
table.insert (out, table.concat ({'["', lang, '"] = {', table.concat (codes, ', '), '}'})); -- reformat
end
table.sort (out); -- sort in language name order
local key_str = table.concat ({
'--[[--------------------------< I S O _ 6 3 9 _ N A M E _ T O _ C O D E >--------------------------------------<br /><br />',
'Key:<br />	',
'[1]=ISO 639-1		[6]=ISO 639-1 override<br />	',
'[2]=ISO 639-2		[7]=ISO 639-2 override<br />	',
'[3]=ISO 639-2B		[8]=ISO 639-2B override<br />	',
'[4]=ISO 639-3		[9]=ISO 639-3 override<br />	',
'[5]=ISO 639-5		[10]=ISO 639-5 override',
'<br />]]<br /><br />'
})
return table.concat ({'<pre>', key_str, 'return {<br />	', table.concat (out, ',<br />	'), '<br />	}<br /></pre>'}); -- render
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {iso_639_name_to_code = iso_639_name_to_code}