Module:Listing: Difference between revisions
Jump to navigation
Jump to search
Want an adless experience? Log in or Create an account.
(add ^...$ to heading regex) |
(comment out some things to try to reduce cpu usage... this doesn't seem like it should be so expensive though) |
||
Line 3: | Line 3: | ||
function p._parseListing( pageName ) | function p._parseListing( pageName ) | ||
local pageContent = mw.title.new( pageName ):getContent() | local pageContent = mw.title.new( pageName ):getContent() | ||
local | local root = { | ||
level = 1, | level = 1, | ||
name = pageName, | name = pageName, | ||
Line 10: | Line 10: | ||
sections = {} | sections = {} | ||
} | } | ||
local currentSection = root | |||
-- can't think of a regex to split sections so go line by line | -- can't think of a regex to split sections so go line by line | ||
Line 31: | Line 32: | ||
currentSection = newSection | currentSection = newSection | ||
elseif #currentSection.sections == 0 then -- no child headings yet so this is part of the summary of the current section | elseif #currentSection.sections == 0 then -- no child headings yet so this is part of the summary of the current section | ||
-- currentSection.summary = currentSection.summary .. line .. '\n' | |||
end | end | ||
-- add to content of all parent sections, plus current section if line isn't a heading | -- add to content of all parent sections, plus current section if line isn't a heading | ||
-- content currently isn't needed so disabling this for perf | |||
-- local contentBackfillSection = headingLevel and currentSection.parent or currentSection | |||
-- repeat | |||
-- contentBackfillSection.content = contentBackfillSection.content .. line .. '\n' | |||
-- contentBackfillSection = contentBackfillSection.parent | |||
-- until not contentBackfillSection | |||
end | end | ||
return root | |||
end | end | ||
Revision as of 05:27, July 24, 2020
Documentation for this module may be created at Module:Listing/doc
local p = {} function p._parseListing( pageName ) local pageContent = mw.title.new( pageName ):getContent() local root = { level = 1, name = pageName, content = "", summary = "", sections = {} } local currentSection = root -- can't think of a regex to split sections so go line by line for line in mw.text.gsplit( pageContent, '\n' ) do local headingLevel, headingText = string.match( line, '^%s*(=+)%s*(.-)%s*=+$' ) if headingLevel then -- line is a heading local newSection = { level = #headingLevel, name = headingText, content = "", summary = "", sections = {} } -- find the right parent and insert while currentSection.level >= #headingLevel do currentSection = currentSection.parent end newSection.parent = currentSection currentSection.sections[#currentSection.sections + 1] = newSection currentSection = newSection elseif #currentSection.sections == 0 then -- no child headings yet so this is part of the summary of the current section -- currentSection.summary = currentSection.summary .. line .. '\n' end -- add to content of all parent sections, plus current section if line isn't a heading -- content currently isn't needed so disabling this for perf -- local contentBackfillSection = headingLevel and currentSection.parent or currentSection -- repeat -- contentBackfillSection.content = contentBackfillSection.content .. line .. '\n' -- contentBackfillSection = contentBackfillSection.parent -- until not contentBackfillSection end return root end function p.bullets( frame ) local listing = p._parseListing( frame.args[1] ) local bullets = mw.html.create( 'ul' ) for _, section in ipairs( listing.sections ) do local sublist = bullets:tag( 'li' ) :wikitext( section.name ) :tag( 'ul' ) for _, subsection in ipairs( section.sections ) do sublist:tag( 'li' ):wikitext( subsection.name ) end end return tostring( bullets ) end p.debugFrame = { args = { [1] = 'User:Locke/Sandbox/Listing' } } p.debugContent = [[ Summary {{Infobox|thing=value}} == First Section == Section 1 summary {{Template|prop=val}} === Subsection of First Section === Subsection 1 content {{Template|prop=val}} == Second Section == Section 2 summary {{Template|prop=val}} === Subsection of Second Section === Subsection 2 content {{Template|prop=val}} {{Cat}} ]] return p