Module:Smyth
Appearance
export = {}
data = {
["Smyth"] = {
["path"] = "1999.04.0007",
["parts"] = { "part", "chapter", "section", "smythp" }
}
}
local find, match, gmatch = mw.ustring.find, mw.ustring.match, mw.ustring.gmatch
local function url(resourceCode, part, code)
code = mw.uri.encode(code, "PATH")
return "http://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:" .. path .. ":" .. part .. "=" .. code
end
function Smyth(section, part)
if not part then
part = "smythp"
end
SmythData = data.Smyth
path = SmythData.path
return url(path, part, section)
end
function export.SmythSection(frame)
local output, sign = "", ""
local sectionParameter = frame.args[1]
local sections, separators = {}, {}
local part = frame.args[2]
if sectionParameter then
n = 1
if find(sectionParameter, "[^%d%s]") then
for number, separator in gmatch(sectionParameter, "(%d* ?%a?%.?%d?)(%p?[^%d]*)") do
if number == "" or number == nil then
sections[n] = ""
else
sections[n] = number
end
if separator == "" or separator == nil then
separators[n] = ""
else
separators[n] = separator
end
if sections[n] == "" and separators[n] == "" then
break
end
n = n + 1
end
else
sections[1], separators[1] = match(sectionParameter, "(%d*)"), ""
end
else
error("SmythSection wants input in the first parameter")
end
if #sections == nil or #sections == "" then
error("No numbers in the text provided to SmythSection")
elseif sections[2] == "" then
sign = "§"
else
sign = "§§"
end
for i = 1, #sections do
if sections[i] == "" then
break
else
local sectionPath = string.gsub(sections[i], "%.%d", "")
output = output .. "[" .. Smyth(sectionPath)
if i == 1 then
output = output .. " " .. sign
end
output = output .. " " .. sections[i] .. "]" .. separators[i]
end
end
return output
end
return export