Das Modul:Morse setzt via Vorlage:Morse einen beliebigen Text in darstellbaren Morsecode um. Die 'Textgröße' ist auf 40 % eingestellt, kann aber mit dem 2. Parameter umgestellt werden (Siehe [[Vorlage:Morse/Doku|Dokumentation. Eine Erweiterung des umsetzbaren Zeichensatzes (z.B. arabisch usw.) ist generell Möglich und bei Bedarf nachzutragen. Es werden keine Grafiken eingesetzt, daher ist ein schneller Ablauf gewährleistet.
Die für den US-Railroadcode und Gerke-Code abweichende Zeichen/Pausenlängen werden umgesetzt.
Der gesamte Aufbau des Moduls ist nicht 100 % optimiert, um die Lesbarkeit zu erhalten. Es gibt ein paar ‚Umwege‘, die nicht unbedingt nötig sind, aber Verstänlichkeit dienen. Bis auf wenige Aufrufe von mw-Erweiterungen ist das Modul in einer Standard-Lua-Umgebung, z.B. mit „ZeroBrane Studio“) lauffähig. Das vereinfacht die Wartung spürbar. Jedoch verarbeitet Lua nicht UTF-8 korrekt, das wird daher mit „mw.ustring“ verarbeitet.
Da das Modul auch in anderen Sprachräumen eingesetzt wird, sind sprachabhängig definierte Ergänzungen, Verfahren und Vorlagen unerwünscht, um einheitliche Wartung zu gewährleisten.
Die in Morsecode umzusetzenden Zeichen sind in tabellen-Dateien ausgelagert, um auch unerfahrenen Anwendern eine leichte Bearbeitung zu ermöglichen.
- Da die Tabellen teilweise temporär überschrieben werden, ist mw.loadData(...) nicht geeignet (readonly).
Variable | Datei | Inhalt/Zweck |
---|---|---|
PROS{} | Modul:Vorlage/Morse/Prosigns | Von ITU festgelegte Zeichenfolgen, die mit verkürztem Code ausgegeben werden. Beispiel: SOS = ▄ ▄ ▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄ ▄ ▄ statt ▄ ▄ ▄ ▄▄▄ ▄▄▄ ▄▄▄ ▄ ▄ ▄ |
DIGR{} | Modul:Vorlage/Morse/Digraphs | Kurze Buchstabenfolgen, meist für Sonderzeichen, die in einen Code umgesetzt bzw in verkürztem Code ausgegeben werden. Beispiel SX = $= ▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄▄▄ statt ▄ ▄ ▄ ▄▄▄ ▄ ▄ ▄▄▄ |
MOGR{} | Modul:Vorlage/Morse/Monographs | Einzelzeichen aller Art, auch nichtlateinische Zeichensätze. Jedem Buchstaben ist ein Code zugeeordnet. A–Z nur als Versalien, da die Minuskeln als steuerzeichen eingesetzt werden (siehe Variable TMP{}) |
Variable | Werte | Bedeutung, Versendung |
---|---|---|
TMP{} | Zeichen &#;0–9 |
wären im Programmablauf mit der dezimalen Darstellung der UTF-8-Codes für die Punkt-, /Strich- und Leerzeichen verwechselbar Beispiel: ▄ = ▄
|
Beispiel | Beispiel | Beispiel |
Beispiel | Beispiel | Beispiel |
Beispiel | Beispiel | Beispiel |
Aufruf | Aufgabe | Parameter |
---|---|---|
p.f(frame) | Einstiegsfunktion, Parameterabfrage, Ablaufsteuerung, Ausgabe als Tabelle | frame = Wertereübergabe als Tabelle aus der Vorlage:Morse |
Beispiel | Beispiel | Beispiel |
Beispiel | Beispiel | Beispiel |
--[=[ p: Dit = kurz = ▄ l: Ein Dah = lang ist dreimal so lang wie ein Dit. ▄▄▄
Die Pause zwischen zwei gesendeten Symbolen ist ein Dit lang. und ist bereits vorgegeben
t: Zwischen Buchstaben in einem Wort wird eine Pause von der Länge eines Dah (oder drei Dits) eingeschoben.
Da ein Dit jedem Zeichen automatisch folgt, werden es 2 weitere , insgesamt: 3 nbsp
s: Die Länge der Pause zwischen Wörtern entspricht sieben Dits, also 6 + 1 Siehe auch: https://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1677-1-200910-I!!PDF-E.pdf#page=5 --]=]
function usout(frame) -- nur zur Kompatibilität mit :en:Template:morse
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 '' ..
ind .. erg .. ''
end -- function usout()
local function tu(a, z) -- wandelt in Versalien und extrahiert erstes Zeichen oder Anzahl z
return string.sub(string.upper(a), 1, z or 1)
end --[=[ colore funktioniert nicht un Kombinaruin mit audia, da links (bei audio via[[ Media: von WP generell (blau) eingefärbt werden. Hier wird versucht CSS link und vlink u überschreiben, funktioniert aber nicht --]=] local function colore(c, bg) -- c==Farbe/color, bg==Kennzeichen Background
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) -- searches in the Monographs-List, if val exists return it
ret = "" -- mw.ustring.len(txt) for i = 1, mw.ustring.len(txt) do -- in string txt jeden Buchstaben abfragen local c = mw.ustring.sub(txt, i, i) -- mw.ustring.sub(txt, i, i) ret = ret .. (MOGR[c] or c) end return ret
end -- function monochange
local function gerk() -- translate in Gerke-code; differs partially from international
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"] = "lpppt" -- G MOGR["F"] = "pplpt" -- G MOGR["J"] = "ppt" -- G MOGR["O"] = "plpppt" -- 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() -- translate in US Railroad code; differs partially from international
--[[ 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) -- für Audioeinbindung, L=letter, txt=text, sz = size
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 =" [[Media:" ..
L .. n .. " morse code.ogg|" .. txt .. "]]"
end return txt
end -- function sound()
function laststep(txt, version) -- cut all trailing spaces and translate Int to US and make code
local i = 1 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 --[[ da bei Umsetzung von <span style='opacity ... Endlosschleifen entstehen können, wird sie span-Angabe temporär umgesetzt aif v und w --]] txt = txt:gsub(" ", "r") -- passt zu Wortlücke 7, umbrechbar --- if version == "USA" then txt = txt:gsub("L", "▄▄▄▄ ") -- = US 'l/L' txt = txt:gsub("l", "▄▄▄ ") -- lang/dah = 2 dit + Pause txt = txt:gsub("m", "▄▄▄▄ ") -- lang/dah = 2 dit + Pause txt = txt:gsub("q", " ") -- aspaace txt = txt:gsub("n", "▄▄▄▄▄▄▄▄▄▄▄ ") -- = US Null '0' txt = txt:gsub("r", " ") -- space US elseif version == "GERKE" then txt = txt:gsub("l", "▄▄ ") -- lang/dah = 2 dit + Pause txt = txt:gsub("m", "▄▄▄ ") -- lang/dah = 2 dit + Pause txt = txt:gsub("n", "▄▄▄▄▄▄▄▄▄▄▄ ") -- = US Null '0' txt = txt:gsub("r", " ") -- space US elseif version == "COMPACT" then txt = txt:gsub("l", "❙") -- lang/dah txt = txt:gsub("r", " ") -- space txt = txt:gsub("p", "•") -- kurz/dit + Pause txt = txt:gsub("t", " ") -- Zeichentrenner else txt = txt:gsub("l", "▄▄▄ ") -- lang/dah = 3 dit + Pause txt = txt:gsub("r", " ") -- space 4 umbrechbar end txt = txt:gsub("p", "▄ ") -- kurz/dit + Pause txt = txt:gsub("r", " ") -- space 4 umbrechbar " txt = txt:gsub("t", " ") -- zwei Buchstabentrenner ohne Umbruch, 1 automatisch vorgegeben = 3
return txt
end -- function laststep
function p.f(frame) -- START
local frame = frame:getParent() local txt, color, bgcolor = "", "", "" for key, val in pairs(frame.args) do -- Alle Parameter sammeln und Zeilen zuordnen --- Falls :en:Template:morse, hier gleich verzweigeen 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 == "1" then txt = val if #txt == 1 then version = "HAM" -- quasi Kurzverfahren end elseif key == "2" then size = tonumber(val) or 40 elseif key == "Z" or key == "C" then -- zeichenfarbe derzeit noch nicht ergänzt. color = colore(val) elseif key == "H" or key == "B" then -- Hintergrundfarbe derzeit noch nicht ergänzt. 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() -- will transfer letters to Gerke-code version = "GERKE" -- noch in Arbeit elseif val == "A" or val == "Q" or val == "H" then version = "HAM" end elseif key == "A" then -- Audioiedergabe einem Zeichens audio = txt end end -- for key, val
local erg = string.upper(txt) or "" -- so weit es geht, alles Versalien, da einige Gemeine als 'Steuerzeichen' gebraucht werden. erg = los(erg, TMP) -- Vorbereitung, kritische Zeichen umsetzen if version ~= "HAM" then erg = los(erg, PROS) -- Prosigns temporär umsetzen erg = los(erg, DIGR) -- Digraphs temporär in Buchstaben unmsetzen end erg = monochange(erg) -- Monographs temporär in Buchstaben unmsetzen erg = laststep(erg, version) -- trim trailing spaces -- Audio-Eimbindung if audio then erg = sound(audio, erg, size) end -- falls am Ende ' ', dann tauschen gegen ' '; i, j = string.find(erg, " ", -7) if i then erg = erg:sub(1, i - 1) end
-- CSS-Umrahmung
-- Endbearbeitung: das ' ' vor und nach 'span' ist ggf. sinnvoll , ggf. nur für USA?
erg =
'' .. erg .. ""
-- UND AB GEHT DIE POST!
return erg
end -- function p.f(frame)
return p
Diese Seite ist die Dokumentations-Unterseite von Modul:Benutzer:Kpfiwa/Morse. Näheres unter Wikipedia:Lua/Seitenorganisation und Dokumentation. |