Modul:Adatformázó
Adatformázó[mi ez?] • [dokumentáció: mutat, ] • [tesztek: létrehozás]
-----------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------ Adatformázó modul ----------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
-- A modult hívó sablonok:
-- {{Adat|szám|mértékegység|jel|tizedesvesszőig}}
-- {{Tagol|szám|tizedesvesszőig}}
----------------------------------------- Mértékegységek táblázata az "Adat" sablonhoz --------------------------------------
-- A táblázat bővíthető.
-- Bővítéskor az új mértékegységet a megfelelő csoportba (ALAPMENNYISÉGEK/MECHANIKA/ELEKTROMOSSÁGTAN stb.) helyezd el!
-- Ha kell, illessz be új csoportot!
-- Ha bővítetted, a bővítést (a mértékegységek sorrendjét megtartva) vezesd át az "Adat" sablon leírásába is!
------------------------------------------------------ A táblázat kezdete ---------------------------------------------------
local ME = {} -- Új táblázat definiálása
------------------------- ALAPMENNYISÉGEK
-- Hosszúság
ME["um"] = "µm"
-- Idő
ME["us"] = "µs"
-- Tömeg
ME["ug"] = "µg"
-- Anyagmennyiség
ME["umol"] = "µmol"
-- Hőmérséklet
ME["oC"] = "°C"
ME["oF"] = "°F"
ME["oR"] = "°R"
-- Áramerősség
ME["uA"] = "µA"
------------------------- TÉRMENNYISÉGEK:
-- Síkszög
ME["o"] = "°"
ME["'"] = "´"
ME['"'] = "˝"
-- Terület
ME["km2"] = "km<sup>2</sup>"
ME["m2"] = "m<sup>2</sup>"
ME["dm2"] = "dm<sup>2</sup>"
ME["cm2"] = "cm<sup>2</sup>"
ME["mm2"] = "mm<sup>2</sup>"
-- Térfogat
ME["km3"] = "km<sup>3</sup>"
ME["m3"] = "m<sup>3</sup>"
ME["dm3"] = "dm<sup>3</sup>"
ME["cm3"] = "cm<sup>3</sup>"
ME["mm3"] = "mm<sup>3</sup>"
------------------------- MECHANIKA:
-- Gyorsulás
ME["m/s2"] = "m/s<sup>2</sup>"
-- Szögsebesség, fordulatszám
ME["s-1"] = "s<sup>−1</sup>"
ME["min-1"] = "min<sup>−1</sup>"
-- Szöggyorsulás
ME["rad/s2"] = "rad/s<sup>2</sup>"
ME["s-2"] = "s<sup>−2</sup>"
-- Sűrűség
ME["kg/m3"] = "kg/m<sup>3</sup>"
ME["g/cm3"] = "g/cm<sup>3</sup>"
ME["kg/dm3"] = "kg/dm<sup>3</sup>"
-- Felületi (tömeg)sűrűség
ME["kg/m2"] = "kg/m<sup>2</sup>"
ME["g/m2"] = "g/m<sup>2</sup>"
-- Térfogatáram (vízhozam)
ME["m3/s"] = "m<sup>3</sup>/s"
ME["dm3/s"] = "dm<sup>3</sup>/s"
ME["cm3/s"] = "cm<sup>3</sup>/s"
ME["m3/min"] = "m<sup>3</sup>/min"
ME["dm3/min"] = "dm<sup>3</sup>/min"
ME["cm3/min"] = "cm<sup>3</sup>/min"
ME["m3/h"] = "m<sup>3</sup>/h"
ME["dm3/h"] = "dm<sup>3</sup>/h"
ME["cm3/h"] = "cm<sup>3</sup>/h"
------------------------- ELEKTROMOSSÁGTAN:
-- Feszültség
ME["uV"] = "µV"
-- Kapacitás
ME["uF"] = "µF"
-- Ellenállás
ME["mohm"] = "mΩ"
ME["ohm"] = "Ω"
ME["kohm"] = "kΩ"
ME["Mohm"] = "MΩ"
ME["Gohm"] = "GΩ"
--Fajlagos ellenállás
ME["ohmm"] = "Ω·m"
------------------------- EGYÉB:
-- Százalék
ME["%"] = "%"
--Népsűrűség
ME["fő/km2"] = "fő/km<sup>2</sup>"
--------------------------------------------------- Mértékegységek táblázatának vége ----------------------------------------
------------------------------------------------------- Változók deklarációja -----------------------------------------------
ures = "" -- Üres string
SP = " " -- Szóköz (SPace)
NBSP = " "
NBSP = mw.text.decode(NBSP, " ") -- Nem-törhető szóköz (U+00A0)
minuszjel = "−"
minuszjel = mw.text.decode(minuszjel, "−") -- A − karakter (U+2212)
N = 0 -- A szám előtti NBSP sor hossza táblázatban
local getArgs = require('Module:Arguments').getArgs
--------------------------------------------------------- A deklarációk vége ------------------------------------------------
------------------------------------------------- Az "Adat" végrahajtásának kezdete -----------------------------------------
p = {}
function p.adat(frame)
szam = getArgs(frame)[1]
egyseg = getArgs(frame)[2]
jel = getArgs(frame)[3]
vesszoig = getArgs(frame)[4]
formal() -- A szám formázása (függvényhívás)
if jel then
jel = jel..NBSP.."="..NBSP -- Jel és egyenlőségjel a szám elé
else
jel = ures
end
if egyseg then
if ME[egyseg] then -- Ha van formázott ...
if (egyseg == "o" or egyseg == "'" or egyseg == """ or egyseg == "%") then-- Ha az egység szögfok vagy szögperc vagy szögmásodperc vagy % ...
egyseg = ME[egyseg] -- Egség cseréje a formázottra (NBSP nélkül)
else
egyseg = NBSP..ME[egyseg] -- Egség cseréje a NBSP+formázottra
end
else
egyseg = NBSP..egyseg -- Egség cseréje a NBSP+egyseg
end
else
egyseg = ures
end
return jel..szam..egyseg
end
-------------------------------------------------- Az "Adat" végrahajtásának vége- ------------------------------------------
------------------------------------------------- A "Tagol" végrahajtásának kezdete -----------------------------------------
function p.ertek(frame)
szam = getArgs(frame)[1]
vesszoig = getArgs(frame)[2]
formal() -- A szám formázása (függvényhívás)
return szam
end
--------------------------------------------------- A "Tagol" végrahajtásának vége ------------------------------------------
------------------------------------------------- A számot formázó függvény kezdete -----------------------------------------
function formal()
if not szam then return "'''HIBA a sablonhívásban''' (nincs bemenő adat)." end -- HIBAÜZENET, ha nincs szám
vesszoP = 0 -- A vessző pozíciója
expP = 0 -- Az exponens jel pozíciója
Karakter = {} -- Tábla a szám karaktereinek
K = mw.ustring.sub(szam,1,1)
if (K == "-" or K == "–" or K == minuszjel) then -- Kötőjel, (Alt+0150), minuszjel ...
negativ = true
szam = mw.ustring.sub(szam,2,-1) -- a mínuszjel levágása a számról
end
hossz = mw.ustring.len(szam) -- A szám paraméter hossza
for i = 1, hossz do
K = mw.ustring.sub(szam,i,i) -- A szám karakterekre bontása
if K == "," then -- Vessző
if i == 1 then return "Nincs megadva egészrész." end -- Hibaüzenet
if i == hossz then
return "Nincs törtrész a tizedesvessző után." -- Hibaüzenet
end
if exponens then return "Tizedesvessző az exponensben." end -- Hibaüzenet
if tizedes then return "Több vessző a számban." end -- Hibaüzenet
vesszoP = i -- Vessző helye a számban (vesszoP)
tizedes = true -- Van tizedesvessző a számban
elseif (K == "e" or K == "E") then -- Exponensjel
if exponens then return "Több exponensjel a számban." end -- Hibaüzenet
if (i == vesszoP + 1 and i ~= 1) then
return "Nincs törtrész a tizedesvessző után." -- Hibaüzenet
end
if i == hossz then return "Nincs kitevő az exponensjel után." end -- Hibaüzenet
expP = i -- Exponens helye a számban (expP)
exponens = true -- Van exponens
elseif (K == "-" or K == "–" or K == minuszjel) then -- Kötőjel, (Alt+0150), minuszjel ...
K = minuszjel -- ... cseréje mínuszjelre
if not exponens then return "Mínuszjel hibás helyen." end -- Hibaüzenet
if (exponens and i ~= expP + 1) then return "Mínuszjel hibás helyen." end -- Hibaüzenet
if (exponens and i == hossz) then return "Nincs szám az exponensben." end -- Hibaüzenet
elseif (K < "0" or K > "9") then -- Nem számjegy
if (K == SP or K == NBSP) then K = "<szóköz>" end -- Szóközök helyett felirat
return "Hibás karakter a számban: "..K.."." -- Hibaüzenet
end
Karakter[i] = K -- A szám karakterei a Karakter táblába
end
szam = "" -- A szám változó kiürítése
if ((not tizedes) and expP == 1) then -- Csak exponens van (1)
szam = "10<sup>" -- 10 és felső index nyitás
for i = 2, hossz do -- Kitevő összeállítása
szam = szam..Karakter[i]
end
szam = szam.."</sup>" -- Felső index zárása
end
if ((not tizedes) and (not exponens)) then -- Egész szám, exponens nincs (2)
for i = hossz, 1, -3 do -- Az egészrész összeállítása
for j = 0, 2 do
if i - j > 0 then szam = Karakter[i-j]..szam end
end
szam = SP..szam -- Három számjegy elé szóköz
end
szam = mw.text.trim(szam) -- Esetleges első szóköz törlése
if ((not vesszoig) and hossz == 4) then -- Eredeti hossz = 4, (de tagolva 5)
szam = mw.ustring.sub(szam,-5,-5)..mw.ustring.sub(szam,-3,-1) -- Ha nem táblázat, négyjegyűt nem tagol
end
end
if (tizedes and (not exponens)) then -- Tizedestört, exponens nincs (3)
for i = vesszoP - 1, 1, -3 do -- Az egészrész összeállítása
for j = 0, 2 do
if i - j > 0 then szam = Karakter[i-j]..szam end
end
szam = SP..szam -- Három számjegy elé szóköz
end
szam = szam.."," -- Tizedesvessző
for i = vesszoP + 1, hossz, 3 do -- Az törtrész összeállítása
for j = 0, 2 do
if i + j <= hossz then szam = szam..Karakter[i+j] end
end
szam = szam..SP -- Három számjegy után szóköz
end
szam = mw.text.trim(szam) -- Esetleges első és utolsó szóköz törlése
end
if ((not tizedes) and expP > 1) then -- Egész mantissza és exponens (4)
for i = expP - 1, 1, -3 do -- Az egészrész összeállítása
for j = 0, 2 do
if i - j > 0 then szam = Karakter[i-j]..szam end
end
szam = SP..szam -- Három számjegy után szóköz
end
szam = mw.text.trim(szam) -- Esetleges első szóköz törlése
szam = szam.."·10<sup>" -- Mantissza·10 és felső index nyitás
for i = expP + 1, hossz do -- Kitevő összeállítása
szam = szam..Karakter[i]
end
szam = szam.."</sup>" -- Felső index zárása
end
if (tizedes and exponens) then -- Tizedestört mantissza és exponens (5)
for i = vesszoP - 1, 1, -3 do -- Az egészrész összeállítása
for j = 0, 2 do
if i - j > 0 then szam = Karakter[i-j]..szam end
end
szam = SP..szam -- Három számjegy elé szóköz
end
szam = szam.."," -- Tizedesvessző
for i = vesszoP + 1, expP - 1, 3 do -- Az törtrész összeállítása
for j = 0, 2 do
if i + j < expP then szam = szam..Karakter[i+j] end
end
szam = szam..SP -- Három számjegy után szóköz
end
szam = mw.text.trim(szam) -- Esetleges első és utolsó szóköz törlése
szam = szam.."·10<sup>" -- Mantissza·10 és felső index nyitás
for i = expP + 1, hossz do -- Kitevő összeállítása
szam = szam..Karakter[i]
end
szam = szam.."</sup>" -- Felső index zárása
end
if vesszoig then -- Szám előtti NBSP sorhossz kiszámítása
hossz = mw.ustring.len(szam)
for i = 1, hossz do
if (mw.ustring.sub(szam, i, i) == ",") then
N = i - 1
end
if (mw.ustring.sub(szam, i, i + 7) == "·10<sup>") then
N = i -1
end
end
if N == 0 then
N = hossz
end
if (mw.ustring.sub(szam, 1, 7) == "10<sup>") then
N = 0
end
N = vesszoig - N
end
if negativ then
szam = minuszjel..szam -- Negatív előjel visszaállítása
N = N -1
end
szam = mw.ustring.gsub(szam, SP, NBSP) -- Szóközök helyett NBSP
if vesszoig then
if N < 0 then
return "Nem fér ki a szám."
else
sor = string.rep(NBSP, N)
szam = "<tt>"..sor..szam.."</tt>" -- Táblázatban NBSP sor a szám elé
end
end
end
--------------------------------------------------- A számot formázó függvény vége ------------------------------------------
return p