Module:IPA/category documentation/sandbox: Difference between revisions
Appearance
Content deleted Content added
←Created page with 'require('strict') local p = {} local data = mw.loadData('Module:IPA/data') local mLang = require('Module:Lang') function p.main(frame) local args = {} for k, v in pairs(frame:getParent().args) do if v ~= '' then args[k] = v end end local langName = mw.title.getCurrentTitle().text:sub(12, -5) local langCode, regionCode, langData, dialectData local fullLangCode = args.code if not fullLangCode then for code, lang in pairs(data.langs) do if...' |
sync with live |
||
Line 2: | Line 2: | ||
local p = {} |
local p = {} |
||
local |
local lects = mw.loadData('Module:IPA/data/export') |
||
local mLang = require('Module:Lang') |
local mLang = require('Module:Lang') |
||
Line 12: | Line 12: | ||
end |
end |
||
end |
end |
||
local |
local name = mw.title.getCurrentTitle().text:sub(12, -5) |
||
local lect, parent |
|||
local langCode, regionCode, langData, dialectData |
|||
local |
local code = args.code |
||
if not |
if not code then |
||
for |
for _, lect2 in ipairs(lects) do |
||
if |
if (lect2.name or lect2.extName) == name then |
||
lect = lect2 |
|||
parent = lect.parent |
|||
code = lect.code |
|||
break |
break |
||
end |
end |
||
⚫ | |||
if lang.dialects then |
|||
⚫ | |||
for diaCode, dialect in pairs(lang.dialects) do |
|||
if not code then |
|||
⚫ | |||
fullLangCode = code .. '-' .. diaCode |
|||
⚫ | |||
langCode = code |
|||
code = nil |
|||
else |
|||
langData = lang |
|||
⚫ | |||
dialectData = dialect |
|||
⚫ | |||
break |
|||
code = code:sub(1, #code - #regionCode) .. regionCode:upper() |
|||
end |
|||
end |
|||
for _, lect2 in ipairs(lects) do |
|||
if fullLangCode then |
|||
if lect2.code == code then |
|||
lect = lect2 |
|||
parent = lect.parent |
|||
break |
break |
||
end |
end |
||
Line 40: | Line 43: | ||
end |
end |
||
end |
end |
||
⚫ | |||
if not fullLangCode then |
|||
local link = lect and (lect.link or lect.generatedLink or lect.extLink) or |
|||
⚫ | |||
parent and (parent.link or parent.generatedLink or parent.extLink) or |
|||
⚫ | |||
⚫ | |||
fullLangCode = nil |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
if fullLangCode then |
|||
langCode = fullLangCode:gsub('%-.*', '') |
|||
⚫ | |||
⚫ | |||
langData = data.langs[langCode] |
|||
if langData and langData.dialects and regionCode then |
|||
dialectData = langData.dialects[regionCode] |
|||
end |
|||
end |
|||
⚫ | |||
local langLink = dialectData and dialectData.link or |
|||
langData and langData.link or |
|||
⚫ | |||
⚫ | |||
⚫ | |||
local langCat, langCatCount |
local langCat, langCatCount |
||
if |
if code then |
||
langCat = mLang._category_from_tag({ |
langCat = mLang._category_from_tag({ code }) |
||
if langCat: |
if langCat:find('^<span') then |
||
langCat = nil |
langCat = nil |
||
else |
else |
||
Line 70: | Line 58: | ||
end |
end |
||
end |
end |
||
local |
local parentName = args.parent or |
||
parent and (parent.name or parent.extName) or |
|||
mLang._name_from_tag({ |
code and code:find('-') and mLang._name_from_tag({ code:gsub('%-.*', '') }) |
||
if |
if parentName == name or |
||
parentName and parentName:find('^<span') |
|||
then |
then |
||
parentName = nil |
|||
end |
end |
||
mw.log(parentLangName) |
|||
local cat = args.cat ~= 'no' and ( |
local cat = args.cat ~= 'no' and ( |
||
parentName and 'Pages with ' .. parentName .. ' IPA' or |
|||
'Pages with IPA' |
'Pages with IPA' |
||
) |
) |
||
local sortkey = args.sort or |
local sortkey = args.sort or |
||
name:find('^[ %l]+$') and ' ' .. name or |
|||
name |
|||
langName |
|||
local ret = { |
local ret = { |
||
string.format( |
string.format( |
||
'The following pages contain [[International Phonetic Alphabet|IPA]] transcriptions of [[%s|%s]] using %s. This category should never be added manually.', |
'The following pages contain [[International Phonetic Alphabet|IPA]] transcriptions of [[%s|%s]] using %s. This category should never be added manually.', |
||
link, |
|||
name, |
|||
code |
|||
fullLangCode |
|||
and string.format('<code>{{[[Template:IPA|IPA]]|%s|...}}</code>', |
and string.format('<code>{{[[Template:IPA|IPA]]|%s|...}}</code>', code) |
||
or '[[Template:IPA]]' |
or '[[Template:IPA]]' |
||
) |
) |
||
Line 105: | Line 92: | ||
table.insert(ret, string.format( |
table.insert(ret, string.format( |
||
'The %s are a language collective. Please replace the code%s with those of more specific languages where possible.', |
'The %s are a language collective. Please replace the code%s with those of more specific languages where possible.', |
||
name, |
|||
code and ' (' .. code .. ')' or '' |
|||
)) |
)) |
||
end |
end |
||
if not |
if not code and args.container ~= 'yes' then |
||
table.insert(ret, string.format( |
table.insert(ret, string.format( |
||
'<small>Documentation error: language code for "%s" not found.</small>', |
'<small>Documentation error: language code for "%s" not found.</small>', |
||
name |
|||
)) |
)) |
||
end |
end |
Revision as of 13:07, 27 October 2024
![]() | This is the module sandbox page for Module:IPA/category documentation (diff). |
![]() | This module depends on the following other modules: |
Implements Template:IPA language category.
require('strict')
local p = {}
local lects = mw.loadData('Module:IPA/data/export')
local mLang = require('Module:Lang')
function p.main(frame)
local args = {}
for k, v in pairs(frame:getParent().args) do
if v ~= '' then
args[k] = v
end
end
local name = mw.title.getCurrentTitle().text:sub(12, -5)
local lect, parent
local code = args.code
if not code then
for _, lect2 in ipairs(lects) do
if (lect2.name or lect2.extName) == name then
lect = lect2
parent = lect.parent
code = lect.code
break
end
end
end
if not code then
code = mLang._tag_from_name({ name })
if code:find('^<span') then
code = nil
else
local regionCode = code:match('-(.+)')
if regionCode and regionCode:sub(1, 2) ~= 'x-' then
code = code:sub(1, #code - #regionCode) .. regionCode:upper()
end
for _, lect2 in ipairs(lects) do
if lect2.code == code then
lect = lect2
parent = lect.parent
break
end
end
end
end
local isCollective = name:find(' languages$') and true
local link = lect and (lect.link or lect.generatedLink or lect.extLink) or
parent and (parent.link or parent.generatedLink or parent.extLink) or
isCollective and name or
name .. ' language'
local key = lect and lect.key or parent and parent.key
local langCat, langCatCount
if code then
langCat = mLang._category_from_tag({ code })
if langCat:find('^<span') then
langCat = nil
else
langCatCount = mw.site.stats.pagesInCategory(langCat:sub(10), 'pages')
end
end
local parentName = args.parent or
parent and (parent.name or parent.extName) or
code and code:find('-') and mLang._name_from_tag({ code:gsub('%-.*', '') })
if parentName == name or
parentName and parentName:find('^<span')
then
parentName = nil
end
local cat = args.cat ~= 'no' and (
parentName and 'Pages with ' .. parentName .. ' IPA' or
'Pages with IPA'
)
local sortkey = args.sort or
name:find('^[ %l]+$') and ' ' .. name or
name
local ret = {
string.format(
'The following pages contain [[International Phonetic Alphabet|IPA]] transcriptions of [[%s|%s]] using %s. This category should never be added manually.',
link,
name,
code
and string.format('<code>{{[[Template:IPA|IPA]]|%s|...}}</code>', code)
or '[[Template:IPA]]'
)
}
if key then
table.insert(ret, string.format(
'By default, the transcriptions are linked to the [[%s]] key. Transcriptions that do not adhere to the conventions of the key must have <code>|generic=yes</code>.',
key
))
end
if isCollective then
table.insert(ret, string.format(
'The %s are a language collective. Please replace the code%s with those of more specific languages where possible.',
name,
code and ' (' .. code .. ')' or ''
))
end
if not code and args.container ~= 'yes' then
table.insert(ret, string.format(
'<small>Documentation error: language code for "%s" not found.</small>',
name
))
end
if args.content then
table.insert(ret, args.content)
end
if langCat and langCatCount ~= 0 then
table.insert(ret, string.format(
'==See also==\n*[[:%s]] (%s)',
langCat,
mw.language.new('en'):formatNum(langCatCount)
))
end
if cat then
table.insert(ret, string.format('[[Category:%s|%s]]', cat, sortkey))
end
return table.concat(ret, '\n\n')
end
return p