Tartalomjegyz´ ek 1. Vajna Mikl´ os: RTF t´ amogat´ as a LibreOffice Writer ban 1.1. A Google Summer of Code-r´ol . . . . . . . . . . . . . . 1.2. A LibreOffice fejleszt´esr˝ol . . . . . . . . . . . . . . . . 1.3. RTF export fejleszt´es . . . . . . . . . . . . . . . . . . . 1.4. RTF import fejleszt´es . . . . . . . . . . . . . . . . . . 1.5. El´erhet˝ os´egek . . . . . . . . . . . . . . . . . . . . . . .
1
program. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
2 2 2 5 6 7
1. fejezet
Vajna Mikl´ os: RTF t´ amogat´ as a LibreOffice Writer programban 1.1.
A Google Summer of Code-r´ ol
A GSoC egy p´ aly´ azati lehet˝ os´eg szervezetek ´es tanul´ok sz´am´ara. El˝osz¨or szervezetek p´ aly´ azhatnak ¨ otletekkel, majd mikor az elfogadott szervezetek list´aja publikuss´ a v´ alik, tanul´ ok jelentkezhetnek a szervezetekn´el. Jelentkez´eskor ´altal´aban egy – a szervezet ´ altal ki´ırt – ¨ otlet alapj´an kidolgozott p´aly´azattal kopognak be a tanul´ ok, de a kreat´ıvabbak teljesen saj´at ¨otlettel is el˝o´allhatnak. Mikor lez´arult a jelentkez´esi hat´ arid˝ o, a p´ aly´ azatok elb´ır´al´asra ker¨ ulnek, v´eg¨ ul publikuss´a v´alik a sikeresen bev´ alasztott tanul´ ok list´aja. A program m´ ott´ oja – Flip Bits not Burgers – arra utal, hogy eredetileg a c´eg ezzel azokat a tehets´eges fiatalokat k´ıv´anta megc´elozni, akik egy´ebk´ent gyors´ettermekben t¨ olt¨ ott´ek volna a nyarat, hogy p´enzhez jussanak. A kezdem´enyez´es lehet˝ os´eget biztos´ıt arra, hogy szabad szoftver fejleszt´essel jussanak p´enzhez. A GSoC k´et ok miatt ker¨ ul eml´ıt´esre az el˝oad´ason: • a bemutatott RTF filterek is hasonl´o finansz´ıroz´asban k´esz¨ ultek el, valamint • rekl´ amk´ent is szolg´ al, hogy j¨ov˝ore is legyenek olyan tanul´ok akik a LibreOffice fejleszt´es´evel szeretn´ek t¨olteni nyarukat.
1.2.
A LibreOffice fejleszt´ esr˝ ol
A LibreOffice projekt 2010. szeptember 28-´an indult, alap´ıtv´anyi h´atter´et a The Document Foundation (r¨ oviden TDF) biztos´ıtja. A szabad szoftveres projekt az OpenOffice.org forkjak´ent l´atta meg a napvil´agot, a kor´abban patchset form´ aj´ aban l´etez˝ o Go-OO folytat´asak´ent.
2
Fontos k¨ ul¨ onbs´eg, hogy m´ıg a Go-OO a funkci´ok nagy r´esz´et hossz´ ut´avon vissza akarta juttatni az OpenOffice.org-ba, addig a LibreOffice eset´en ezt feladt´ ak, ´ıgy a projekt m´ ar a saj´at u ´tj´an j´ar. Ett˝ ol eltekintve persze a nagy k´odb´azis jelent˝os r´esze megegyezik, ´ıgy az OpenOffice.org projektben szerzett tapasztalatok itt is k¨onnyen kamatoztathat´ oak. Gyakori f´elre´ert´es, hogy az emberek u ´gy gondolj´ak: a LibreOffice Java nyelven ´ır´ odott, holott ez nincs ´ıgy. A k´od nagy r´esze C++, a marad´ek t¨obbs´eg´et val´ oban a Java teszi ki, de emellett m´eg sz´amos egy´eb nyelven ´ırt kisebb k´odokat is tartalmaz a projekt. (XML, Make, ASM, Yacc, Perl, Python, stb.) Kedvcsin´ al´ ok´ent az el˝ oad´ ason ismertet´esre ker¨ ulnek azok az els˝o l´ep´esek, melyeket meg kell tennie azon ¨onk´enteseknek, akik szeretn´enek a projekthez programk´ oddal hozz´ aj´ arulni.
Els˝ o build Az els˝ o ford´ıt´ as h´ arom l´ep´esb˝ ol ´all: 1. forr´ as let¨ olt´ese: git clone git://anongit.freedesktop.org/libreoffice/core 2. ford´ıt´ as ./autogen.sh make make dev-install 3. futtat´ as cd install/program source ./ooenv ./soffice.bin
Inkrement´ alis build Mivel egy teljes ford´ıt´ as sok id˝ot vesz ig´enybe, a k¨ovetkez˝o k´erd´es, hogy a forr´ ask´ odbeli m´ odos´ıt´ ast´ ol az u ´j futtathat´o programig hogyan juthatunk el. Ennek m´ odja, hogy a forr´ ask´ od sz´amos (jelenleg 226) modulra van osztva, melyek k¨ ul¨ on-k¨ ul¨ on is ford´ıthat´ oak. P´eld´ aul ha a writerfilter modult m´odos´ıtottuk, akkor l´epj¨ unk annak k¨ onyvt´ ar´ aba ´es futtassuk ott a make programot, aminek hat´ar´as´ara futtat´askor m´ ar ´eletbe l´epnek a v´ altoztat´ asaink. A gyakorlatban n´eh´ any param´etert praktikus alkalmazni: • -s: kevesebb kimenet k´er´ese, hogy a hib´akat/figyelmeztet´eseket k¨onnyebben ´eszrevegy¨ uk • -r: a be´ep´ıtett implicit szab´alyok elhagy´asa, mely gyorsabb m˝ uk¨od´est eredm´enyez 3
• -j4: t¨ obbsz´ al´ u ford´ıt´ as (a 4 az aktu´alis g´epen el´erhet˝o CPU-k vagy magok sz´ am´ aval helyettes´ıtend˝ o) • dbglevel=2: a fejleszt´est seg´ıt˝o, OSL TRACE() kimenetek bekapcsol´asa • build: csak ford´ıt´ as, unit tesztek futtat´as´anak elhagy´asa A teljes parancs teh´ at: make -sr -j4 dbglevel=2 build Aminek seg´ıts´eg´evel tipikusan 10 m´asodperc al´a szor´ıthat´o a ford´ıt´asi id˝o. Term´eszetesen az egyes param´etereket mindenki ´ızl´ese szerint megv´alaszthatja.
A projekt m´ erete A LibreOffice az egyik legnagyobb m´eret˝ u szabad szoftveres projekt. Voltak arra t¨ orekv´esek, hogy a forr´ask´odot 20-n´al is t¨obb k¨ ul¨on ´all´o t´arol´oba sz´etv´ alassz´ ak, de jelenleg olyan szoros az ezek k¨oz¨otti f¨ ugg´es, hogy ez kudarcot vallott: a fejleszt´es sor´ an nem v´alt lehets´egess´e t´enylegesen csak egy-egy alrendszer m´ odos´ıt´ asa. Ennek k¨ovetkezt´eben jelenleg a m´odos´ıt´asok nagy r´esze egyetlen (a core) t´ arol´ oban t¨ ort´enik. A git clone v´egezt´evel kb. 8 milli´o k´odsorhoz jutunk, a merevlemez¨ unk¨on pedig kb. 4 GB helyet vesz´ıt¨ unk. A teljes ford´ıt´as ideje elt´er˝o lehet: Linuxon sz´els˝ o ´ert´ekk´ent egyr´eszt a gyakori ford´ıt´as (pl. tinderbox) ´es ccache haszn´alat mellett el´erhet˝ o kb. 15 perces id˝oig´enyt lehet eml´ıteni, a m´asik v´eglet ha minden nyelv t´ amogat´ as´ at bekapcsoljuk, akkor m´eg egy 4 magos g´epen is 3-4 ´ora ford´ıt´ asi id˝ ovel kell sz´ amoljunk.1
Kollabor´ aci´ o A LibreOffice fejleszt´ese f˝ ok´ent a k¨ovetkez˝o kommunik´aci´os csatorn´akon kereszt¨ ul folyik: • forr´ ask´ od kezel´es: git • napi kommunik´ aci´ o: IRC, e-mail • strat´egiai d¨ ont´esek: Technical Steering Call (TSC)
RTF filterek Filtereknek nevezz¨ uk azokat a programmodulokat, melyek a dokumentummodell bet¨ olt´es´et vagy elment´es´et v´egzik valamilyen – lehet˝oleg szabv´anyos´ıtott – form´ aba. Az cikk szerz˝ oje a tov´abbiakban a Writer alkalmaz´as RTF import/export filtereinek elk´esz´ıt´ese sor´an szerzett tapasztalatait ill. ´elm´enyeit ismerteti. Az RTF form´ atumot sokan jelent´ektelen szabv´anynak tartj´ak, pedig a maga nem´eben egyed¨ ul´ all´ o: 1 Ha
lass´ us´ agi rekordot szeretn´ enk el´ erni, pr´ ob´ alkozzunk a ford´ıt´ assal egy manaps´ ag oly divatos netbookon.
4
• Az els˝ o verzi´ oj´ at 1987-ben fogadt´ak el, megel˝ozve az XML-t vagy az ODFet. • Az u ´jabb verzi´ oi visszafele kompatibilisak. • Id˝ or˝ ol id˝ ore friss¨ ul, a jelenlegi (1.9.1-es) szabv´any t´amogatja a be´agyazott t´ abl´ azatokat, OLE objektumokat, stb. • El˝ oszeretettel haszn´ alj´ ak sok helyen – pl. korm´anyzati u ˝rlapok –, ahol az ODF m´eg t´ uls´ agosan u ´jdons´agnak sz´am´ıt. Term´eszetesen megvan az a h´atr´anya, hogy az RTF nem egy ny´ılt szabv´any, hanem a Microsoft adja ki az u ´jabb verzi´okat.
1.3.
RTF export fejleszt´ es
2010 nyar´ an egy teljesen u ´j RTF exporter k´esz¨ ult el. Az ¨otlet az volt, hogy az RTF sok aspektusban hasonl´ıt a doc, ill. docx form´atumokra (Microsoft tal´ alm´ any mindh´ arom), ´es a doc/docx exportereknek m´ar van egy k¨oz¨os alapja. A kor´ abban k¨ ul¨ on´ all´ o RTF exporter helyett teh´at egy – erre a k¨oz¨os alapra ´ep´ıtkez˝ o–u ´j RTF exporter k´esz¨ ult el. A szok´ asos c´elok (ne okozzon regresszi´ot a r´egi filterhez k´epest, legyen kisebb, ny´ ujtson t¨ obb funkcionalit´ ast) k¨oz¨ ul csak a m´eret cs¨okkent´ese nem siker¨ ult, az u ´j funkci´ ok hely-ig´enye miatt. Ez az exporter el˝ osz¨ or a Go-OO 3.3 els˝o teszt-kiad´as´aban volt el´erhet˝o, az´ota r´esze a LibreOffice-nak. A LibreOffice megsz¨ ulet´ese el˝ott r´esze lett az OpenOffice.org 3.4 b´et´ anak is, amib˝ ol sajnos az´ota se l´atott a vil´ag stabil kiad´ast.2 Ett˝ol f¨ uggetlen¨ ul az Oracle h´ıresen sz˝orsz´alhasogat´o QA-´en ´atjutott az exporter, ´es ennek sor´ an sz´ amos hasznos visszajelz´est kaptam a c´eg m´ern¨okeit˝ol. Az exportert legink´ abb azoknak ´erdemes kipr´ob´alniuk akiknek probl´em´ajuk akadt a r´egi v´ altozattal, de az ´erdekl˝od˝ok sz´am´ara az el˝oad´ason p´eld´akat mutattam a k¨ ovetkez˝ ou ´j funkci´ okra: • k¨ onyvjelz˝ okre mutat´ o oldalsz´am-hivatkoz´asok • karakter tulajdons´ agok (kiterjesztett t´erk¨oz, al´av´ag´as) • OLE objektumok, pl. diagram • rajzok • u ˝rlapok • sorsz´ amoz´ as • matematikai kifejez´esek, szerkeszt´est lehet˝ov´e tev˝o nat´ıv adattal • oldalt¨ or´esek • oldalsz´ amoz´ asi st´ılusok, oldalsz´amoz´as u ´jraind´ıt´asa • k´epek Wordpadben 2 Aki k´ ıv´ ancsi a fejlem´ enyekre, l´ atogasson el az Apache OpenOffice.org (incubating) projekt fejleszt˝ oi list´ aj´ ara ´ es k¨ ovesse az esem´ enyeket.
5
• post-it mez˝ o • has´ abt¨ or´es • v´edett szakaszok • be´ agyazott t´ abl´ azatok • jav´ıtott tartalomjegyz´ek Az u ´j funkci´ ok hossz´ u list´aja ellen´ere az u ´j filter se hibamentes, visszajelz´eseket a Freedesktop Bugzill´aj´aba3 k´eretik eljuttatni.
1.4.
RTF import fejleszt´ es
Id´en ny´ aron ker¨ ult sor az u ´j RTF importer elk´esz´ıt´es´ere, mely az exporterhez hasonl´ o¨ otleten alapszik: a docx importerhez k´esz¨ ult framework u ´jrahasznos´ıthat´o lenne t¨ obb tokeniz´ al´ o elk´esz´ıt´es´ehez az 1.1. ´abr´an l´athat´o m´odon.
File system storage RTF document
DOC document
DOCX document
RTF tokenizer
DOC tokenizer
DOCX tokenizer
domain mapper writerfilter module Writer UNO API
Writer document sw module
1.1. ´ abra. Az RTF import filter architekt´ ur´aja J´ o p´elda az ´ıgy egy helyen megval´os´ıtott funkci´okra a mez˝ok ´ertelmez´ese (pl. oldalsz´ am, annot´ aci´ ok) vagy a Writer oldalst´ılusai ´es a Word speci´alis fejl´ecei k¨ oz¨ ott. 3 http://bugs.freedesktop.org
6
Tesztel´ es A tesztel´es els˝ o l´ep´ese a csak a tokenizert tesztel˝o unit teszt elk´esz´ıt´ese volt. A minden ford´ıt´ as sor´ an automatikusan lefut´o ellen˝orz´es a kor´abbi RTF importer CVE hib´ aihoz tartoz´ o teszt dokumentumokat ´ertelmezi. Mivel csak a tokenizer ker¨ ul tesztel´esre, a teljes fut´ as kb. 200 ms. A megold´ as sz´eps´ege, hogy ´ıgy m´ar akkor lehets´eges a teszteket v´egrehajtani, mikor a Writer alkalmaz´ ast megval´os´ıt´o sw modul m´eg nem ker¨ ult leford´ıt´asra. Term´eszetesen ez a teszt a k´ezi ellen˝orz´est nem helyettes´ıti, hiszen a vizu´alis megjelen´est nem vizsg´ alja – csak azt, hogy a tokenizer elfogadja, vagy elutas´ıtja az adott dokumentumot.
´ funkci´ Uj ok Az export filterhez hasonl´ oan az importer u ´j funkci´oib´ol is ´ızel´ıt˝ot kapnak az el˝ oad´ as hallgat´ oi. Bemutat´ asra ker¨ ulnek a kor´abban nem, vagy hi´anyosan ill. rosszul t´ amogatott k¨ ovetkez˝ o elemek import´al´asa: • be´ agyazott t´ abl´ azatok • l´ abjegyzetek • post-it mez˝ ok • u ˝rlapok • rajzok • sz¨ ovegdobozok
Hat´ as a DOCX importra A r´egi RTF importernek n´eh´any funkci´oj´at el˝osz¨or az´ert nem lehetett megval´ os´ıtani az u ´j filterben, mert a keretrendszer nem t´amogatta az adott funkci´ot. Ezek a m´ odos´ıt´ asok a beker¨ ul´es¨ uk ut´an a DOCX importert is jav´ıtott´ak, melyb˝ol n´eh´ any szint´en demonstr´ al´ asra ker¨ ult az el˝oad´ason: • dupla-´ ath´ uz´ as • l´ abjegyzetek u ´jrasz´ amoz´ asa
1.5.
El´ erhet˝ os´ egek
A szerz˝ o ez´ uton is eln´ez´est k´er, hogy sok – a cikkben szerepl˝o – t´em´at csak ´erint˝ olegesen eml´ıtett, csak az import ´es export filterek t´em´ar´ol vastag k¨onyvet lehetne ´ırni, a c´el legink´ abb a figyelemfelkelt´es volt. Az al´abbi linkek tov´abbi k´erd´esek eset´en rem´elhet˝ oleg seg´ıts´eget ny´ ujtanak. • LibreOffice honlap: http://libreoffice.org/ • GSoC: http://code.google.com/soc/ • A di´ ak ´es ezen cikk el´erhet˝os´ege: http://vmiklos.hu/odp/
7