Moduł:categoriesIndexing
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:categoriesIndexing/opis
local p = {}
function inTable(tbl, item) -- check if item exists in an array
for key, value in pairs(tbl) do
if value == item then return key end
end
return false
end
function removeDiacritics( text )
local nfd = mw.ustring.toNFD( text )
local res = ''
for c in mw.ustring.gcodepoint( nfd ) do
if c<128 then
res = res .. string.char(c)
end
end
return res
end
local arabskie = {
["إ"] = "ا",
["آ"] = "ا",
["ا"] = "ا",
["أ"] = "ا"
}
local francuski = {
["À"] = "A",
["Â"] = "A",
["Ç"] = "C",
["É"] = "E",
["È"] = "E",
["Ë"] = "E",
["Ê"] = "E",
["Î"] = "I",
["Ï"] = "I",
["Ô"] = "O",
["Œ"] = "OE",
["Ù"] = "U",
["Ú"] = "U",
["Û"] = "U",
["à"] = "a",
["â"] = "a",
["ç"] = "c",
["é"] = "e",
["è"] = "e",
["ë"] = "e",
["ê"] = "e",
["î"] = "i",
["ï"] = "i",
["ô"] = "o",
["œ"] = "oe",
["ù"] = "u",
["ú"] = "u",
["û"] = "u"
}
local hiszpanski = {
["Á"] = "A",
["É"] = "E",
["Í"] = "I",
["Ó"] = "O",
["Ú"] = "U",
["Ü"] = "U",
N = "N1",
["Ñ"] = "N2+",
["á"] = "a",
["é"] = "e",
["í"] = "i",
["ó"] = "o",
["ú"] = "u",
["ü"] = "u",
n = "n1",
["ñ"] = "n2+"
}
local nowogrecki = {
["Ά"] = "Α",
["Έ"] = "Ε",
["Ή"] = "Η",
["Ί"] = "Ι",
["Ϊ"] = "Ι",
["Ό"] = "Ο",
["Ύ"] = "Υ",
["Ϋ"] = "Υ",
["Ώ"] = "Ω",
["ά"] = "α",
["έ"] = "ε",
["ί"] = "ι",
["ϊ"] = "ι",
["ΐ"] = "ι",
["ό"] = "ο",
["ύ"] = "υ",
["ϋ"] = "υ",
["ΰ"] = "υ",
["ώ"] = "ω",
["ή"] = "η",
["ς"] = "σ"
}
local polski = {
A = "A1",
C = "C1",
E = "E1",
L = "L1",
N = "N1",
O = "O1",
S = "S1",
Z = "Z1",
a = "a1",
c = "c1",
e = "e1",
l = "l1",
n = "n1",
o = "o1",
s = "s1",
z = "z1",
["Ą"] = "A2",
["Ć"] = "C2+",
["Ę"] = "E2",
["Ł"] = "L2+",
["Ń"] = "N2",
["Ó"] = "O2+",
["Ś"] = "S2+",
["Ź"] = "Z2+",
["Ż"] = "Z3+",
["ą"] = "a2",
["ć"] = "c2+",
["ę"] = "e2",
["ł"] = "l2+",
["ń"] = "n2",
["ó"] = "o2+",
["ś"] = "s2+",
["ź"] = "z2+",
["ż"] = "z3+"
}
-- sources: http://www.cjvlang.com/Writing/writviet.html and http://kord.kober.us/encoding/vn_utf-8.html
local wietnamski = {
A = "A0",
E = "E0",
O = "O0",
U = "U0",
D = "D0",
a = "a0",
e = "e0",
o = "o0",
U = "u0",
d = "d0",
["Ắ+"] = "Ă", ["Ằ+"] = "Ă", ["Ẳ+"] = "Ă", ["Ẵ+"] = "Ă", ["Ặ+"] = "Ă",
["Ấ+"] = "Â", ["Ầ+"] = "Â", ["Ẩ+"] = "Â", ["Ẫ+"] = "Â", ["Ậ+"] = "Â",
["Ế+"] = "Ê", ["Ề+"] = "Ê", ["Ể+"] = "Ê", ["Ễ+"] = "Ê", ["Ệ+"] = "Ê",
["Ố+"] = "Ô", ["Ồ+"] = "Ô", ["Ổ+"] = "Ô", ["Ỗ+"] = "Ô", ["Ộ+"] = "Ô",
["Ớ+"] = "Ơ", ["Ờ+"] = "Ơ", ["Ở+"] = "Ơ", ["Ỡ+"] = "Ơ", ["Ợ+"] = "Ơ",
["Ứ+"] = "Ư", ["Ừ+"] = "Ư", ["Ử+"] = "Ư", ["Ữ+"] = "Ư", ["Ự+"] = "Ư",
["ắ+"] = "ă", ["ằ+"] = "ă", ["ẳ+"] = "ă", ["ẵ+"] = "ă", ["ặ+"] = "ă",
["ấ+"] = "â", ["ầ+"] = "â", ["ẩ+"] = "â", ["ẫ+"] = "â", ["ậ+"] = "â",
["ế+"] = "ê", ["ề+"] = "ê", ["ể+"] = "ê", ["ễ+"] = "ê", ["ệ+"] = "ê",
["ố+"] = "ô", ["ồ+"] = "ô", ["ổ+"] = "ô", ["ỗ+"] = "ô", ["ộ+"] = "ô",
["ớ+"] = "ơ", ["ờ+"] = "ơ", ["ở+"] = "ơ", ["ỡ+"] = "ơ", ["ợ+"] = "ơ",
["ứ+"] = "ư", ["ừ+"] = "ư", ["ử+"] = "ư", ["ữ+"] = "ư", ["ự+"] = "ư",
["À"] = "A0",
["Á"] = "A0",
["Â"] = "A2+",
["È"] = "E0",
["É"] = "E0",
["Ê"] = "E1+",
["Ì"] = "I",
["Í"] = "I",
["Ò"] = "O0",
["Ó"] = "O0",
["Ô"] = "O1+",
["Õ"] = "O0",
["Ù"] = "U0",
["Ú"] = "U0",
["à"] = "a0",
["á"] = "a0",
["â"] = "a2+",
["ã"] = "a0",
["è"] = "e0",
["é"] = "e0",
["ê"] = "e1+",
["ì"] = "i",
["í"] = "i",
["ò"] = "o0",
["ó"] = "o0",
["ô"] = "o1+",
["õ"] = "o0",
["ù"] = "u0",
["ú"] = "u0",
["ý"] = "y",
["Ý"] = "Y",
["Ă"] = "A1+",
["ă"] = "a1+",
["Đ"] = "D1+",
["đ"] = "d1+",
["Ĩ"] = "I",
["ĩ"] = "i",
["Ũ"] = "U0",
["ũ"] = "u0",
["Ơ"] = "O2+",
["ơ"] = "o2+",
["Ư"] = "U1+",
["ư"] = "u1+",
["Ạ"] = "A0",
["ạ"] = "a0",
["Ả"] = "A0",
["ả"] = "a0",
["Ấ"] = "A2+",
["ấ"] = "a2+",
["Ầ"] = "A2+",
["ầ"] = "a2+",
["Ẩ"] = "A2+",
["ẩ"] = "a2+",
["Ẫ"] = "A2+",
["ẫ"] = "a2+",
["Ậ"] = "A2+",
["ậ"] = "a2+",
["Ắ"] = "A1+",
["ắ"] = "a1+",
["Ằ"] = "A1+",
["ằ"] = "a1+",
["Ẳ"] = "A1+",
["ẳ"] = "a1+",
["Ẵ"] = "A1+",
["ẵ"] = "a1+",
["Ặ"] = "A1+",
["ặ"] = "a1+",
["Ẹ"] = "E0",
["ẹ"] = "e0",
["Ẻ"] = "E0",
["ẻ"] = "e0",
["Ẽ"] = "E0",
["ẽ"] = "e0",
["Ế"] = "E1+",
["ế"] = "e1+",
["Ề"] = "E1+",
["ề"] = "e1+",
["Ể"] = "E1+",
["ể"] = "e1+",
["Ễ"] = "E1+",
["ễ"] = "e1+",
["Ệ"] = "E1+",
["ệ"] = "e1+",
["Ỉ"] = "I",
["ỉ"] = "i",
["Ị"] = "I",
["ị"] = "i",
["Ọ"] = "O0",
["ọ"] = "o0",
["Ỏ"] = "O0",
["ỏ"] = "o0",
["Ố"] = "O1+",
["ố"] = "o1+",
["Ồ"] = "O1+",
["ồ"] = "o1+",
["Ổ"] = "O1+",
["ổ"] = "o1+",
["Ỗ"] = "O1+",
["ỗ"] = "o1+",
["Ộ"] = "O1+",
["ộ"] = "o1+",
["Ớ"] = "O2+",
["ớ"] = "o2+",
["Ờ"] = "O2+",
["ờ"] = "o2+",
["Ở"] = "O2+",
["ở"] = "o2+",
["Ỡ"] = "O2+",
["ỡ"] = "o2+",
["Ợ"] = "O2+",
["ợ"] = "o2+",
["Ụ"] = "U0",
["ụ"] = "u0",
["Ủ"] = "U0",
["ủ"] = "u0",
["Ứ"] = "U1+",
["ứ"] = "u1+",
["Ừ"] = "U1+",
["ừ"] = "u1+",
["Ử"] = "U1+",
["ử"] = "u1+",
["Ữ"] = "U1+",
["ữ"] = "u1+",
["Ự"] = "U1+",
["ự"] = "u1+",
["Ỳ"] = "Y",
["ỳ"] = "y",
["Ỵ"] = "Y",
["ỵ"] = "y",
["Ỷ"] = "Y",
["ỷ"] = "y",
["Ỹ"] = "Y",
["ỹ"] = "y"
}
local default = {"kurdyjski"} -- add languages for which stripping all accents works properly
local indexing = {
["arabski"] = arabskie,
["dari"] = arabskie,
["osmańsko-turecki"] = arabskie,
["perski"] = arabskie,
["paszto"] = arabskie,
["polski"] = polski,
["urdu"] = arabskie,
["francuski"] = francuski,
["hiszpański"] = hiszpanski,
["nowogrecki"] = nowogrecki,
["wietnamski"] = wietnamski
}
function p.stripAccents( frame )
local language = frame.args[1]
local text = frame.args[2]
if inTable(default, language) then
return removeDiacritics( text )
end
local indexing = indexing[ language ]
if indexing == nil then
return text
end
local result, poczatek = '', true
for codepoint in mw.ustring.gcodepoint( text ) do
local unstripped = mw.ustring.char(codepoint)
local stripped = indexing[ unstripped ]
if stripped == nil then
stripped = unstripped
poczatek = false
end
if poczatek then
local stripped2 = indexing[unstripped..'+']
stripped = stripped2 or ((string.sub(stripped, -1) == '+') and unstripped or stripped)
poczatek = false
end
result = result .. stripped
end
return result
end
return p