وحدة:Lang-zh
المظهر
require('strict')
local p = {}
-- المقالات التي تسبق فيها الصينية التقليدية الصينية المبسطة
local t1st = {
["حادثة 228"] = true,
["التقويم الصيني"] = true,
["مركز ليبو (هونغ كونغ)"] = true,
["جمهورية الصين"] = true,
["جمهورية الصين في الألعاب الأولمبية الصيفية 1924"] = true,
["تايوان"] = true,
["جزيرة تايوان"] = true,
["مقاطعة تايوان"] = true,
["وي بويانغ"] = true,
}
-- تسميات كل جزء
local labels = {
["c"] = "بالصينية",
["s"] = "بالصينية المبسطة",
["t"] = "بالصينية التقليدية",
["p"] = "البينيين",
["tp"] = "تنغينغ بينيين",
["w"] = "ويد–جيلز",
["j"] = "يتبنغ",
["cy"] = "بالكانتونية",
["sl"] = "سيدني لاو",
["poj"] = "بي-ويه-جي",
["tl"] = "تاي-لو",
["zhu"] = "زهوين فوهاو",
["l"] = "ت.ح.",
["tr"] = "الترجمة",
}
-- عناوين المقالات المستخدمة كروابط لكل جزء
local wlinks = {
["c"] = "اللغة الصينية",
["s"] = "حروف صينية مبسطة",
["t"] = "حروف صينية تقليدية",
["p"] = "بينيين",
["tp"] = "تنغينغ بينيين",
["w"] = "ويد–جيلز",
["j"] = "يتبنغ",
["cy"] = "رومنة ييل للغة الكانتونية",
["sl"] = "سيدني لاو للترويم",
["poj"] = "بيخوتسي",
["tl"] = "نظام تايوان لوماجي",
["zhu"] = "بوبوموفو",
["l"] = "ترجمة حرفية",
["tr"] = "ترجمة",
}
-- أكواد ISO للغات التي يتم استخدامها
local ISOlang = {
["c"] = "zh",
["t"] = "zh-Hant",
["s"] = "zh-Hans",
["p"] = "zh-Latn",
["tp"] = "zh-Latn-tongyong",
["w"] = "zh-Latn-wadegile",
["j"] = "yue-Latn-jyutping",
["cy"] = "yue-Latn",
["sl"] = "yue-Latn",
["poj"] = "nan-Latn",
["tl"] = "nan-Latn-tailo",
["zhu"] = "zh-Bopo",
}
-- تحديد الأجزاء التي سيتم كتابتها بخط مائل
local italic = {
["p"] = true,
["tp"] = true,
["w"] = true,
["j"] = true,
["cy"] = true,
["sl"] = true,
["poj"] = true,
["tl"] = true,
}
-- تحديد الأجزاء التي سيتم كتابتها بخط علوي
local superscript = {
["w"] = true,
["sl"] = true,
}
-- تصنيفات لأنواع مختلفة من النصوص الصينية
local cats = {
["c"] = "[[تصنيف: مقالات تحوي نصا بالصينية]]",
["s"] = "[[تصنيف:مقالات تحوي نصا بالصينية المبسطة]]",
["t"] = "[[تصنيف:مقالات تحوي نصا بالصينية التقليدية]]",
}
-- الدالة الرئيسية لإظهار النص
function p.Zh(frame)
-- تحميل الوحدة للحصول على المعاملات
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return p._Zh(args)
end
function p._Zh(args)
-- التحقق من وجود الرابط والتسمية وتحديد الخيارات الافتراضية
if args["link"] then args["links"] = args["link"]; end
if args["label"] then args["labels"] = args["label"]; end
local uselinks = args["links"] ~= "no" -- هل يتم إضافة الروابط
local uselabels = args["labels"] ~= "no" -- هل يتم إضافة التسميات
local capfirst = args["scase"] ~= nil
local out = nil -- المصطلح الأساسي الذي يظهر قبل الأقواس
local usebrackets = 0 -- هل يجب أن تكون هناك مصطلحات بين قوسين
local numargs = 0
if args["out"] then
out = args["out"]
usebrackets = 1
end
local t1 = false -- ما إذا كان سيتم تقديم الأحرف التقليدية أولاً
local j1 = false -- ما إذا كان سيتم تقديم الرومنة الكانتونية أولاً
local poj1 = false -- ما إذا كان سيتم تقديم الرومنة الهوكينية أولاً
-- التحقق من الأولوية حسب الاختيارات
if (args["first"]) then
for testChar in mw.ustring.gmatch(args["first"], "%a+") do
if (testChar == "t") then t1 = true end
if (testChar == "j") then j1 = true end
if (testChar == "poj") then poj1 = true end
end
end
if (t1 == false) then
local title = mw.title.getCurrentTitle()
t1 = t1st[title.text] == true
end
-- قائمة ترتيب العرض حسب التفضيلات
local orderlist = {"c", "s", "t", "p", "tp", "w", "j", "cy", "sl", "poj", "tl", "zhu", "l", "tr"}
if (t1) then
orderlist[2] = "t"
orderlist[3] = "s"
end
if (j1) then
orderlist[4] = "j"
orderlist[5] = "cy"
orderlist[6] = "sl"
orderlist[7] = "p"
orderlist[8] = "tp"
orderlist[9] = "w"
end
if (poj1) then
orderlist[4] = "poj"
orderlist[5] = "tl"
orderlist[6] = "p"
orderlist[7] = "tp"
orderlist[8] = "w"
orderlist[9] = "j"
orderlist[10] = "cy"
orderlist[11] = "sl"
end
-- القواعد لإعادة تسمية بعض الأجزاء إذا كانت تستوفي شروط معينة
if args["hp"] then
args["p"] = args["hp"]
end
if args["tp"] then
labels["p"] = "هانيو بينيين"
end
if (args["s"] and args["s"] == args["t"]) then
args["c"] = args["s"]
args["s"] = nil
args["t"] = nil
if out == "s" or out == "t" then
out = "c"
end
elseif (not (args["s"] and args["t"])) then
labels["s"] = labels["c"]
labels["t"] = labels["c"]
end
if out then
for i, v in ipairs (orderlist) do
if v == out then
table.remove(orderlist, i)
table.insert(orderlist, 1, v)
break
end
end
end
if (out == "c" and args["s"]) then usebrackets = 2; end
local body = "" -- النص الناتج
local params -- لإنشاء علامات HTML
local label -- التسمية (قبل النص المقدم)
local val -- النص المقدم
-- المرور على كل جزء من الأجزاء المحتملة وإضافتها إلى النص الناتج
for i, part in ipairs(orderlist) do
if (args[part]) then
numargs = numargs + 1
label = ""
if (uselabels) then
label = labels[part]
if (capfirst) then
label = mw.language.getContentLanguage():ucfirst(label)
capfirst = false
end
if (uselinks and part ~= "l" and part ~= "tr") then
label = "[[" .. wlinks[part] .. "|" .. label .. "]]"
end
if (part == "l" or part == "tr") then
label = "<abbr title=\"" .. wlinks[part] .. "\"><small>" .. label .. "</small></abbr>"
else
label = label .. ":"
end
label = label .. " "
end
val = args[part]
if (cats[part]) and mw.title.getCurrentTitle().namespace == 0 then
val = cats[part] .. val
end
if (ISOlang[part]) then
params = {["lang"] = ISOlang[part]}
val = mw.text.tag({name="span",attrs=params, content=val})
elseif (part == "l") then
local terms = ""
for term in val:gmatch("[^,;؛]+") do
term = string.gsub(term, "^([ \"'؛,]*)(.*?)([ \"'؛,]*)$", "%2")
if term ~= "" then
terms = terms .. "'" .. term .. "', "
end
end
val = string.sub(terms, 1, -3)
elseif (part == "tr") then
val = """ .. val .. """
end
if (italic[part]) then
val = "<i>" .. val .. "</i>"
end
if string.match(val, "</?sup>") then val = val.."[[تصنيف:صفحات تستخدم قالب Zh مع علامات sup]]" end
if (superscript[part]) then
val = val:gsub("(%d)", "<sup>%1</sup>"):gsub("(%d)</sup>%*<sup>(%d)", "%1*%2"):gsub("<sup><sup>([%d%*]+)</sup></sup>", "<sup>%1</sup>")
end
if numargs == usebrackets then
body = body .. label .. val .. " ("
else
body = body .. label .. val .. "؛ "
end
end
end
if (body > "") then
body = string.sub(body, 1, -4)
if out and numargs > usebrackets then
body = body .. ")"
end
return body
else
if (args[1]) then
label = ""
if (uselabels) then
label = labels["c"]
if (uselinks) then
label = "[[" .. wlinks["c"] .. "|" .. label .. "]]"
end
label = label .. ": "
end
if mw.title.getCurrentTitle().namespace == 0 then
val = cats["c"] .. args[1]
else
val = args[1]
end
params = {["lang"] = ISOlang["c"]}
val = mw.text.tag({name="span",attrs=params, content=val})
return label .. val
end
return ""
end
end
return p