Module:Dash

From Xenharmonic Wiki
Jump to navigation Jump to search

Documentation transcluded from /doc
Note: Do not invoke this module directly; use the corresponding template instead: Template:Dash.

Replaces comma and space in list with dashes and spaces.


local p = {};

function p.dashes(frame)
	local sp, se1, se2
	local s = frame.args["s"]
	local d = frame.args["d"]
	local d2 = frame.args["d2"]
	
	if s == "thin" then
    	sp = " "										-- U+2009 THIN SPACE
	elseif s == "hair" then
		sp = " "										-- U+200A HAIR SPACE
	elseif s == "space" then
		sp = " "											-- Regular space
	elseif s == "nbsp" then
	    sp = " "										-- U+00A0 NO-BREAK SPACE
    elseif s == "nnbsp" then
	    sp = " "										-- U+202F NARROW NO-BREAK SPACE
	else
		sp = ""												-- No space
	end
	
	if d == "long" then
		se1 = "—"									-- U+2014 EM DASH
	elseif d == "med" or d == "medium" then
		se1 = "–"									-- U+2013 EN DASH
	elseif d == "larr" or d == "oarr" then
		se1 = "←"                                    -- U+2190 ← LEFTWARDS ARROW
	elseif d == "rarr" or d == "iarr" then
		se1 = "→"                                    -- U+2192 → RIGHTWARDS ARROW
	else
		se1 = "-"											-- Hyphen-minus
	end
	
	if d2 == "long" then
		se2 = "—"									-- U+2014 EM DASH
	elseif d2 == "med" or d2 == "medium" then
		se2 = "–"									-- U+2013 EN DASH
	elseif d2 == "larr" or d == "iarr" then
		se2 = "←"                                    -- U+2190 ← LEFTWARDS ARROW
	elseif d2 == "rarr" or d == "oarr" then
		se2 = "→"                                    -- U+2192 → RIGHTWARDS ARROW
	elseif d2 == "short" then
		se1 = "-"											-- Hyphen-minus
	else
		se2 = ""
	end
	
	local out_str = frame.args["input_str"]
	
	if se2 == "" then
		out_str = out_str:gsub("[,|%s]*,%s+", sp .. se1 .. sp)
	else
		out_str = out_str:gsub(",%s*,%s+", sp .. se2 .. sp):gsub(",%s+", sp .. se1 .. sp)
	end
	
	out_str = "<span>" .. out_str .. "</span>"
	return out_str
end

return p