Module:Listing: Difference between revisions

Jump to navigation Jump to search
Want an adless experience? Log in or Create an account.
(comment out some things to try to reduce cpu usage... this doesn't seem like it should be so expensive though)
(replaced mw.text.gsplit with a much more performant implementation so things are snappy now)
Line 1: Line 1:
local p = {}
local p = {}


function p._parseListing( pageName )
-- got this from http://lua-users.org/wiki/SplitJoin
   local pageContent = mw.title.new( pageName ):getContent()
-- idk how it works but it's 100x more performant than mw.text.gsplit
function gsplit(s,sep)
  local lasti, done, g = 1, false, s:gmatch('(.-)'..sep..'()')
  return function()
      if done then
        return
      end
      local v,i = g()
      if s == '' or sep == '' then
        done = true
        return s
      end
      if v == nil then
        done = true
        return s:sub(lasti)
      end
      lasti = i
      return v
  end
end
 
function p._parseListing( pageName, pageContent )
   local pageContent = pageContent or mw.title.new( pageName ):getContent()
   local root = {
   local root = {
     level = 1,
     level = 1,
Line 13: Line 35:


   -- 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
   for line in mw.text.gsplit( pageContent, '\n' ) do
   for line in gsplit( pageContent, '\n' ) do
     local headingLevel, headingText = string.match( line, '^%s*(=+)%s*(.-)%s*=+$' )
     local headingLevel, headingText = string.match( line, '^%s*(=+)%s*(.-)%s*=+$' )
     if headingLevel then -- line is a heading
     if headingLevel then -- line is a heading
Line 32: Line 54:
       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'
      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
--    local contentBackfillSection = headingLevel and currentSection.parent or currentSection
    repeat
--    repeat
      contentBackfillSection.content = contentBackfillSection.content .. line .. '\n'
--      contentBackfillSection.content = contentBackfillSection.content .. line .. '\n'
      contentBackfillSection = contentBackfillSection.parent
--      contentBackfillSection = contentBackfillSection.parent
    until not contentBackfillSection
--    until not contentBackfillSection
   end
   end