Modul:Benutzer:Kpfiwa/Morse
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
--[=[ 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 = '<span style="font-family:monospace;font-size:' .. tonumber(size) .. '%; vertical-align: 1.5ex;">' .. erg .. "</span>"
-- UND AB GEHT DIE POST!
return erg
end -- function p.f(frame)
return p