Module:sla-cite

local export = {}

local lang = require("Module:languages").getByCode("sla-pro")

local u = mw.ustring.char local rfind = mw.ustring.find local rsubn = mw.ustring.gsub local rmatch = mw.ustring.match local rsplit = mw.text.split local ulower = mw.ustring.lower local uupper = mw.ustring.upper local usub = mw.ustring.sub local ulen = mw.ustring.len local ugmatch = mw.ustring.gmatch

-- Clone parent's args while also assigning nil to empty strings. local function clone_args(frame) local args = {} for pname, param in pairs(frame:getParent.args) do		args[pname] = param ~= "" and param or nil end return args end

local function parse_page(pageval) local st, en = rfind(pageval, "^([0-9]+)([%-–—])([0-9]+)$") if st and en then return st, en	else st = rfind(pageval, "^([0-9+])") if st then return st, nil else error("Unrecognized page value '" .. pageval .. "'") end end end

local function compute_url_page_left_right(left) local right left = left + 0 if (left % 2) == 0 then right = left + 1 else right = left left = left - 1 end left = left .. ""	right = right .. ""	if #left == 1 then left = "00" .. left elseif #left == 2 then left = "0" .. left end if #right == 1 then right = "00" .. right elseif #right == 2 then right = "0" .. right end return left, right end

local function compute_url_vol(vol) vol = vol + 0 vol = vol + "" if #vol == 1 then return "0" .. vol else return vol end end

function export.essja_url(frame) local args = clone_args(frame) local page_left, page_right if args["page-left"] and args["page-right"] then page_left = args["page-left"] page_right = args["page-right"] else local st, en = parse_page(args["pages"] or args["page"]) page_left, page_right = compute_url_page_left_right(st) end local vol = compute_url_vol(args["volume"] or args["vol"]) return "http://essja.narod.ru/pg/" .. vol .. "/f" .. page_left .. "-" .. page_right .. ".htm" end

return export