Module:Sandbox/pppery/list markup explained

local p = local yesno = require("Module:Yesno")function p.main(frame) if frame.args.text

nil then if frame.args.page

nil then frame.args.text = mw.title.getCurrentTitle:getContent else frame.args.text = mw.title.new(frame.args.page):getContent end end return p._main(frame.args.text,yesno(frame.args.strict))endfunction p._main(text, strict) local out = "" local lastindent = "" local blanklines = "" for line in mw.text.gsplit(text, "\n") do local _, endindent = line:find("^[:*#]+") if endindent

nil then -- not an indented comment if #lastindent ~= 0 and #mw.text.trim(line)

0 then -- buffer blank lines or lines containing whitespace until we see the next non-blank line blanklines = blanklines .. line .. "\n" else -- reset state, emitting any blank lines out = out .. blanklines .. line .. "\n" blanklines = "" lastindent = "" end else local thisindent = line:sub(1, endindent) if endindent > #lastindent then thisindent = lastindent .. line:sub(#lastindent + 1, endindent) elseif endindent

#lastindent then if strict then thisindent = lastindent else -- err on the side of keeping markup that causes visual changes, despite being incorrect if #thisindent

1 and #lastindent

1 and thisindent ~= lastindent then -- add back blank lines if there is going to be a breakpoint anyway out = out .. blanklines end thisindent = lastindent:sub(1, -2) .. thisindent:sub(-1) end elseif strict then thisindent = lastindent:sub(1, endindent - #lastindent - 1) else -- as before, erring on the side of keeping markup that causes a visual change if #thisindent

1 and #lastindent