Module:Language/data/ISO 639-3 (dep)/make

require('Module:No globals'); local p = {};

--[=[&#x3c; I S O _ 6 3 9 _ 3 _ E X T R A C T &#x3e;-

Reads a local copy of iso-639-3_Retirements_YYYYMMDD.tab where (YYYYMMDD is the release date). Download that file in zip form from http://www-01.sil.org/iso639-3/download.asp (use the UTF-8 zip)

useful lines in the file have the form: &#x3c;id&#x3e;\t&#x3c;Ref_Name&#x3e;\t&#x3c;Ret_Reason&#x3e;\t&#x3c;Change_To&#x3e;\t&#x3c;Ret_Remedy&#x3e;\t&#x3c;Effective&#x3e; where: &#x3c;id&#x3e; is the three-character ISO 639-3 language code &#x3c;Ref_Name&#x3e; is the language 'name' all other parts ignored like this: fri	Western Frisian	C	fry		2007-02-01

]=]

function p.ISO_639_3_dep_extract (frame) local page = mw.title.getCurrentTitle;									-- get a page object for this page local content = page:getContent;											-- get unparsed content local lang_table = {};														-- languages go here

local code; local names;

local file_date = 'File-Date: ' .. frame.args["file-date"];									-- set the file date line from |file-date=

for code, name in mw.ustring.gmatch (content, '%f[%a](%a%a%a)\t([^\t]+)\t[^\n]+\n') do		-- get code and 'forward' name if code then table.insert (lang_table, "[\"" .. code .. "\"] = {\"" .. name .. "\"}");			-- make new table entry elseif not code then table.insert (lang_table, "[\"error\"] = {" .. record .. "}");						-- code should never be nil, but inserting an error entry in the final output can be helpful end end table.sort (lang_table) -- make pretty output return "&#x3c;br /&#x3e;&#x3c;pre&#x3e;-- " .. file_date .. "&#x3c;br /&#x3e;return {&#x3c;br /&#x3e;&#x26;#9;" .. table.concat (lang_table, ',&#x3c;br /&#x3e;&#x26;#9;') .. "&#x3c;br /&#x3e;&#x26;#9;}&#x3c;br /&#x3e;" .. "&#x3c;/pre&#x3e;"; end

return p;