Modul:Module overview

local p={}
local debuglog = ""

function cleanup(str)
	str = mw.ustring.match(str, "^%s*(%S.-%S)%s*$") or str -- (pass through "" and one character stuff)
	str = mw.ustring.gsub(str,"Module:","") -- remove all "Module:" from these, so they match up
	return str
end

function p.test(frame)
	return mw.text.unstrip(frame:preprocess("{{Special:AllPages|from=Listify/doc|to=Sandbox/Theopolisme|namespace=828}}"))
end

function p.getTable(frame)
    local alltable = p._getAll(frame)
    for i = 1, #alltable do
        alltable[i] = "|-\n|[[Module:" .. alltable[i] .. "|" .. alltable[i] .. "]]"
    end
    return '{| class = "wikitable"\n' .. table.concat(alltable,'\n') .. '\n|}\n'
end

function p._getAll(frame)
    local modules = ""
    local from = ""
    local lastfrom
    local pagelist = {}
    repeat
        local index = mw.text.unstrip(frame:preprocess("{{Special:AllPages|namespace=828|from=" .. from .. "}}"))
        local nextlink = mw.ustring.gmatch(index, "<a.->.-:(.-)</a>")
        if (from ~= "") then
        	nextlink() -- discard the first value; it'll be the same as the from, i.e. the last value added last time
        end
        local link = true
        while true do
            lastlink = link
            link = nextlink()
            if (not link) then break end
            table.insert(pagelist, mw.text.decode(link))
        end
        lastfrom = from
        from = lastlink
    until ((lastfrom == from) or (from == true)) -- I think only the last is needed but I hate debugging loops
    return pagelist
end

function p.getAll(frame)
	return table.concat(p._getAll(frame), "\n") .. debuglog
end

function dictinsert(dict, data, heading) -- passing in a reference to the dictionary, not a copy of it, so whichever is specified gets altered
	local getentry = mw.ustring.gmatch(data, "([^\n\t]+)")
	local entry = " "
	while entry do
		entry = cleanup(entry)
		dict[entry] = heading
	    entry = getentry()
	end
end

function p.main(frame)
	local args = frame.args -- not bothering reading parent frame, this is to be invoked only
    local title = args[1]
    return p._main(title, frame)
end

function p._main(title, frame)
    local titleObject, titleContent
    if title then
    	titleObject = mw.title.new(title)
    	if titleObject then
    		datapage = titleObject:getContent()
	    end
	end
	if not datapage then
		return "Error: data page not found"
    end
    -- OK, we're now looking at a big juicy file with a lot of sections in top level headings surrounded by == ==
    -- Many of these then are subject to commands in [ ] that follow.  The heading name should be remembered to each of these.
    -- Comments in <!-- --> are to be ignored
    -- All other terms are page names.
    datapage = mw.ustring.gsub(datapage, "<!%-%-.-%-%-%>", "") -- remove all comments
    datapage = datapage .. "\n== ==\n" -- add a final blank heading so it is easier to excise all headinged sections
    datapage = mw.ustring.gsub(datapage, "==([^\n]-)==", "[end content token][begin heading token]%1[end heading token]")
    getsection = mw.ustring.gmatch(datapage, "%[begin heading token%](.-)%[end heading token%](.-)%[end content token%]")
    local outtable = {} -- sequence
    local entries = {} -- sequence
    local rating = {} -- dictionary
    local category = {} -- dictionary
    section = ""
    while section do
    	-- within each section, there are commands in [ ] which affect the content that follows, sometimes using the current heading.
    	-- ONLY specific commands in [ ] listed below are parsed; the rest don't count and will end up being interpreted as pages.
        section = mw.ustring.gsub(section, "%[%s*autoindex%s*%]", "[end data token][begin command token]autoindex[end command token]")
    	section = mw.ustring.gsub(section, "%[%s*index%s*%]", "[end data token][begin command token]index[end command token]")
    	section = mw.ustring.gsub(section, "%[%s*rating%s*%]", "[end data token][begin command token]rating[end command token]")
    	section = mw.ustring.gsub(section, "%[%s*keyword %-%s*%]", "[end data token][begin command token]keyword -[end command token]")
    	section = mw.ustring.gsub(section, "%[%s*category%s*%]", "[end data token][begin command token]category[end command token]")	
    	section = section .. "\n[end data token]" -- add a final blank command to make it easier to excise all commands
    	getcommand = mw.ustring.gmatch(section, "%[begin command token%](.-)%[end command token%](.-)%[end data token%]")
    	command = " "
    	while command do
    		command, data = getcommand()
    		data = cleanup(data or "")
    		if "autoindex" == command then
    			command = "index"
    			data = p.getAll(frame)
    		end
    		if "index" == command then
    		   	local getentry = mw.ustring.gmatch(data, "([^\n\t]+)")
    		    local entry
    		    while true do
    		    	entry = getentry()
    		    	if (not entry) then break end
    		    	table.insert(entries, cleanup(entry or ""))
    		    end
    		elseif "keyword -" == command then
                        data = mw.text.trim(data)
    			if data ~= "" then				
    			    local i
    			    for i = #entries,1,-1 do -- reverse order so the numbers stay accurate!
    			        if mw.ustring.match(entries[i],data) then
    			        	table.remove(entries,i)
    			        end
    			    end
    			end
        	elseif "category" == command then
    		    dictinsert(category, data, heading)
			elseif "rating" == command then
				dictinsert(rating, data, heading)
			end
        end
        heading, section = getsection()
        heading = cleanup(heading or "")
    end
    table.insert(outtable, '\n{| class="wikitable sortable"')
    table.insert(outtable, '\n!Module name')
    table.insert(outtable, '\n!Category')
    table.insert(outtable, '\n!Rating')
    for i = 1, #entries do
    	table.insert(outtable, "\n|-")
    	local entry = entries[i] or ""  -- better not be nil...
    	table.insert(outtable, "\n|")
    	table.insert(outtable, "[[Module:" .. entry .. "|" .. entry .. "]] ([[Module talk:" .. entry .."|talk]])")
    	table.insert(outtable, "\n|")
    	table.insert(outtable, category[entry] or "")
    	table.insert(outtable, "\n|")
    	table.insert(outtable, rating[entry] or "")
    end
    table.insert(outtable, "\n|}") -- end wikitable
    local outdata = table.concat(outtable)
	return outdata..debuglog
end

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.