Module:User:Suzukaze-c/punctuation

local export = {}

-- do i need to worry about numbers? like 1,000,000

export.spacing_instructions = { -- ◇: there would be a space here in normal text -- ◆: there would not be a space here in normal text -- i.e. "◆.◇" means "." never has a leading space and always has a trailing space

["mul"] = { ["　"] = "◆;◇", ["…"] = "◆…◆",		["．"] = "◆.◆", [". "] = "◆.◇",		["，"] = "◆,◇", ["、"] = "◆,◇",		["！"] = "◆!◇", ["？"] = "◆?◇",		["："] = "◆:◇", ["；"] = "◆;◇",

["（"] = "◇(◆", ["）"] = "◆)◇",

["|"] = "◆|◆", ["—"]  = "◆—◆",	},	["zh"] = { ["《"] = "◇“◆", ["》"] = "◆”◇",		["『"] = "◇“◆", ["』"] = "◆”◇",		["「"] = "◇‘◆", ["」"] = "◆’◇",

["·"] = " ",	},	["ja"] = { -- Module:ja/data }, }

export.space_management_instructions = { ["◇◆"] = "", -- 「◆!◇◆”◇」→「!”」	["◆◇"] = "", -- 「◇‘◆◇(◆」→「‘(」	[" *◆ *"] = "", -- remove spaces near ◆ [" *◇ *"] = " ", -- keep spaces near ◇ }

-- return all the characters that can be converted for a language function export.langRegexRange(lang) local langs = { lang, 'mul' } local chars = {}

for _, lang in ipairs(langs) do		if export.spacing_instructions[lang] then for punctuation, _ in pairs(export.spacing_instructions[lang]) do				table.insert(chars, punctuation) end end end

return table.concat(chars, '') end

-- pad punctuation with spaces (no conversion) function export.space(text, lang) local out = {}

for char in mw.ustring.gmatch(text, '.') do		if export.convChar(char, lang) then table.insert(out, ' ' .. char .. ' ') else table.insert(out, char) end end

return table.concat(out) end

-- convert single punctuation to the ugly marked up forms -- return false if impossible function export.convChar(char, lang) return ((export.spacing_instructions[lang] and export.spacing_instructions[lang][char]) or export.spacing_instructions['mul'][char] or false) end

-- convert punctuation in text to the ugly marked up forms function export.conv(text, lang) local out = {}

for char in mw.ustring.gmatch(text, '.') do		table.insert(out, export.convChar(char, lang) or char) end

return table.concat(out) end

-- convert marked up forms to final form function export.main(text) for pattern, replacement in pairs(export.space_management_instructions) do		text = mw.ustring.gsub(text, pattern, replacement) end

return mw.text.trim(text) end

return export