Modulis:SortName
Moduļa dokumentācija[izveidot]
Iespējams, vēlies izveidot dokumentāciju šim modulim Vari eksperimentēt šī moduļa smilšu kastes (izveidot | spoguļversija) un testu (izveidot) lapā Lūdzu, kategorijas pievieno dokumentācijas apakšlapā. Moduļa apakšlapas. |
local p = {}
function p.sortname(frame)
local currentpage = mw.title.getCurrentTitle()
local pagetitle = frame.args[1] or currentpage.text
local langvar = mw.language.getContentLanguage()
local text1 = ''
local text2 = ''
local parts = { 'de','De','fon','Fon','von','Von','du','Du','del','Del','zu','Zu','di','Di','van','Van','na','Na','le','Le','de\'','De\'' }
local partmatch = false
if string.find( pagetitle, ' ' ) ~= nil then
pagetitle = string.gsub( string.gsub( string.gsub( pagetitle, '%b()', '' ), ' +', ' '), ' $', '' )
if string.find( pagetitle, '^List of ' ) ~= nil then
pagetitle = langvar:ucfirst( string.gsub( pagetitle, '^List of ', '', 1 ) )
elseif string.find( pagetitle, '^The ' ) ~= nil then
pagetitle = string.gsub( pagetitle, '^The ', '' ) .. ', The'
else
pagetitle = string.gsub( pagetitle, ',.*$', '' )
pagetitle = string.gsub( pagetitle, ' of .*$', '' )
for i in ipairs( parts ) do
if string.find( pagetitle, ' ' .. parts[i] .. ' ' ) ~= nil then
text1 = string.sub( pagetitle, string.find( pagetitle, ' ' .. parts[i] .. ' ' ) + 1, #pagetitle )
text2 = string.sub( pagetitle, 0, string.find( pagetitle, ' ' .. parts[i] .. ' ' ) - 1 )
pagetitle = text1 .. ', ' .. text2
partmatch = true
break
end
end
if not partmatch and string.find( pagetitle, ' ' ) ~= nil then
text1 = string.sub( pagetitle, string.find( pagetitle, ' [^ ]*$' ) + 1, #pagetitle )
text2 = string.sub( pagetitle, 0, string.find( pagetitle, ' [^ ]*$' ) - 1 )
local romannumeral = roman_to_numeral(text1)
if romannumeral == -1 then
pagetitle = text1 .. ', ' .. text2
else
if string.find( text2, ' ' ) == nil then
pagetitle = text2 .. ' ' .. romannumeral
else
text1 = string.sub( text2, string.find( text2, ' [^ ]*$' ) + 1, #text2 )
text2 = string.sub( text2, 0, string.find( text2, ' [^ ]*$' ) - 1 )
pagetitle = text1 .. ' ' .. romannumeral .. ', ' .. text2
end
end
end
end
end
return pagetitle
end
-- the following table and roman_to_numeral function came from Module:ConvertNumeric, created by User:Dcoetzee
roman_numerals = {
I = 1,
V = 5,
X = 10,
L = 50,
C = 100,
D = 500,
M = 1000
}
-- Converts a given valid roman numeral (and some invalid roman numerals) to a number. Returns -1, errorstring on error
function roman_to_numeral(roman)
if type(roman) ~= "string" then return -1, "roman numeral not a string" end
local rev = roman:reverse()
local raising = true
local last = 0
local result = 0
for i = 1, #rev do
local c = rev:sub(i, i)
local next = roman_numerals[c]
if next == nil then return -1, "roman numeral contains illegal character " .. c end
if next > last then
result = result + next
raising = true
elseif next < last then
result = result - next
raising = false
elseif raising then
result = result + next
else
result = result - next
end
last = next
end
return result
end
return p