Modul:Adatformázó
Megjelenés
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"
ME["qeV/c2"] = "qeV/c<sup>2</sup>"
ME["reV/c2"] = "reV/c<sup>2</sup>"
ME["yeV/c2"] = "yeV/c<sup>2</sup>"
ME["zeV/c2"] = "zeV/c<sup>2</sup>"
ME["aeV/c2"] = "aeV/c<sup>2</sup>"
ME["feV/c2"] = "feV/c<sup>2</sup>"
ME["peV/c2"] = "peV/c<sup>2</sup>"
ME["neV/c2"] = "neV/c<sup>2</sup>"
ME["ueV/c2"] = "μeV/c<sup>2</sup>"
ME["meV/c2"] = "meV/c<sup>2</sup>"
ME["eV/c2"] = "eV/c<sup>2</sup>"
ME["keV/c2"] = "keV/c<sup>2</sup>"
ME["MeV/c2"] = "MeV/c<sup>2</sup>"
ME["GeV/c2"] = "GeV/c<sup>2</sup>"
ME["TeV/c2"] = "TeV/c<sup>2</sup>"
ME["PeV/c2"] = "PeV/c<sup>2</sup>"
ME["EeV/c2"] = "EeV/c<sup>2</sup>"
ME["ZeV/c2"] = "ZeV/c<sup>2</sup>"
ME["YeV/c2"] = "YeV/c<sup>2</sup>"
ME["ReV/c2"] = "ReV/c<sup>2</sup>"
ME["QeV/c2"] = "QeV/c<sup>2</sup>"
-- Anyagmennyiség
ME["umol"] = "μmol"
-- Hőmérséklet
ME["oC"] = "°C"
ME["oF"] = "°F"
ME["oR"] = "°R"
ME["uK"] = "μK"
-- Áramerősség
ME["uA"] = "μA"
-- Fényerő
ME["ucd"] = "μcd"
------------------------- 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>"
ME["um2"] = "μm<sup>2</sup>"
ME["nm2"] = "nm<sup>2</sup>"
ME["pm2"] = "pm<sup>2</sup>"
ME["fm2"] = "fm<sup>2</sup>"
ME["am2"] = "am<sup>2</sup>"
ME["zm2"] = "zm<sup>2</sup>"
ME["ym2"] = "ym<sup>2</sup>"
ME["rm2"] = "rm<sup>2</sup>"
ME["qm2"] = "qm<sup>2</sup>"
ME["ub"] = "μb"
-- 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>"
ME["um3"] = "μm<sup>3</sup>"
ME["nm3"] = "nm<sup>3</sup>"
ME["pm3"] = "pm<sup>3</sup>"
ME["fm3"] = "fm<sup>3</sup>"
ME["am3"] = "am<sup>3</sup>"
ME["zm3"] = "zm<sup>3</sup>"
ME["ym3"] = "ym<sup>3</sup>"
ME["rm3"] = "rm<sup>3</sup>"
ME["qm3"] = "qm<sup>3</sup>"
------------------------- MECHANIKA:
-- Gyorsulás
ME["m/s2"] = "m/s<sup>2</sup>"
-- Sebesség
ME["um/s"] = "μm/s"
-- Szögsebesség, fordulatszám
ME["s-1"] = "s<sup>−1</sup>"
ME["min-1"] = "min<sup>−1</sup>"
-- Frekvencia
ME["uHz"] = "μHz"
-- 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>"
ME["g/m3"]="g/m<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["mm3/s"] = "mm<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["mm3/min"] = "mm<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"
ME["mm3/min"] = "mm<sup>3</sup>/h"
--Energia, munka
ME["uJ"] = "μJ"
ME["ueV"] = "μeV"
--Teljesítmény
ME["uW"] = "μW"
--Erő
ME["uN"] = "μN"
--Anyagmennyiségre vetített energia
ME["uJ/mol"] = "μJ/mol"
--Fajlagos energia
ME["uJ/kg"] = "μJ/kg"
------------------------- ELEKTROMOSSÁGTAN:
-- Feszültség
ME["uV"] = "μV"
-- Kapacitás
ME["uF"] = "μF"
-- Ellenállás
ME["qohm"] = "qΩ"
ME["rohm"] = "rΩ"
ME["yohm"] = "yΩ"
ME["zohm"] = "zΩ"
ME["aohm"] = "aΩ"
ME["fohm"] = "fΩ"
ME["pohm"] = "pΩ"
ME["nohm"] = "nΩ"
ME["uohm"] = "μΩ"
ME["mohm"] = "mΩ"
ME["ohm"] = "Ω"
ME["kohm"] = "kΩ"
ME["Mohm"] = "MΩ"
ME["Gohm"] = "GΩ"
ME["Tohm"] = "TΩ"
ME["Pohm"] = "PΩ"
ME["Eohm"] = "EΩ"
ME["Zohm"] = "ZΩ"
ME["Yohm"] = "YΩ"
ME["Rohm"] = "RΩ"
ME["Qohm"] = "QΩ"
--Vezetőképesség
ME["uS"] = "μS"
--Fajlagos vezetőképesség
ME["uS/m"] = "μS/m"
ME["uS/cm"] = "μS/cm"
--Töltés
ME["uC"] = "μC"
--Fajlagos ellenállás
ME["ohmqm"] = "Ω·qm"
ME["ohmrm"] = "Ω·rm"
ME["ohmym"] = "Ω·ym"
ME["ohmzm"] = "Ω·zm"
ME["ohmam"] = "Ω·am"
ME["ohmfm"] = "Ω·fm"
ME["ohmpm"] = "Ω·pm"
ME["ohmnm"] = "Ω·nm"
ME["ohmum"] = "Ω·μm"
ME["ohmmm"] = "Ω·mm"
ME["ohmcm"] = "Ω·cm"
ME["ohmdm"] = "Ω·dm"
ME["ohmm"] = "Ω·m"
ME["ohmkm"] = "Ω·km"
--Mágneses indukció
ME["uT"] = "μT"
--Mágneses fluxus
ME["uWb"] = "μWb"
------------------------- SUGÁRZÁS:
--Elnyelt sugárzás
ME["uGy"] = "μGy"
--Aktivitás
ME["uBq"] = "μBq"
--Kitettség
ME["uC/kg"] = "μC/kg"
------------------------- KÉMIA:
--Koncentráció
ME["uM"] = "μM"
ME["qmol/m3"] = "qmol/m<sup>3</sup>"
ME["rmol/m3"] = "rmol/m<sup>3</sup>"
ME["ymol/m3"] = "ymol/m<sup>3</sup>"
ME["zmol/m3"] = "zmol/m<sup>3</sup>"
ME["amol/m3"] = "amol/m<sup>3</sup>"
ME["fmol/m3"] = "fmol/m<sup>3</sup>"
ME["pmol/m3"] = "pmol/m<sup>3</sup>"
ME["nmol/m3"] = "nmol/m<sup>3</sup>"
ME["umol/m3"] = "umol/m<sup>3</sup>"
ME["mmol/m3"] = "mmol/m<sup>3</sup>"
ME["mol/m3"] = "mol/m<sup>3</sup>"
ME["kmol/m3"] = "kmol/m<sup>3</sup>"
------------------------- 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] -- Egység cseréje a formázottra (NBSP nélkül)
else
egyseg = NBSP..ME[egyseg] -- Egység cseréje a NBSP+formázottra
end
else
egyseg = NBSP..egyseg -- Egység cseréje NBSP+egyseg alakra
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 -- A 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 -- A 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