====== EZ AZ OLDAL MÁR NEM ÉRVÉNYES! ====== =====A karbantartott doksi az eVIR-en belül érhető el a szerkesztőfelületen. ===== ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ====== PDF Markup Language ====== A PML az eVIR rendszerben előforduló PDF dokumentumok leírására szolgál. Segítségével valósíthatóak meg az egyedi oldalak a programkód módosítása nélkül. * A PML még részleges fejlesztés alatt van. * egyes részei még változhatnak a jövőben ===== Koncepciók ===== * Egy szöveges file-ből ami hasonlít a html-re készíteni kell egy PDF file-t * A leírónyelv nem rekurzív, nem olyan mint az XML, vagy a HTML, bár formailag hasonlít rá. ===== Tag-ek ===== ==== tag ==== %WIP% Még nem implementált tag, későbbi bővítésnek fenntartva dokuentum ==== tag ==== | Oldal fejléc | | | | Oldal lábléc | bla bla bla.... bla bla bla... * Létrehoz egy dokumentum template-t amelynek a neve: sajatoldal. * Az oldalban egy táblázatnak kell/javasolt lennie * a (táblázat/oldal)ban kell lennie egy '''' tag-nek, ami arra szolgál, hogy a ''sajatoldal'' templatet használó oldalak a táblázat ezen cellájába lesznek betördelve * Elvileg lehet egy PDF-ben több document tag is, * (ezek maguktól nem nyomtatódnak ki) * a '''' tagnál meg lehet mondani, hogy melyik document template-et használják. alapértelmezett az utolsónak deklarált, vagy az előző oldalon template-je Tehát egy dokumentum template általános leírása egy teljes oldalt elfoglaló táblázat, amelynek valahol a közepén a '''' tag helyére lesz behelyettesítve a tartalom. A template lehet például egy fejléces, lábléces forma, itt célszerű mindenféle margót és formázást megadni. A valódi oldalak tartalma ebbe az dokumentum template formázásába lesz betördelve. Amennyiben nem fér el egy oldalon a tartalom, úgy több oldalra lesz széttördelve, mindegyik oldal megkapva a dokumentum template környezetet. ==== tag ==== általában Lásd a DOCUMENT tag-et a dokumentum template ezen helyére lesz a tartalom behelyettesítve (ez célszerűen egy táblázatcella legyen). ==== tag ==== ... * Egy új oldalt indít. * Opcionálisan megadható, hogy melyik document template-et használja. lásd document tag leírása * Ha nincs megadva document template '''' akkor az utoljára definiált dokumentum templatet fogja használni. * Egy PDF dokumentumban több különböző '''' is megadható, akár más dokumentum template-tel is. Ezeket egymás mögé fogja fűzni. ==== Font manipulásló tag-ek ==== Ide tartoznak a szövegek megjelenítéséért formázásáért felelős tag-ek helvetica/ariel times courier ZapfDingbats Symbol Ezekből az utolsó van életben <10> 10-es betűméret Ebből az utolsó van életben Módosító tag-ek -hez, implicit **// bold nem bold italic nem italic * A tag-ek tetszőleges sorrendben követik egymást, nincs nyitó/záró pár. * tekinthetőek úgy ezek a tag-ek, mint amik módosítják a _kurzor//színét betűtípusát, betűméretét, stb... * '' '' tag-ek. Az adott standard PDF font lesz a _kurzor//fontja. * záró tag nincs, bármely tag átváltja az új fontra. * ''<9>'' fontméret tag-ek. Beállítja a szöveg méretét az adott betűméretre. * ha több különböző betűméretű szöveg kerül egy sorba, akkor a betűk alapvonala (alja) kerül egyvonalba. * záró tag nincs, bármely más betűméret állító tag elállítja. * '' '' bold és italic be és kikapcsolása * tetszőleges sorrendben lehet a _kurzorstílusát vastag vagy dölt betűsre váltani, vagy onnan visszaállítani. * a '' '' nem kötelező záró párok hanem önálló tag-ek. * Szabályos ez a kód: ''normal bold bolditalic italic normal'' ==== Táblázatok és egyéb formázások ==== %WIP% A táblázatok kezelése további fejlesztések tervét tartalmazza, alapfunkciók elérhetőek.
{x} | {y}{z} | {a}[**]{a} | teteje alja ... | ... | ... | ... | ... | ... | ... | ... ... | ...
{d} {f1} | {f2} ... {d} feltételes tartalom
Értelmezés: * '''' tag-en belül) * ''box'': hagyományos vonalas táblázat. (minden cella körül vonal rajzolódik * ''cbox'': olyan táblázat, ahol minden egyes cella egy legömbölyített téglalapnak látszik. * '''' speciális tag, cbox stílusú táblázatban lehet vele cella széles vonalat húzni (szintaxishoz lásd '''' ) * további stílusok később kerülhetnek implementálásra * Oszlop meghatározások betűi * Igazítás: ''L'' Balra, ''C'' Középre, ''R'' jobbra, %WIP% ''J'' justify * szélesség kétféleképpen is megadható. % jellel vagy anélkül, más más jelentéssel * ''10%'': teljest táblázat szélességhez képest 10%. * ''150'': pontméretben * A ''|'' jel a leendő táblázat oszlopainak leírását szeparálja. Példánkban 4 oszlopa lesz a táblázatunknak, 10+75+5+10 (százalékos) bontásban * %WIP% '''': Fej mezők megadása . Ez jelenleg nincs implementálva * ''|'' táblázat celláinak határolója * tábla végén következő táblasorra továblép, emiatt a '''' használata elhagyható * '''': Új sor következik (opcionális) * függetlenül attól, hogy hány cella volt kitöltve az előző sorban, új sort indít a táblázatban. * %WIP% "||" (új sor) * '''': több sor generálása változó segítségével: lásd változók kezelése... * '''': feltételes PML content a ''var'' kulcsú változó értéke szerint. * '''': Táblázatban is használható tag, ami az adott cellában a további írásokat alulra igazítja. * így lehet egy magasabb méretű cella tetejére és aljára is írni tartalmat. miközben a közepe gyakorlatilag üres lehet. * A '''' tag előtti részek a cella teteje felé lesznek igazítva, a mögötte levő részek a cella aljához lesznek igazítva. * oldalra is kiterjesztve a működésmód * %WIP% cellák tartalmának középre igazítása (függőlegesen) * ''
'': ez a tag kilép a táblázatos üzemmódból szövegsoros üzemmódba. * Nem szigorúan lezáró pár, korlátozás nélkül lehet a '''' tag-eket egymás alatti más-más sorformátumú táblázatok építésére használni. A táblázatokban használt igazítások bárhol használhatóaak az igazító tag-ek használatával. Közös jellemzőjük, hogy egyúttal új sor kezdetét is jelentik, aminek az igazítását megadják. Ez használható a táblázatok fejében megadott igazítások módosítására is, ami így csak az adott cellában érvényes, tehát a következő sorban/oszlopban már nem. És használható táblázaton kívül folyó szövegek esetén is. * '''' balra igazít * '''' jobbra igazít * ''
'' középre igazít * '''' justify %WIP% egyelőre nincs implementálva, nem használható. Táblázatok egymásba ágyazásának kisérleti módja a '''' illetve '''' tag-ek használatával lehetséges, aminek a hatására a ''sub'' tag-en belül újabb táblázat adható meg. ===== Tartalom tag-ek ===== Ide olyan tag-ek tartoznak, amik valamit megjelenítenek. bla bla bla * ''bla bla bla'': szabadon írt szövegek: a szavak tördelődnek igény szerint (sor végénél, cellákban) * Az újsor, (enter karakter) az sortörést eredményez. * Üres sorok, whitespacek all collpases, tehát üres helyet nem lehet így csinálni, a whitespace-ek használhatóak a PML forrásának áttekinthetőbb írásánál. * '''': vízszintes helyfoglalás 100 pont szélességben (és aktuális fontméret magasságban) * '''': függőleges helyfoglalás 50 pont magasságban (0 szélességben) * Nemdokumentált, változás joga fenntartva: speciálisan megadott negatív érték esetén csökkenti a sor eddigi számolt magasságát (feljebb kerül). Hatása átmeneti. * '''': Egy céges logo * '''': Egy vízszintes vonal a sor teljes szélességében adott (2) vonalvastagságban. d1 d2 opcionális szám, szaggatott vonal képzéséhez %WIP% ===== Egyéb ===== * '' '' párok: * Ennek a célja az lenne, hogy a párok közötti szöveget ne értelmezze a rendszer bizonyos részeken (tokenizálási folyamat) * pl. így lehet megjeleníteni a ''{ } | '' és whitespace karaktereket megbízhatóan, anélkül, hogy értelmezné a rendszer. * esetleges működéssel kapcsolatos anomáliákról kérünk visszajelzéseket. * '''' funkció nélküli tag * Ez akkor használható, ha nem whitespace tokeneket szerenék egymástól megbízhatóan szeparálni, pl: ''Mezőnév:"{value}"'' helyett ''Mezőnév:"{value}"'' ===== Változók kezelése ===== {kulcs}{alkulcs}{subalkulcs} {kulcs2} {kulcs3} {listakulcs}[0]{rekordkulcs1} {listakulcs}[0]{rekordkulcs2} {listakulcs}[1]{rekordkulcs1} {listakulcs}[1]{rekordkulcs2} Az adatszerkezet megadott értékei kerülnek behelyettesítésre, ezek az konkrét pdf-et készítő modulonként más más struktúrát alkothatnak * A nyomtatáskor az adatszerkezetnek megfelelő értékek kerülnek ide * esetenként hierarchikusan vannak a kulcsok megadva (''{kulcs1}{kulcs2}'') * Lista jellegű adatok (rekordok) kezelése PML-ben a '''' tag használatával is van lehetőség * Feltételes jellegű adatok kezelése PML-ben. a '''' tag használatvával is van lehetőség {listakulcs} {rekordkulcs1} {rekordkulcs2} ... * A lista feldolgozásához kell egy ''{listakulcs}'' adatszerkezettel megadott struktúra, ami egy listát reprezentál, tehát önmagában nem megjeleníthető a tartalma. * a '''' és '''' tag-ek közötti részt annyiszor iterálja, ahány eleme a listának van. * Jellemzően ezt egy táblázatban lehet jól használni, de a táblázat használata nem kötelező a működéshez. (lehet pl. listát is így készíteni) * A ''ciklusid'' tetszőleges egyedi szöveg lehet. A teljes PML-ben egyedinek kell lennie. (Ennek a segítségével találja meg pontosan a ''/rows'' párját a tag-nek. * a ciklusid használata nem kötelező, (régebbi PML-ekkel kompatibilis) ekkor nem használhatóak egymásba ágyazott ''rows'' ciklusok. Példák a szerződés adatszerkezetein: 1: Szerződéstételek: ''{szerzodes_tetelek} {sorsz} : {cikkszam} {megnevezes} {calc_brutto} '' 2: Partner címei: ''{ext_partner}{cim} {cimke} : {nev} {cim_irszam} {cim_varos} {cim_cim} '' 3: partner telefonszámai: ''
típus | szám {ext_partner}{telefon} {tipusnev} | {szam} '' {hierarchiakulcs} tetszőleges PML tartalom * Feltételes PML megjelenítéséhez kellhet egy ''{hierarchiakulcs}'' adatszerkezettel megadott struktúra, aminek valamelyik közvetlen kulcsa egy logikainak értelmezhető változója, tehát önmagában nem megjeleníthető a tartalom. * a '''' és '''' tag-ek közötti részt akkor jeleníti meg, ha a {var} értéke logikailag igaz. * Jellemzően ezt esetlegesen opcionális adatokat tartalmazó minták, táblázat teljes részeinek elrejtésére használható. Pl: Megjegyzés cbox. * A ''choiceid'' tetszőleges egyedi szöveg lehet. A teljes PML-ben egyedinek kell lennie. (Ennek a segítségével találja meg pontosan a ''/if'' párját a tag-nek. * a choiceid használata kötelező. * A ''var'' az eddig kiszámolt változóhierarchiában már létező scalar logikai változó. * A ''var'' kulcs kiértékelése visszaállítja a hierarchiát a korábbi gyökér állapotába, mintha a ''{var}'' szintaxis került volna felhasználásra. Jelenleg ilyen használatára még nincs idézhető példa. ===== opcionális változók kezelése ===== Egyes esetekben az adatszerkezet egyes komponensei hiányozhatnak. Ilyenkor azokat a változók, melyek nem biztos, hogy léteznek, speciális szintaxissal kell írni. Ilyenkor változó kulcsai vagy indexei mögé egy ''?'' (kérdőjel) karaktert kell írni. Az esetlegesen hiányzó komponenstől kezdve az összes további kulcs vagy index esetén használni kell a ''?'' -et. Ennek hatására nem történik hibajelzés, ha az adatszerkezetből a változó hiányzik, és nem fog semmi megjelenni. például a szerződés változói esetén * ''{ext_partner}{cim}{posta}[0?]{cim_cim?}'' Ha nincs postacím, akkor így lehet írni * ''{ext_partner}{cim}{posta}[1?]{cim_cim?}'' Ha nincs második postacím, akkor így lehet írni * ''{ext_partner}{telefon}[0?]{szam?}'' ha nincs telefonszam ''[0]{cim_cim}'' rész helyett ''[0?]{cim_cim?}'' szerepel. ==== Modulok szerint ==== * SzerzodesPMLVars A szerzodes modul használata szerint ===== Megjelenítés ===== * Első körben beolvassa (és tokenizálja) a PML dokumentumot * Ebben benne foglaltatik a tokenek (szavak, whitespacek, táblázatelemek, változók behelyettesítve stb...) létrehozása. * A rendszer továbbiakban ezzel a token folyammal fog dolgozni. * Itt már ismeri a rendszer a tokenek főbb tulajdonságait, (szavak szélessége, hosszúsága) * Következő körben eltördeli a hosszú sorokat, így a kinyomtatásra váró tartalom ('''') egy virtuális papírtekercsre kerül rá * A táblázat egy sora mindenképpen egy oldalon belülre igyekszik kerülni * Mellesleg betördeli a dokumentum templateket is az A4-es oldalra. %TODO% csak A4 lehet? * Utolsó körben a virtuális papírtekercset feldarabolja a dokumentum templatekbe, így egy esetleg több oldalas, fejléces/lábléces papírra készült pdf tartalom lesz az egészből * Ha nem férne el egy táblázat (vagy szöveg) egy sora egy oldalon, vagy egy hosszú szó egy cellában vagy egy sorban, akkor a program kimenete meghatározatlan.