Module:Truncate

From Fallen London Wiki (Staging)

Documentation for this module may be created at Module:Truncate/doc

local p = {}

function p.check(frame)
	patterns_rem = {						-- Patterns to remove
		[1] = "'''?",										-- Wikitext bold/&italics
		[2] = " ?[%[%(][%.…]+[%]%)] ?",						-- "Snip markers" like […]
		[3] = "%<span.-%>%[%[File.-as: Text Uses%]%]",		-- "Af" and "Ai" templates
		[4] = "%[%[File:Hint.-layers%' City Text Uses%]%]",	-- "Tlc" template
		[5] = '<span name="TLC variant">.-</span>',			-- Alt "tlc" while changing
		[6] = '</?p>'										-- HTML <p> tag
	}
	text = frame.args.text
	warning = frame.args.warning or "yes"
	count = frame.args.count or "yes"
	chars = tonumber(frame.args.chars) or 250
	preview = "no"
	if (frame.args.preview == "") then preview = "yes" end
	ttext = text
	
	for i=1,#patterns_rem do
		ttext = mw.ustring.gsub(ttext, patterns_rem[i], "")
	end
	dlbs = select(2, mw.ustring.gsub(ttext, "\n\n", "")) -- Double Line BreakS
	
	tlen = tonumber(frame:callParserFunction("#len", {ttext})) - dlbs
	-- Parser functions are used instead of string ones to replicate previous behaviour exactly
	
	if (tlen > chars) then
		text = frame:callParserFunction("#sub", {text, 0, chars})
		text = text .. "[…]"
		if (count == "yes" and preview == "yes") then 
			text = text .. "<br />''char count:" .. tlen .. "''"
		end
		if (warning == "yes") then 
			text = text .. frame:expandTemplate{title="Immediate review"} 
		end
	else 
		if (count == "yes" and preview == "yes") then
			text = text .. "<br />''char count:" .. tlen .. "''"
		end
	end
	
	return text
end

return p