Ugrás a tartalomhoz

Modul:Adatformázó

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából

Adatformázó[mi ez?] • [dokumentáció: mutat, szerkeszt] • [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"] = "&mu;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"] = "&mu;mol"

-- Hőmérséklet
ME["oC"] = "&deg;C"
ME["oF"] = "&deg;F"
ME["oR"] = "&deg;R"
ME["uK"] = "&mu;K"
-- Áramerősség
ME["uA"] = "&mu;A"
-- Fényerő
ME["ucd"] = "&mu;cd"
------------------------- TÉRMENNYISÉGEK:
-- Síkszög
ME["o"] = "&deg;"
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"] = "&mu;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"] = "&mu;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"] = "&mu;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"] = "&mu;m/s"
-- Szögsebesség, fordulatszám
ME["s-1"] = "s<sup>&minus;1</sup>"
ME["min-1"] = "min<sup>&minus;1</sup>"
-- Frekvencia
ME["uHz"] = "&mu;Hz"
-- Szöggyorsulás
ME["rad/s2"] = "rad/s<sup>2</sup>"
ME["s-2"] = "s<sup>&minus;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"] = "&mu;J"
ME["ueV"] = "&mu;eV"
--Teljesítmény
ME["uW"] = "&mu;W"
--Erő
ME["uN"] = "&mu;N"
--Anyagmennyiségre vetített energia
ME["uJ/mol"] = "&mu;J/mol"
--Fajlagos energia
ME["uJ/kg"] = "&mu;J/kg"
------------------------- ELEKTROMOSSÁGTAN:
-- Feszültség
ME["uV"] = "&mu;V"

-- Kapacitás
ME["uF"] = "&mu;F"

-- Ellenállás
ME["qohm"] = "q&Omega;"
ME["rohm"] = "r&Omega;"
ME["yohm"] = "y&Omega;"
ME["zohm"] = "z&Omega;"
ME["aohm"] = "a&Omega;"
ME["fohm"] = "f&Omega;"
ME["pohm"] = "p&Omega;"
ME["nohm"] = "n&Omega;"
ME["uohm"] = "&mu;&Omega;"
ME["mohm"] = "m&Omega;"
ME["ohm"] = "&Omega;"
ME["kohm"] = "k&Omega;"
ME["Mohm"] = "M&Omega;"
ME["Gohm"] = "G&Omega;"
ME["Tohm"] = "T&Omega;"
ME["Pohm"] = "P&Omega;"
ME["Eohm"] = "E&Omega;"
ME["Zohm"] = "Z&Omega;"
ME["Yohm"] = "Y&Omega;"
ME["Rohm"] = "R&Omega;"
ME["Qohm"] = "Q&Omega;"
--Vezetőképesség
ME["uS"] = "&mu;S"
--Fajlagos vezetőképesség
ME["uS/m"] = "&mu;S/m"
ME["uS/cm"] = "&mu;S/cm"
--Töltés
ME["uC"] = "&mu;C"
--Fajlagos ellenállás
ME["ohmqm"] = "&Omega;&middot;qm"
ME["ohmrm"] = "&Omega;&middot;rm"
ME["ohmym"] = "&Omega;&middot;ym"
ME["ohmzm"] = "&Omega;&middot;zm"
ME["ohmam"] = "&Omega;&middot;am"
ME["ohmfm"] = "&Omega;&middot;fm"
ME["ohmpm"] = "&Omega;&middot;pm"
ME["ohmnm"] = "&Omega;&middot;nm"
ME["ohmum"] = "&Omega;&middot;&mu;m"
ME["ohmmm"] = "&Omega;&middot;mm"
ME["ohmcm"] = "&Omega;&middot;cm"
ME["ohmdm"] = "&Omega;&middot;dm"
ME["ohmm"] = "&Omega;&middot;m"
ME["ohmkm"] = "&Omega;&middot;km"
--Mágneses indukció
ME["uT"] = "&mu;T"
--Mágneses fluxus
ME["uWb"] = "&mu;Wb"
------------------------- SUGÁRZÁS:
--Elnyelt sugárzás
ME["uGy"] = "&mu;Gy"
--Aktivitás
ME["uBq"] = "&mu;Bq"
--Kitettség
ME["uC/kg"] = "&mu;C/kg"
------------------------- KÉMIA:
--Koncentráció
ME["uM"] = "&mu;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;"                                                                   
NBSP = mw.text.decode(NBSP, "&nbsp;")                                                 -- Nem-törhető szóköz (U+00A0)
minuszjel = "&minus;"
minuszjel = mw.text.decode(minuszjel, "&minus;")                                      -- A &minus; 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 == "&#34;" 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.."&middot;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.."&middot;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