require('strict');local p = ;
--[=[------------------------< I S O _ 6 3 9 _ 3 _ E X T R A C T >--------------------------------------------- {{#invoke:Language/data/ISO 639-3/make|ISO_639_3_extract|file-date=20170217}} 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: <id>\t<Ref_Name>\t<Ret_Reason>\t<Change_To>\t<Ret_Remedy>\t<Effective> where: <id> is the three-character ISO 639-3 language code <Ref_Name> 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 .. "\"] = "); -- make new table entry elseif not code then table.insert (lang_table, "[\"error\"] = "); -- 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 "
-- " .. file_date .. "<br />return {<br />	" .. table.concat (lang_table, ',<br />	') .. "<br />	}<br />" .. "";end
return p;