Module:Sharpness documentation: Difference between revisions

ArrowHead294 (talk | contribs)
mNo edit summary
Dave Keenan (talk | contribs)
Added line break <br> before "This symbol set ...".
 
(45 intermediate revisions by 4 users not shown)
Line 1: Line 1:
local p = {}
local p = {}
local yesno = require("Module:Yesno")


function p.main(frame)
function p.main(frame)
local in_str = frame.args["input"]
local in_str = frame.args["input"]
local d, b, c = in_str:match("%-(%a*)(%d+)(%a*)")
local s = tonumber(b)
local sc = s * 12
local note = frame.args["note"] or ""
local note = frame.args["note"] or ""
local notation = frame.args["notation"]
local aux_note = frame.args["auxnote"] or ""
local notation = frame.args["notation"] or ""
if c == nil then
local debugg = yesno(frame.args["debug"])
c = ""
 
-- typ: "sharp" or "flat"
-- value: Absolute value of sharpness (the "n" as in sharp-n and flat-n)
-- extension: Used for identifying alternative symbol set
local typ, value, extension, suffix = string.lower(in_str):match("%-(%a*)(%d+)(%a*)-?(%a*)")
 
-- Signed sharpness
local s = tonumber(value)
if typ == "flat" then
s = -s
end
end
 
local out_str = "This template is used "
if extension == nil then
extension = ""
if (d == "flat" or d == "flat") then
s = -s
end
end
 
local result = "This template is used "
 
if s == 0 then
if s == 0 then
out_str = out_str
-- Sharp-0 EDOs (lower 5 multiples of 7) are redundant, take care of that right away
result = result
.. "for {{EDOs| 7, 14, 21, 28, and 35 }} [[equal divisions of the octave]]. "
.. "for {{EDOs| 7, 14, 21, 28, and 35 }} [[equal divisions of the octave]]. "
.. "Since these tunings temper out the 3-limit augmented unison ([[2187/2048]], known as the Pythagorean apotome), "
.. "Since these tunings temper out the 3-limit augmented unison ([[2187/2048]], known as the Pythagorean apotome), "
.. "going up seven fifths brings one back to the root note, and as such, "
.. "going up seven fifths brings one back to the root note, and as such "
.. "the traditional sharps and flats are redundant and cannot raise or lower the pitch."
.. "the traditional sharps and flats are redundant and cannot raise or lower the pitch."
else
else
out_str = out_str
-- Otherwise
.. "for [[EDO]]s where a sharp "
result = result
.. ((s < 0) and {"lowers"} or {"raises"})[1] .. " by " .. math.abs(s) .. " step"
.. "for [[edo]]s where a sharp "
.. ((s < 0) and "lowers" or "raises")
.. " by "
.. math.abs(s)
.. " step"
 
if math.abs(s) ~= 1 then
if math.abs(s) ~= 1 then
out_str = out_str .. "s"
result = result .. "s"
end
end
 
out_str = out_str .. "."
result = result .. "."
end
if notation == "" then
 
if s >= 3 then
if notation == "" then
if c == "" then
result = result .. "<br>This symbol set "
out_str = out_str .. " The symbol set is based on [[ups and downs notation]] and comprises "
 
.. (s % 2 == 0
if math.abs(s) == 1 then
and "sharps, flats, naturals, and Stein&ndash;Zimmerman [[24edo#Notation|quarter tone]] accidentals "
result = result .. "is identical to standard notation."
or "sharps, flats, and naturals ")
else
if extension == "" then
out_str = out_str .. "with arrows from [[Helmholtz&ndash;Ellis notation]]."
if math.abs(s) == 2 then
elseif c == "a" or c == "A" then
-- If a sharp raises by two steps
out_str = out_str .. " The symbol set is based on [[ups and downs notation]] using separate arrows."
result = result
.. "comprises sharps, flats, and Stein&ndash;Zimmermann [[24edo #Notation|quartertone]] accidentals."
else
if s == 0 then
result = result
.. "is based on [[ups and downs notation]] and comprises naturals "
.. "with arrows from [[Helmholtz&ndash;Ellis notation]]."
else
-- Otherwise (if a sharp raises by three or more steps)
result = result
.. "is based on [[ups and downs notation]] and comprises sharps, flats, "
.. (s % 2 == 0 and "naturals, and Stein&ndash;Zimmermann [[24edo #Notation|quartertone]] accidentals " or "and naturals ")
.. "with arrows from [[Helmholtz&ndash;Ellis notation]]."
end
end
end
elseif extension == "a" or extension == "A" then
-- Extension for modern-style ups and downs
result = result .. "is based on [[ups and downs notation]] using separate up and down chevrons."
end
end
else
out_str = out_str .. " It is based on " .. notation .. "."
end
end
else
if note then
result = result .. string.format(" It is based on %s.", notation)
out_str = out_str .. " " .. note
end
 
-- display custom notes
if note or aux_note then
result = result .. " " .. note ..(aux_note ~= "" and "\n\n" .. aux_note or "")
end
 
-- Display the note about supersets of 12edo for sharpness-1 and above and set the edo number for supersets of 12edo
if s >= 1 then
local n_edo = s * 12
 
result = result
.. "\n\n<h3>Parameters</h3>\n"
.. string.format("Passing in <code>%d</code> as a single unnamed parameter will change "
.. "'''Step offset''' to '''Semitones''' in the case of [[%dedo]]", n_edo, n_edo)
if s >= 2 then
result = result .. string.format(", since %dedo is a superset of [[12edo]]", n_edo)
end
end
result = result .. "."
end
-- Display a "see also" section for sharpness-2 and above, and sharpness-0
if s >= 2 or s <= -2 or s == 0 then
local basic = "Template:Sharpness-" .. typ .. value
local basic_suf = basic .. "-" .. suffix
result = result .. "\n\n<h3>See also</h3>\n"
.. "* [[Alternative symbols for ups and downs notation]]\n"
if s >= 1 then
if (extension == "a" or extension == "A") then
out_str = out_str
-- If the template shows separate up and down chevrons
.. "\n\n<h3>Parameters</h3>\n"
result = result
.. "Passing <code>{{pipe}}"
.. string.format("* [[{{#ifexist: %s|%s|%s}}]] &ndash; ", basic_suf, basic_suf, basic)
.. sc
.. (s == 2
.. "</code> will change '''Step offset''' to '''Semitones''' in the case of [["
and "uses Stein&ndash;Zimmermann quarter tone accidentals."
.. sc .. "edo]]"
or "the classic version of this template that shows arrows attached to standard accidentals.")
.. ((s >= 2) and {", since " .. sc .. "edo is a superset of [[12edo]]."} or {"."})[1]
else
end
-- If the template shows integrated (HEJI-like) arrows
result = result .. string.format("{{#ifexist: %sa|* [[%sa]] &ndash; ", basic, basic)
if s >= 3 then
.. "an alternate version of this template that shows separate up and down chevrons.\n|}}"
out_str = out_str
.. "\n\n<h3>See also</h3>\n"
if string.lower(suffix) ~= "" then
.. "* [[Alternative symbols for ups and downs notation]]"
-- If we are on a different version of a template (e.g. "extended" ones that show more arrows than the minimum)
result = result .. string.format("{{#ifexist: %s|* [[%s]] &ndash; ", basic, basic)
.. "the basic version of this template.|}}"
else
-- Otherwise, add an additional note for possible extended versions, if they exist
if s % 2 == 1 and s >= 3 then
result = result .. string.format("{{#ifexist: %s-extended|* [[%s-extended]] &ndash; ", basic, basic)
.. "an alternate version of this template that includes "
if s == 3 then
-- Sharp-3 EDOs normally only need single arrows, but note that
-- sometimes double arrows may be needed
result = result .. "double"
elseif s == 5 then
-- Sharp-5 EDOs normally need double arrows, and note that sometimes
-- triple arrows may be needed
result = result .. "triple"
end
result = result .. " arrows.|}}"
end
end
end
end
end
-- Debugger option
if debugg == true then
result = "<syntaxhighlight lang=\"wikitext\">" .. result .. "</syntaxhighlight>"
end
end
local debugg = frame.args["debug"]
return frame:preprocess(result)
return frame:preprocess(debugg == "true" and "<pre>" .. out_str .. "</pre>" or out_str)
end
end


return p
return p