Modul:Morse
| Vorlagenprogrammierung | Diskussionen | Lua | Unterseiten | |||
| Modul | Deutsch | English
|
Modul: | Dokumentation | ||
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
Alle wissenswerten Hinweis sind vorübergehend an passender Stelle im Lua-Quellcode als Kommentar zu finden.
Modul für die Vorlage:Morse, siehe auch Dokumentation dazu.
--[[
Module:Morse 2021-09-21 © (CC BY-SA 3.0) by User:Kpfiwa Version: 3.4
--]]
frame = mw.getCurrentFrame() -- wichtig für Regionsaabfrage als Zusatzparameeter in der Vorlage "region={{int:lang}}"
-- For versions in other languages, names for the module and template must be adapted HERE
local PROS = require("Module:Morse/Prosigns") -- HERE
local DIGR = require("Module:Morse/Digraphs") -- HERE
local MOGR = require("Module:Morse/Monographs") -- HERE
local p, version = {}, {}
local size, sicec,color, bgcolor=0,0,'',''
local txt, erg = "", ""
local size = 40
local audio ITU, USA, GERKE, HM, COMPACT = {}, {}, {}, {}, {}
local version = ITU -- Version International = default
local TMP = {
["&"] = "x",
["#"] = "y",
[";"] = "z",
["0"] = "o",
["1"] = "b",
["2"] = "c",
["3"] = "d",
["4"] = "e",
["5"] = "f",
["6"] = "g",
["7"] = "h",
["8"] = "i",
["9"] = "j"
}
function usout(frame)
local ind, erg = " ", ""
for key, val in pairs(frame.args) do -- Alle Parameter sammeln zuordnen
if key == "noindent" then
ind = ""
elseif val == "word" then
erg = erg .. "  "
elseif val == "dot" then
erg = erg .. "▄ "
elseif val == "dash" then
erg = erg .. "▄▄▄ "
elseif val == "adash" then
erg = erg .. "▄▄ "
elseif val == "aspace" then
erg = erg .. " "
elseif val == "ldash" then
erg = erg .. "▄▄▄▄ "
elseif val == "zerodash" then
erg = erg .. "▄▄▄▄▄▄▄▄▄▄▄ "
end
end
return '<span style="font-family:monospace;font-size:40%;vertical-align:1.5ex; white-space:pre-wrap;">' ..
ind .. erg .. '</span>'
end -- function usout()
local function tu(a, z)
return string.sub(string.upper(a or ''), 1, z or 1)
end
local function colore(c, bg)
local css, f, tmpc = "", "", ""
local val = c or ""
local v = tu(val)
local red = "#ff0000"
local gre = "#508f10"
local blu = "#0000a0"
local yel = "#ffff00"
local wht = "#ffffff"
local orn = "#ff8000"
local blk = "#000000"
if v == "#" then -- da hat jemand die richtige Farbe eingegeben?
tmpc = c
elseif v == "Y" then
tmpc = yel -- yellow
elseif v == "B" then
tmpc = blu -- blau, blue
elseif v == "O" then
tmpc = orn -- orange
elseif v == "W" then
tmpc = wht -- weiß, white
elseif v == "S" or v == "N" or v == "D" then
tmpc = blk -- schwarz, noir, dark
elseif v == "R" then
tmpc = red -- rot
elseif v == "G" then -- gelb oder grün? (special for Germans)
if tu(c, 2) == "GR" then
tmpc = gre -- grün
else
tmpc = yel -- gelb
end -- if tu(c)
end -- if v == #
if bg then --
css = "background-color:" .. tmpc .. ";"
else
css = "color:" .. tmpc .. ";link:" .. tmpc .. ";vlink:" .. tmpc .. ";"
end
return css
end -- function colore()
local function los(t, tbl) -- für alle Fälle
local ret = t or ""
for k, v in pairs(tbl) do --
if (type(k) == "string") and (type(v) == "string") then
ret = ret:gsub(k, v)
end -- if (type(k)
end -- for k, v in pairs(tbl)
return ret
end -- function los
function monochange(txt)
ret = ""
-- mw.ustring.len(txt)
for i = 1, mw.ustring.len(txt) do
local c = mw.ustring.sub(txt, i, i)
ret = ret .. (MOGR[c] or c)
end
return ret
end -- function monochange
local function gerk() -- https://dk9vz.com/index.php/faszination-telegrafie/clemens-friedrich-gerke-1801-1888
MOGR["o"] = "nt" -- 0 zerodash
MOGR["b"] = "pllpt" -- 1
MOGR["c"] = "pplppt" -- 2
MOGR["e"] = "ppplpt" -- 3
MOGR["f"] = "lllt" -- 5
MOGR["g"] = "pppppt" -- 6
MOGR["h"] = "llppt" -- 7
MOGR["i"] = "lppppt" -- 8
MOGR["j"] = "lpplt" -- 9
MOGR["C"] = "lplpt" -- G
MOGR["F"] = "pplpt" -- G
MOGR["J"] = "plllt" -- G
MOGR["O"] = "lllt" -- G
MOGR["M"] = "plpppt" -- G
MOGR["P"] = "pppppt" -- G
MOGR["X"] = "pplpppt" -- G
MOGR["Y"] = "llpppt" -- G
MOGR["Z"] = "pllppt" -- G
return true
end --function gerk()
local function arr()
--[[ In order to avoid conflicts, these letters were exchanged with others
[&]=x, [#]=y, [;]=z, [0]=a, [1]=b, [2]=c, [3]=d, [4]=e, [5]=f, [6]=g, [7]=h, [8]=i, [9]=j --]]
MOGR["%."] = "ppllppt" -- period .
MOGR["%,"] = "plplt" -- comma ,
MOGR["?"] = "lpplpt" -- Question mar k ?
MOGR["!"] = "lllpt" -- Exclamation mark !
MOGR["x"] = "pqpppt" -- Ampersand & !!
MOGR["X"] = "llllt" -- Paragraph break -- ["%="] = "lppplt", ????
MOGR["z"] = "pppqppt" -- Semicolon
MOGR["%:"] = "lplqpqpt" -- Colon
MOGR["%'"] = "pplpqplppt" -- Apostrophe '
MOGR["%/"] = "pplqlt" -- Slash /
MOGR["%-"] = "ppppqplppt" -- Hyphen [-]
MOGR["%("] = "pppppqlpt" -- Parenthesis (open) [(]
MOGR["%)"] = "pppppqppqppt" -- Parenthesis (close) [)]
MOGR["o"] = "nt" -- 0 zerodash
MOGR["b"] = "pllpt" -- 1
MOGR["c"] = "pplppt" -- 2
MOGR["e"] = "ppplpt" -- 3
MOGR["f"] = "lllt" -- 5
MOGR["g"] = "pppppt" -- 6
MOGR["h"] = "llppt" -- 7
MOGR["i"] = "lppppt" -- 8
MOGR["j"] = "lpplt" -- 9
MOGR["C"] = "ppqpt"
MOGR["F"] = "pplpt"
MOGR["J"] = "lplpt"
MOGR["L"] = "mt" -- ldash
MOGR["O"] = "pqpt"
MOGR["P"] = "pppppt"
MOGR["Q"] = "pplpt"
MOGR["R"] = "pqppt"
MOGR["X"] = "plppt"
MOGR["Y"] = "ppqppt"
MOGR["Z"] = "pppqpt"
return true
end --function arr()
local function sound(L, txt, sz)
L = tu(L,3) -- Sonderfall SOS: File:SOS morse code.ogg
if L ~= "SOS" then
L = tu(L)
end
local n = ""
if L:find("[A-Z0-9]+") then
if L:find("%d+") then
n = " number"
end
txt ="[[File:Loudspeaker.svg|" .. math.floor(sz / 5 + 0.5) ..
"px|link=File:" .. L .. n .. " morse code.ogg]] [[Media:" ..
L .. n .. " morse code.ogg|" .. txt .. "]]"
end
return txt
end -- function sound()
function laststep(txt, version, color, bgcolor, size, sizec)
local i = 1
-- CSS-Umrahmung
-- Ein ' ' vor und nach 'span' wäre ggf. sinnvoll , ggf. nur für USA?
local csss =
'<span style="font-family:monospace;white-space:pre-wrap;font-size:' ..
tonumber(size) * (sizec or 1) ..
"%;padding-bottom:" ..
math.floor(size / 12 / (sizec or 1) + 0.5) .. "px;vertical-align:1.5px;" .. color .. bgcolor .. '"><sup>'
local csse = "</sup></span>"
while i do -- trim trailing spaces
i, j = string.find(txt, "[ts]+", -1)
if i then
txt = txt:sub(1, i - 1)
end
end -- while i
txt = txt:gsub(" ", "r") -- passt zu Wortlücke 7, umbrechbar
if version == "USA" then
txt = txt:gsub("L", "▄▄▄▄ ") -- = US 'L'
txt = txt:gsub("l", "▄▄ ") --- 2 unit
txt = txt:gsub("m", "▄▄▄▄ ")
txt = txt:gsub("q", " ")
txt = txt:gsub("n", "▄▄▄▄▄▄▄▄▄▄▄ ")
txt = txt:gsub("r", "    ")
elseif version == "GERKE" then
txt = txt:gsub("l", "▄▄ ")
txt = txt:gsub("m", "▄▄▄ ")
txt = txt:gsub("n", "▄▄▄▄▄▄▄▄▄▄▄ ") -- = US Null '0'
txt = txt:gsub("r", "    ")
elseif version == "COMPACT" then
txt = txt:gsub("l", "❙")
txt = txt:gsub("r", "  ")
txt = txt:gsub("p", "•")
txt = txt:gsub("t", " ")
elseif version == "SV" then -- Schwedisch
txt = txt:gsub("l", "<s>   </s> ")
txt = txt:gsub("p", "<s> </s> ")
csss = "'''"
csse = "'''"
elseif version == "FR" then -- Französich
txt = txt:gsub("p", ".")
txt = txt:gsub("l", "-")
txt = txt:gsub("[tr]", "/")
csss = "'''"
csse = "//'''"
else
txt = txt:gsub("l", "▄▄▄ ")
txt = txt:gsub("r", "    ")
end
txt = txt:gsub("p", "▄ ")
txt = txt:gsub("r", "    ")
txt = txt:gsub("t", "  ")
-- falls am Ende ' ', dann tauschen gegen ' ';
i, j = string.find(txt, " ", -7)
if i then
erg = txt:sub(1, i - 1)
end
return csss .. txt .. csse
end -- function laststep
function p.morse(frame) -- START
local lang = tu(frame.args["lang"]) -- Falls Sonderbehandlung erforderlich (FR, SV)
if lang == "DE" then
version = "INT"
end
-- version= tu(version,-1)
local frame = frame:getParent()
local txt, color, bgcolor = "", "", ""
for key, val in pairs(frame.args) do
--- Falls :en:Template:morse, hier gleich verzweigen
v = string.find("XadashXaspaceXdotXdashXnoindentXldashXwordXzerodashX", "X" .. val .. "X")
if v or key == "noindent" then
return usout(frame) -- und finito hier!
end
key = tu(key)
if key == "R" then
val = tu(val, 2)
version = val -- FR, SV
end
if key == "1" then
txt = val
if #txt == 1 then
version = "HM" -- quasi Kurzverfahren
end
elseif key == "2" then
size = tonumber(val) or 40
elseif key == "Z" or key == "C" then
color = colore(val)
elseif key == "H" or key == "B" then
bgcolor = colore(val, 1)
elseif key == "V" then -- Regionsangabe
val = tu(val)
if val == "U" then
version = "USA"
arr() -- will transfer letters to USA code
elseif val == "K" or val == "C" then
version = "COMPACT"
sizec = 2
elseif val == "G" then
gerk()
version = "GERKE"
elseif val == "A" or val == "Q" or val == "H" then
version = "HM"
end
elseif key == "A" then
audio = txt
end
end -- for key, val
--
local erg = string.upper(txt) or ""
erg = los(erg, TMP)
if version ~= "HM" and version ~= "FR" and version ~= "SV" then
erg = los(erg, PROS)
erg = los(erg, DIGR)
end
erg = monochange(erg)
erg = laststep(erg, version, color, bgcolor, size, sizec)
-- Audio-Eimbindung
if audio then
erg = sound(audio, erg, size)
end
-- UND AB GEHT DIE POST!
return erg
end -- function p.f(frame)
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.