ਮੌਡਿਊਲ:Lang
ਇਹ ਮੌਡਿਊਲ ਹੇਠ ਲਿਖੇ ਮੌਡਿਊਲਾਂ ਉੱਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ: |
Logic for {{lang}} and {{lang block}}.
--[=[
Module description
]=]
local p = {} --p stands for package
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local language_name = require('Module:ISO_639').language_name
local make_attribute_string = require('Module:Optional CSS attribute').make_attribute_string
--[=[
Get the appropriate text direction for a language
]=]
function p._text_direction(args)
local rtl_langs = {
'Arabic', -- ar
'Aramaic', -- arc
'Dhivehi', -- dv
'Persian', -- fa
'Persian (India)', -- fa-IN
'Persian (India) (Urdu imla)', -- fa-Aran-IN
'Hausa', -- ha
'Hebrew', -- he, hbo
'Northern Hindko', -- hno
'Khowar', -- khw
'Kashmiri', -- ks
'Kurdish', -- ku
'Moabite', -- obm-hebr
'Western Punjabi', -- pnb
'Pashto', -- ps
'Sindhi', -- sd
'Saraiki', -- skr
'Syriac', -- syc, syr
'Urdu', -- ur
'Yiddish' -- yi
}
local lang = args.lang or ''
local stripped_lang = mw.text.split(lang, '-')[1]
local lang_name = language_name(lang) or language_name(stripped_lang)
-- lang_name can be nil, which will make string.match() blow up
-- TODO: This should probably emit a tracking category.
if lang_name ~= nil then
for k, rtl_lang in pairs(rtl_langs) do
if string.match(lang_name, rtl_lang) then
return 'rtl'
end
end
end
return 'ltr'
end
function p.text_direction(frame)
return p._text_direction(getArgs(frame))
end
--[=[
Implements [[Template:Lang]] and [[Template:Lang block]]
]=]
function p._lang(args)
local lang = args.language or args.lang or args[1] or "en"
local text = args.text or args[2] or ""
local inline = yesno(args.inline or "yes")
local font = args.fonts or args.font
local style = args.style
local class = "wst-lang " .. (args.class or '')
local attr = args.attr or ''
local noclose = yesno(args.noclose or "no")
--[=[
Define the text direction
]=]
local dir = args.direction or args.dir or p._text_direction({['lang'] = lang})
--[=[
Span or div?
]=]
local tag
if inline then
tag = "span"
else
tag = "div"
end
--[=[
Set the attributes.
]=]
local attr_table = {
-- language
make_attribute_string('lang', {['lang'] = lang}),
make_attribute_string('xml:lang', {['xml:lang'] = lang}),
make_attribute_string('dir', {['dir'] = dir}),
-- style
make_attribute_string('style', {['font-family'] = font, ['style'] = style}),
-- class
make_attribute_string('class', {['class'] = class}),
-- other attributes
attr
}
local attr_string = table.concat(attr_table, ' ')
--[=[
Make the tagged content.
]=]
local content = "<" .. tag .. " " .. attr_string .. ">" .. text
if not noclose then
content = content .. "</" .. tag .. ">"
end
return content
end
function p.lang(frame)
local args = getArgs(frame)
return p._lang(args)
end
return p