Modul:Benutzer:Kpfiwa/Morse
aus Wikipedia, der freien encyclopedia
--[=[ Mudul:Morse 2021-08-30 by Kpfiwa Setzt einen beliebigen Text in darstellbaren Morsecode um. Die 'Textgröße' ist auf 40 % eingestellt, kann aber mit dem 2. Parameter umgestellt werden. Eine Erweiterung ders umsetzbaren Zeichensatzes (kyrillisch, hebräisch, arabisch) usw. ist denkbaar und bei Bedarf nachzutragen. Auch die in Aerika abweichende Zeichen/Pausenlängen wären ergänzbar.
Der gesamte Aufbau macht ein paar Umwege, die nicht unbedingt nötig sind. Es läuft aber auch ohne mw-Erweiterungen und zischenergebnisse lassen sich via print() in externer Umgebung (z.B. ZeroBrane Studio) darstellen. Das vereinfacht die Wartung enorm.
Da das Modul auch in anderen Sprachräumen eingesetzt wird, sollteen nationale Ergänzungen und Verfahren außen vor bleiben, um einheitliche Wartung zu gewährleisten.
Wer etwas besser weiß, darf es gerne einbringen. Nörgeln ist nicht konstruktiv und projektfördernd, auch wenn einige gerne den Experten und Oberlehrer raushängen. --]=] local p = {} local txt = "" local erg = "" local region = "INT" local size = 40 EU = { --[[ 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 --]]
["p"] = "▄ ", -- kurz/dit + Pause ["l"] = "▄▄▄ ", -- lang/dah = 3 dit + Pause ["t"] = " ", -- zwei Buchstabentrenner ohne Umbruch, 1 automatisch vorgegeben = 3 ["s"] = " ", -- passt zu Wortlücke 7, umbrechbar
} -- &, # , ; im Text umsetzen auf x, y, z, somit bei der Weiterveraarbeitung keine Verwechslung mit UTF-8-Dezimalwert wie ▄ Zahlen im Text umsetzen 0-9 zu a - j (klein!), damit keine Konflikte mit TF-8-Dezimalwert -- local TMP = {
["&"] = "x", ["#"] = "y", [";"] = "z", ["0"] = "a", ["1"] = "b", ["2"] = "c", ["3"] = "d", ["4"] = "e", ["5"] = "f", ["6"] = "g", ["7"] = "h", ["8"] = "i", ["9"] = "j"
} --[[
Mehrfachzeichen zuerst abarbeiten, da einige ohne Buchstabentrenner übergeben werden, sofort umsetzen. --]]
local ABC2 = {
["AAA"] = ".", ["HH"] = "ppppppppt", -- Fehler, Irrung ["IMI"] = "?", ["MIM"] = ",", ["NNN"] = ";", ["SOS"] = "pplllpppt", -- SOS zusammenhängend ["AC"] = "@", ["AR"] = "+", ["AR"] = "plplpt", -- Spruchende ["BA"] = "-", ["BT"] = "=", ["BT"] = "lppplt", -- Pause ["CH"] = "llllt", -- CH ["DN"] = "/", ["JN"] = "'", -- ' Anführungszeichen ["KA"] = "lplplt", -- Spruchanfang ["KK"] = ")", ["KN"] = "(", ["OS"] = ":", ["SK"] = "ppplplt", -- Verkehrsende ["UK"] = "_", -- _ Underline ["VE"] = "ppplpt", -- verstanden [" "] = "s" -- Leereichen zwischen Wörtern
}
local ABC = {
['%"'] = "plpplpt", ["_"] = "ppllplt", -- UK [";"] = "lplplpt", -- Semikolon ["!"] = "lplpllt", ["¡"] = "llpppl", ["?"] = "ppllppt", -- IMI ["¿"] = "pplplt", ["@"] = "pllplpt", ["%-"] = "lpppplt", -- BA ["%,"] = "llppllt", -- MIM ["%:"] = "lllpppt", -- OS ["%."] = "plplplt", -- AAA ["%'"] = "pllllpt", -- JN ["%("] = "lpllpt", -- KN ["%)"] = "lpllplt", -- KK ["%/"] = "lpplpt", -- DN ["%+"] = "plplpt", -- AR ["%="] = "lppplt", -- BT ["$$"] = "ppplpplt", ["a"] = "lllllt", ["Á"] = "p11p1t", ["á"] = "p11p1t", ["À"] = "p11p1t", ["à"] = "p11p1t", ["Â"] = "p11p1t", ["â"] = "p11p1t", ["Å"] = "p11p1t", ["å"] = "p11p1t", ["ã"] = "p11p1t", ["Ã"] = "p11p1t", ["Ä"] = "p1p1t", ["ä"] = "p1p1t", ["Ą"] = "p1p1t", ["ą"] = "p1p1t", ["A"] = "plt", ["À"] = "pllplt", ["à"] = "pllplt", ["Å"] = "pllplt", ["å"] = "pllplt", ["Ä"] = "plplt", ["ä"] = "plplt", ["æ"] = "p1p1t", ["Æ"] = "p1p1t", ["B"] = "lpppt", ["b"] = "pllllt", ["Č"] = "11pt", ["č"] = "11pt", ["Ć"] = "1p1ppt", ["ć"] = "1p1ppt", ["Ĉ"] = "1p1ppt", ["ĉ"] = "1p1ppt", ["ç"] = "1p1ppt", ["Ç"] = "1p1ppt", ["C"] = "lplpt", ["c"] = "pplllt", ["CH"] = "llllt", ["D"] = "lppt", ["Ð"] = "pp11pt", ["ð"] = "pp11pt", ["d"] = "pppllt", ["Ê"] = "1pp1pt", ["ê"] = "1pp1pt", ["E"] = "pt", ["È"] = "p1pp1t", ["è"] = "p1pp1t", ["È"] = "plpplt", ["è"] = "plpplt", ["É"] = "pp1ppt", ["é"] = "pp1ppt", ["Ë"] = "pp1ppt", ["ë"] = "pp1ppt", ["Ę"] = "pp1ppt", ["ę"] = "pp1ppt", ["É"] = "pplppt", ["é"] = "pplppt", ["e"] = "pppplt", ["F"] = "pplpt", ["f"] = "pppppt", ["Ğ"] = "11p1pt", ["ğ"] = "11p1pt", ["Ĝ"] = "11p1pt", ["ĝ"] = "11p1pt", ["G"] = "llpt", ["g"] = "lppppt", ["Ĥ"] = "1111t", ["ĥ"] = "1111t", ["h"] = "llpppt", ["H"] = "ppppt", ["Ï"] = "1pp11t", ["ï"] = "1pp11t", ["i"] = "lllppt", ["Ì"] = "p111pt", ["ì"] = "p111pt", ["İ"] = "p1pp1t", ["İ"] = "p1pp1t", ["I"] = "ppt", ["j"] = "llllpt", ["Ĵ"] = "p111pt", ["ĵ"] = "p111pt", ["J"] = "plllt", ["K"] = "lplt", ["Ł"] = "p1pp1t", ["ł"] = "p1pp1t", ["L"] = "plppt", ["M"] = "llt", ["Ń"] = "11p11t", ["ń"] = "11p11t", ["Ñ"] = "11p11t", ["ñ"] = "11p11t", ["Ñ"] = "llplt", ["ñ"] = "llplt", ["N"] = "lpt", ["Ó"] = "111pt", ["ó"] = "111pt", ["Ò"] = "111pt", ["ò"] = "111pt", ["Ô"] = "111pt", ["ô"] = "111pt", ["Ö"] = "111pt", ["ö"] = "111pt", ["Ø"] = "111pt", ["ø"] = "111pt", ["O"] = "lllt", ["Ö"] = "lllpt", ["ö"] = "lllpt", ["P"] = "pllpt", ["Q"] = "llplt", ["R"] = "plpt", ["š"] = "1111t", ["Š"] = "1111t", ["Ș"] = "1111t", ["ș"] = "1111t", ["Ş"] = "p11ppt", ["ş"] = "p11ppt", ["S"] = "pppt", ["ŝ"] = "ppp1pt", ["Ŝ"] = "ppp1pt", ["Ś"] = "ppp1pppt", ["ś"] = "ppp1pppt", ["ß"] = "pppllppt", -- SZ ["ẞ"] = "pppllppt", -- SZ versal ["ß"] = "ppppppt", ["ß"] = "ppppppt", ["T"] = "lt", ["Ù"] = "pp11t", ["ù"] = "pp11t", ["Ŭ"] = "pp11t", ["ŭ"] = "pp11t", ["ü"] = "pp11t", ["Ü"] = "pp11t", ["U"] = "pplt", ["Ü"] = "ppllt", ["V"] = "ppplt", ["W"] = "pllt", ["X"] = "lpplt", ["x"] = "plpppt", ["y"] = "#t", ["Y"] = "lpllt", ["Ž"] = "11pp1t", ["ž"] = "11pp1t", ["Ż"] = "11pp1t", ["ż"] = "11pp1t", ["Ź"] = "11pp1pt", ["ź"] = "11pp1pt", ["Z"] = "llppt", ["z"] = "lplplpt", -- NNN, umgesetztes Semikolon ["þ"] = "p11ppt", ["Þ"] = "p11ppt", ["α"] = "p1t", ["Α"] = "p1t", ["Β"] = "1pppt", ["β"] = "1pppt", ["Γ"] = "11pt", ["γ"] = "11pt", ["Δ"] = "1ppt", ["δ"] = "1ppt", ["Ε"] = "pt", ["ε"] = "pt", ["Ζ"] = "11ppt", ["ζ"] = "11ppt", ["Η"] = "ppppt", ["η"] = "ppppt", ["Θ"] = "1p1pt", ["θ"] = "1p1pt", ["Ι"] = "ppt", ["ι"] = "ppt", ["Κ"] = "1p1t", ["κ"] = "1p1t", ["Λ"] = "p1ppt", ["λ"] = "p1ppt", ["Μ"] = "11t", ["μ"] = "11t", ["Ν"] = "1pt", ["ν"] = "1pt", ["Ξ"] = "1pp1t", ["ξ"] = "1pp1t", ["Ο"] = "111t", ["ο"] = "111t", ["Π"] = "p11pt", ["π"] = "p11pt", ["Ρ"] = "p1pt", ["ρ"] = "p1pt", ["Σ"] = "pppt", ["σ"] = "pppt", ["Τ"] = "1t", ["τ"] = "1t", ["Υ"] = "1p11t", ["υ"] = "1p11t", ["Φ"] = "pp1pt", ["φ"] = "pp1pt", ["Χ"] = "1111t", ["χ"] = "1111t", ["Ψ"] = "11p1t", ["ψ"] = "11p1t", ["Ω"] = "p11t", ["ω"] = "p11t", ["а"] = "p1t", ["А"] = "p1t", ["Б"] = "1pppt", ["б"] = "1pppt", ["В"] = "p11t", ["в"] = "p11t", ["Г"] = "11pt", ["г"] = "11pt", ["Ґ"] = "11pt", ["ґ"] = "11pt", ["Д"] = "1ppt", ["д"] = "1ppt", ["Е"] = "pt", ["е"] = "pt", ["Є"] = "pp1ppt", ["є"] = "pp1ppt", ["Ж"] = "ppp1t", ["ж"] = "ppp1t", ["З"] = "11ppt", ["з"] = "11ppt", ["И"] = "ppt", ["и"] = "ppt", ["Ї"] = "p111pt", ["ї"] = "p111pt", ["І"] = "ppt", ["і"] = "ppt", ["Й"] = "p111t", ["й"] = "p111t", ["К"] = "1p1t", ["к"] = "1p1t", ["Л"] = "p1ppt", ["л"] = "p1ppt", ["М"] = "11t", ["м"] = "11t", ["Н"] = "1pt", ["н"] = "1pt", ["О"] = "111t", ["о"] = "111t", ["П"] = "p11pt", ["п"] = "p11pt", ["Р"] = "p1pt", ["р"] = "p1pt", ["С"] = "pppt", ["с"] = "pppt", ["Т"] = "1t", ["т"] = "1t", ["У"] = "pp1t", ["у"] = "pp1t", ["Ф"] = "pp1pt", ["ф"] = "pp1pt", ["Х"] = "ppppt", ["х"] = "ppppt", ["Ц"] = "1p1pt", ["ц"] = "1p1pt", ["Ч"] = "111pt", ["ч"] = "111pt", ["Ш"] = "1111t", ["ш"] = "1111t", ["Щ"] = "11p1t", ["щ"] = "11p1t", ["Ъ"] = "11p11t", ["ъ"] = "11p11t", ["Ы"] = "1p11t", ["ы"] = "1p11t", ["Ь"] = "1pp1t", ["ь"] = "1pp1t", ["Э"] = "pp1ppt", ["э"] = "pp1ppt", ["Ю"] = "pp11t", ["ю"] = "pp11t", ["Я"] = "p1p1t", ["я"] = "p1p1t", -- Erweiterung auf andere Zeichensätze möglich!
}
function los(t, tbl)
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
TEST
--txt = "äöüÄÖÜß12345=,.abDsef EnDe SZ SOS NnN AC -_&#,;&#$" --txt = " 6789012345 =,.abDsef EnDe SZ SOS NnN AC -_&,;&#$" -- Kompleette Zeichenkete auf Großbuchstaben (macht nur ASCII) --local erg = string.upper(txt) or ""
function p.f(frame)
local frame = frame:getParent() local txt = "" for key, val in pairs(frame.args) do -- Alle Parameter sammeln und Zeilen zuordnen if key == 1 then txt = val elseif key == 2 then size = tonumber(val) or 40 elseif key == 3 then region = val or region -- derzeit noch nicht ergänzt. end -- if key= end -- for key, val local erg = string.upper(txt) or "" erg = los(erg, TMP) -- Vorbereitung erg = los(erg, ABC2) -- Doppel-/Mehrfachzeichen umsetzen erg = los(erg, ABC) -- Zeichen temporär in Buchstaben unmsetzen erg = los(erg, EU) -- Buchstaben werden zu Code
-- CSS-Umrahmung
erg = '' .. erg .. ""
-- UND AB GEHT DIE POST!
return erg
end -- function p.f(frame)
return p