Module:Word count

local p = {} local yn = require("Module:Yesno") local pv = require("Module:If preview") local pvWarning = pv._warning -- Formats the word count, etc. while showing/hiding the count --

function p._main(str, limit) local strout = "" limit = limit or math.huge local count = 0 local phrases = mw.text.split(str, "%s") local separators = {} for match in mw.ustring.gmatch(str, "%s") do		table.insert(separators, match) end for k,v in pairs(phrases) do		if (count < limit) then strout = strout .. v .. (separators[k] ~= nil and separators[k] or "") end if v ~= "" then count = count + 1 end end return {str = str, trimmedstr = strout, count = count} end

function p.main(frame) local args = require("Module:Arguments").getArgs(frame) local str = args[1] or '' local limit = tonumber(args['limit']) or tonumber(args[2]) or math.huge local result = p._main(str, limit) mw.logObject(result) local out = '' if (yn(args['showcount'] or false) and not mw.isSubsting) or frame:preprocess('') == "" then --always show in preview if limit == math.huge then out = out .. 'Word count: ' .. result['count'] .. ' '		elseif 0 <= result['count'] and result['count'] < limit / 2 then out = out .. 'Word count: ' .. result['count'] .. ' /' .. limit .. ' '		elseif limit / 2 <= result['count'] and result['count'] < limit then out = out .. 'Word count: ' .. result['count'] .. ' /' .. limit .. ' '		else out = out .. 'Word count: ' .. result['count'] .. ' /' .. limit .. ' '		end end if yn(args['trim']) and result['count'] > limit then out = out .. pvWarning({"Word count limit of " .. limit .. " exceeded by " .. (result['count'] - limit) .. " words. Additional text will be ignored."}) end local res = (yn(args['trim']) and result['trimmedstr'] or str) out = out .. (args['prepend'] or '') .. res .. (args['append'] or '') if mw.isSubsting then if args['unsubst'] then local f = frame:getParent local title = f:getTitle.text or "#invoke:Word count|main" local preout = '' end return out end return frame:extensionTag("templatestyles", "", {src = "Module:Word_count/styles.css"}) .. out end

return p