From 0dcc851a333f7c16cf456f73c556809ced633059 Mon Sep 17 00:00:00 2001 From: henrikjust Date: Tue, 28 Dec 2010 08:54:40 +0000 Subject: [PATCH] EPUB meta data, export dialog and style resources git-svn-id: svn://svn.code.sf.net/p/writer2latex/code/trunk@81 f0f2a975-2e09-46c8-9428-3b39399b9f3c --- source/distro/changelog.txt | 17 +- source/distro/doc/user-manual.odt | Bin 49098 -> 50395 bytes .../filter/ConfigurationDialogBase.java | 15 +- .../writer2latex/ConfigurationDialog.java | 13 +- .../comp/writer2xhtml/EpubOptionsDialog.java | 319 ++++++++++++++++++ .../da/comp/writer2xhtml/W2XRegistration.java | 12 +- source/java/writer2latex/api/Converter.java | 25 +- .../java/writer2latex/base/ConverterBase.java | 8 +- source/java/writer2latex/epub/EPUBWriter.java | 12 +- source/java/writer2latex/epub/OPFWriter.java | 210 ++++++------ source/java/writer2latex/util/Misc.java | 13 +- source/java/writer2latex/xhtml/Converter.java | 23 +- .../writer2latex/xhtml/ResourceDocument.java | 79 +++++ source/oxt/writer2xhtml/Options.xcs | 39 +++ source/oxt/writer2xhtml/Options.xcu | 74 ++++ .../writer2xhtml/W2XDialogs2/EpubOptions.xdl | 94 ++++++ .../oxt/writer2xhtml/W2XDialogs2/dialog.xlb | 1 + source/oxt/writer2xhtml/help/en/help.tree | 1 + .../epub.xhp | 99 ++++++ .../export.xhp | 3 + source/oxt/writer2xhtml/w2x_filters.xcu | 2 +- 21 files changed, 920 insertions(+), 139 deletions(-) create mode 100644 source/java/org/openoffice/da/comp/writer2xhtml/EpubOptionsDialog.java create mode 100644 source/java/writer2latex/xhtml/ResourceDocument.java create mode 100755 source/oxt/writer2xhtml/W2XDialogs2/EpubOptions.xdl create mode 100644 source/oxt/writer2xhtml/help/en/org.openoffice.da.writer2xhtml.oxt/epub.xhp diff --git a/source/distro/changelog.txt b/source/distro/changelog.txt index d538d71..83f451b 100644 --- a/source/distro/changelog.txt +++ b/source/distro/changelog.txt @@ -2,6 +2,21 @@ Changelog for Writer2LaTeX version 1.0 -> 1.2 ---------- version 1.1.9 ---------- +[w2x] *New option include_toc (default true) for EPUB export: If set to false, the table of content will not be exported + +[w2x] *New option split_after (default 0) for EPUB export: This sets the number of characters (in thousands) after + which an automatic split will occur (0 means no automatic split) + +[w2x] *New options use_default_font (default false) and default_font_name (default empty) for EPUB export. + If the former is true, font names are not exported, but the latter will be exported as default font (if non-empty) + +[w2x] *New options relative_font_size (default false) and font_scaling (default 100%) for EPUB export. + If the former is true, relative font sizes are used, scaled by the percentage given by the latter + +[w2x] *EPUB export now has its own export dialog + +[all] *API change: Added the method readResource to the Converter interface (only used by EPUB export currently) + [w2x] EPUB export now uses user-defined meta data to support meta data features that are not defined in ODF [w2x] The option use_dublin_core now also works for EPUB export @@ -23,8 +38,6 @@ Changelog for Writer2LaTeX version 1.0 -> 1.2 [w2l] Custom config ui: The four special styles for tables are now localized and can be selected from existing styles -[w2x] In EPUB export, convert_to_px=true now (despite the name) exports relative font sizes - [w2l] Custom config ui is now refactored to use ConfigurationDialogBase, fixing some minor bugs [w2l] String replace now also works with XeTeX as backend diff --git a/source/distro/doc/user-manual.odt b/source/distro/doc/user-manual.odt index 32d6a1ac233d4b403932eb03052dac562c99a634..ca0d8a8562de1ece82d23fae2edba70c577a5457 100644 GIT binary patch delta 43539 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 delta 42178 zcmZU)V{{;0(=Hs_nAo;$PHdZ#iEVT;v29N{v29MAiEZ1)nfrO~=Ud-7@1N?cYG1Xl z?pmvNuddy_8V)}C35KX73l4z+0s;d9@?9n_9#IDT?;(*0lqB98;~yBGp!T0gJSa(G zRWBU;|Bw8a#qpmpO;E0XIc)zQcf9Za=DvgS{%4FAj1ZXSgXJ1l`(oy=jd>+T zjVm5{bQtEpAmy-ilCp%3wIhMx;Vrio*8E4-nlSEnK&v>mH2087AFCT$$aUOr*63me zi8rD_y|23E-01G*uQ_d(Shj|OEMG{gvF9}P!l|c8yndLRNavNPie#7T4{u5%geT8} z<7wi4?%tih1z192-i&9DNu;S^;j$pNppcZ5`W;q$6E)dt&gHCYzs1vH4-u1PV~l%`Y@Ib z6HIhg^A78m_$h9<<2nMt3OWa=UMgGfXfpYw9mK3kuhnV4tr~dVe_wL9Gso~YzS_xK zo+V}{XZYVmZudY;XE*av!<3_sjI(U3wngazIEdtK-Q3k6^TAwCuZsso>RgnS*D zqkkOchjl)A5)ZNZ+BS@eP@Zf##*)@$Vk>aMoiDW!T{)>8k>l%j@H zpIP~M*RxBkZHx;~7?J-hvJ5n6YJMEh_w!cNyIrl7l4N_>yEzizFZ}EPQvZmu8@Mt0 zEQ-z(-%!djC2n$dBLn@+keEVS;4)heF|mrVPxia#?XA_D5(cDXyZ60oi_m>Uh1kf$ z=2C%=ZC|e>bvH=Ui-Tgr!Yq8I`F4hn$7=bUkAymaM@Qxa)A-Ia2EW#GNJr8i2yCc! zedEbF1QJeYlF|`r+cya4ZsnF_J#YMeT4S#M5$9d&%y5a_*Zq)w0)%yAzk#HT`Q{{(pMw2t&z_MFX2FNC zA#p_MjTJ9fSpXq{452Y-VPRecKeXNLAI9_!2R&^@*r=XAZ6IDc_XkMBR$0!b9R3Jb z_gn65hchA+rZrp5qVE2q2V3IJ?uy z%0`{6*9o8w^ZD*f>%qdan0t{u41udYEi5PoBtNsK0s!cnB$o|<9yI7r5>N}_X|!(T~mfqA&AQ@uM6r@$_K@t)QpNL_fq^i8 zH~cVZTDzn2c65a76Z?;2Jy51E+nl+!C_$Qjh7iaUwN))zF|A~j<2%}=UBcbGCklY7~)+R&% z&ExPiOsaO`4!Nd%_?ES`8ybJN`T*Z~v46Y_7y<+{7YIs4mxrLixpK^*+qdBk+VX-I z_=cz+SEfQyTa({kozkWQcQ=gA2J$akCxwV+KiLc;#1Z7pEg1qN#32rZBmCpF=B&;NebCwTroEGdx8uj zm;t|dC$M%evP9IJJ@Sm3g#*9g%ragiyo<~olj>F`+l8E(JO*dOl}rKcmy6cR5wEpo z=QROk7^ALoRHM(*lvSv(_Rb9MhY=`lw`ONYFP>P_T*EB2Z%b6!_SVpM4bGg%;}?S? z(#^bC)u&&N91nMV7)wjmXK%|-@;JGoYXRF=-`Onw^-QRk4>?EM`jYNuu+$URZ|Aec zI6eDT)05)oiS0w})>g`V9mDOJN}US4hn>$BdwVBug|zdarT2#W>xq*i`+E7i72a;j z&;0Iqw&NQu?_K2Widsbd>&uCam!MQY2d=g|I_z}DyO2a8 z!1*SGfZkjAcyY2t$LEF zEOPHK6LqBepx?{O&C@`iT*#igwb9Xga%3u(nd-0O`K90W?K_X>r3YEo+uuvvUOpvo zSEL)xAhZuje5^VsLoT7R=p5aa4O<9F#KUXe%))QBR%}^*0Kk=E@f31M3bGW4AgM0x z{+_nGf|oPH7XhQ#Qt`I-O0svKJ&o7v>&s8J_fj*r_Bto$e*{IAm(Tv=BT_YU{!`k0^n-t# zsW``b51!}wU1@|iFY#~@&Hs+i{~iD9D8^rV6pV18%XNkSPDUI|uqSmWf~9C~vh7ZP zLPsLE-}%j^$G^dRBQGAG>v{lu4Y*T?QKbD^VM89)@%Q=2lb(y{;-<%AR1{9~PZG}) zdJM5W*ng6quH}PbbKMSJ5!zGNXGd)u$$ED?k@P5?d7cJG)c41V!wLSIf^QEt{ErTH z@uPD& zSKztO%9}~I^5CU8KNes&kiUFR&m8nP8B6zSfahM^X#G0Tn_I(He{GH%vp$^Jxx6m- zaIn0rH@S40qj4Cuj%aS5GZ}h+*P#2}bezoPVR;Sg*e@zi*g`Cf~|+i8)M}6W|l%smy6y-rHP#ZQ8Wycn!L}Y?uG&42Wuc z;{IKwsmVEZF#GK@1$1qHk%2RYx*YC4gtr>_8U2%%{GO|4R=}uSw9X)Qk!7R#%7~o9 zHpkFS)Bk5H6vE2Vt?m}AA(*_7W-z>=poTUf@n)F7Hxc#34a>(0lM_VIHdOEN!5xp9#u<}83A;A`_O;hw)oYsm@ODWpi=My>fzKisFFP+1ypjFM`NDd|0xAm=(F&Bft zytKKjt34UPmREKng1-z_+{pCP0}`2}uz5Sn43?WLM{O=wbJ%XE){7Ca zLA94g=1fQ-eX-`jkQi=`>5x8h;#(2F=c}V65F8q*b|kxN9kf%>MZDo<@L^95lWXD_ zL3%S{UOjFG*1Ld5OW!GiUXbVoZmOGK_S%hcR znm&d6?YdTF!OV%vZ~99u)sN*^=xvXkvDeXx%B5&Ci^wXFJ1Ydwc0Nqv)7!&~WUr#W zKFv0`6N9I-WLt;hL5-AqhIbQ2L+U1ja{Gg^XEyt*gVqe8TPXV+$T~^;K+P#IoPy@w z_7c9&vP;{mo8!rDM{hi!1FY?~dTj#=hez+wxnzTw?tIdmIyd6L2O|p0(a`HDO4-hz#Xr&`VNC4EX&(hz6EL~j`GiqX-WL1(y+uF@yp)xaw^VtzcechE{@ zzQkmGeKgTl-tJwEo<%!A=8JOw&O}v5;@}S}^*CM6Hj}<*|`B6p0t6L*qsjkV`|H8;8h^hHwv#y&>stch_uC?TL=p)om|$zrL-t&v%Rdpn!?W#U{UEo8v0gCQ$ag03?oDl;(ZpEEed&_J_Y3Pr zr@t$a?%SNPrpEL0!R|Lt$?y(5ZXr+%6}u$VhkPT6T_%izP?{6^X#S+o?_y~WV9h~r zL&+0KEGq=`iqOmQg{PPkM}|Eh2;2*ZnCt~V)55|?s0t_hB_QSQt%l}4^$1j#>Rmrk zT~(NVek^uZ{wOWq{VJ?d(k|rFIk|lNL3U#EXmMFM+vx#8?%MU*?>>`1H!JXUZt!Ai z!}9R%4mECW{{nea`|!!>?<9?{_3jI;M}lApq7#7gV##Gkz1Xi=kB%s*O>6NN$wGVa zm%o!oOKpbT{l~mU|N2i*vT*a46fpB|G}gZmH@*w?81EnRh^P85zgso_qv78u5vVi= zsV~_K*FWZxtN35OUkT~E_P4vFe+4)iKO6_blKZUOJTCMPH0-@sbc`m32I3Qs!99^#259WwWE% zIy2-p8-i@iUL=d{|CbTyS0kI%OghfYiHnxo{C)SoOt(dvmDx)K>pNqn=*K-^2-SK} z!2Ey)Fd?jvI;=+BIUa$bL>X^;bMfREc^2gdzNe`u+(VJ8R({*GZd4^0S)WA*2F9f6gD*PwMa>qNsro3}Tcd*>&^mUdy9Kws&A=?`9LHf?O^@I9qsuB8`5zXDeA<>YHja;i4UkCD>&P5vxOf*G?5oV^$-WBmC`fr5V8-+s>zBK((<=RRhz_b9*pZU8fU z`N&q!rrC*HbWJ4@E)$@TltWbz6QZ9VB6nEr;u22z^Q7UY8&4(g6RrqhZ?% z6^m3cX#iLMmOizfsAJPns%+lz-PZmk8B@ISW%d*K=d{zD;ii}G?bNF>>jMF53ovQD zjr=r4At}V;v78$2Pvy8HK9fqC!f>b|$uiwCd+yI#J3!qTmC0O}u6zH786_V}9m8fS?sgWE6`)>A{-?VS-%>5^sG z&=|im4Smi%dX(+YugI<8@OhJ=RLvNKs0u?6QhTL)s58`8I;hDu{kqtka8D|Ik4U3X zJw)G-=)s%s@b)=07GZJ=VPZ?V?)(w-ael#9sq(To`Y>{)*HuDd>w{mK0}sgPmz@zF zxxr0e!!lSSL&Gx?OCmE^(f@+ke?UP4vxBu`AH)^9Elms5#iB|b5fsn;hTaEgF+RWjr3xOZ~ z0YF_*vGw8H3|{Al(KZXJ!}&oaK}M0JtOWa%tjh#NFlRgEdtby8suT5F>hWlQ1TBKH zqP+R7%`1C~#b{nyawh%}eF@Lv=ov(_;}^$dMzu|+#aQK|+4Fr4_9;QoE{hJhL-Hj1 zwGWf$(p%ZsHwInr=JvH6#Z<#LOX!&KX`ns5&eu-Wx{;Dbf92RomQUBu(jr^YUzhch z8=d9p$Col@aoOWibbCA9Lj@hLAE|mT&o{C{n&h?_Jz2&WF$AbV!jAD|l<1pyHZD_i z{z?%k6pAl{H{V;2d?Na2^f0ff5zzhZOxcYTRhv3ycW?M2>}PLQHGPF>Ma%6(Ie~8z ztc%Hd6a_^gXUWLRd>+rQ@lyCqO>WPrt+lcb=jd<#;JYTaVhl)>?8q(&C?2K`blWmY zO)udvG9lnnf^ue8`rK(ItRYRq{bNkWwsluSi7+V`v4wK@nw>beHNx>SM%Qat(Ea36 z`xqY6gioX~+ZIc5Z@TbQZ{xCIKLA6k1)EQ+4$ClU3T)3rqz_Jqpi>nCsWCx;YnLC* zrgH93zvVsTWkTB*2A;Z+NVmaTy?KpYc3t=$t%BwT)<;ycL3JPcWe@+}7s$i#{=pLA zTxl<)qe>yV2{24Ov(btDvs#_VuY(r4p!3>3LAEL$!6CpV;Ls67V~q0B1&~KbT-(9S zloZ3nA?F;1d_7Ea7J9J6x{fXX`x?4?J2uA3ahbgijatK=)BnA$Dx6J<`Ou+8N=XEt zk20Rs_?s5w+BN5+S!B~GV^r7H6jy?h*I_T_49%G#;Zp`y{|A~ihdY@)Gnh0(_yEY( zg}3h}y#3O|UJEH|#>A91Bf!8c0dK=ukyD~lSby%Ck&|nc`4DOdczq(ptguj<#dAsN z95d<;IQoWO{4%SXWyzgLnJY(Zp(MyUAd zgrMqG1tj8r$$qb4H@!|&=I+Gd85}#1gknYO>TF3GX~3Y%5Z}-e2MB8@HHQeP%NZTl zEa{KU4z!tOnp3|cGkrhWV5m6J7@EvKTXVs8dA~gk%ibJ~`}A0F{1C|E1z#e@Zw)FK z-*dG{wKz;2#u_#cnRf4#=|I|mQUKQ@=+Sby)WOY^;Gn>oft?l9!TyQEWnXsv5@$765&;6G)v;{)5r zX94j^6i{>c^#fBH|HqU54^d_t|ISa@i|+y*0(`ab$Y=Pb;MuxH9(iFsD$Jms;pVou z8=GOepgj*{sM-!-UyU20LC&nqguHM>@ddL;{ykfNVziSM}Nd5#>c@*XgVjxP+2$|5KDN|~csbW^ZKMH|p0qh-;^AJKOAy7;wiBhTuJer8EG5XGwJXB z+hu-ytI++@b9YggK%d=}9oZt_WeN9kQnS?=@Gz!D`JKzf%pp*Yz`h2W-FNF)LA~)-@%5qCW7liS5_AAJo38;yp6p2_)iT+IHQxjqcPCXz>_Z~0{BqBw z#1w!aNxCx_f?gE09bL9KTE_*71x0M%2l(!;1?88g^oG>)!N!W{LbAjwrIO+lk}R{# z>jpuCs!AnR%~)VL+6nqTp!y}sP%cBz)QH6nK*pPv3NzS%Km@a6dpJxnB<0zO&wVY1 zfhL@Ac~RV&r{w-ri!_4vesq(HBn}A1^vO%6fxp$+Be7EWg$lAe_-CrZQYeoH6?j6# zAFuTgZZlED`Pwb{V_LEU7MPN1QRT<<5Zj$(=yQzkWEwJ^>%3wi}pvkK=qSxq8YY$VAg?R_w7sAzH;iwV!T1hMefD)|H{p_yi9 zc={Q4LUnis%@3kiEfUr=^izg-)gVEzU zdJGCK&;y(O?ax8)zdB#am%)T`-{9e()6n{(6vPa&FYi#*0i=o+63LwdRxEdpt3x)- zBp#J4l!8;QPRb0!v(~QmL@8ICgG$TS((we{8Hv}3i^PIp9FOSwcPJD~GZ0rOf`O!G zG|X~d8B5#QNM{2z{ylaotE-I_2dbFd07Y@H2V6V3MOws$T5t7l&r{;@Zs)9yzT;ut zvM3U7<3mde5noYQig-!k!!pg6z1oKD|4cWu(^Ac_r1QQGjq}y6}8# zUwhg(uKn_Pz>lR$Xscir5y0#HCOcBSWd^(cgl$1JSusuL|kZ|h=1yL_GFIF@{mlqGj0kB>&g#?y|&F&^ahK* z;~>;eRH)`n%q;JPSn5Ph@`Pm5JW-qWlyWw*#VGm8Pw1@N(Nm(+kOHJk_uNtZDDOd2 zq8Kwlk-eratVU*WW=hOS=?R9b7gkAyKMN3rdQqn~lJ1Uv@Wx8|-G6C?P1(;pWu0GU zyn>9EJZA&<9FGT-z-)hc#16u*`WtFDGfQZ|fl!Fg^T+wZ7i1x%YX$o~XDH zQofJ3A^zG|V?^d>ZC~w)4!9|D$`)h zfDi`v>X6LyhMUb)B%TBZb-KLlW$xC*Wu^(GL)jb?sG&hLr3x@gis7kT6QGG$BK9=D z9&zKtp&(@SYtIF~9J93`X$Q=lHqXH6HiW*@*l6NC$Oz50J^pqE4WA_0Kx@wbD)_LC zVK_3B4dpDk@E9Y&st4&JHXmcb$^!{$2FSuLe))pJ4L^$m+eq)r7Sis{n_sEInLi#@ zH2}vMSF?^07Y0--1U&tG-eJh9Q!Hf5Lwh$CO)=Na{bUaMQ=(iEqR{Flj?3;gsbd#9j%K)V_q{S@+-Ydf7$?mWpxE_BP{|XKZ7`8%7h{S@jB%DqjURq^ zk^BCTk`dhTb4r5+<4c-sg#DaN;Mt`mEuv5EN$#Ztu^r%#k;XV9CN@`u2+PkNUgsS0 z9h7Etp3}~ezTl?NO!hpl66xZo1syCBVV3U`1}1J`?g_^AxrAMsh3YT0yIk0xVQWv`8H)*?{*elZmQWC3dQYZ^QFlp@!G{Y2)o0(A=<`HY zm7t6vEG*IL@atiUD#TU;IHDR;aPEoU_^wd`HKYOl#w`${f`c!K>94s~MIBz*zPX|d zaIl?@#Rk7*cn~Cwv6+gI2;|ezgXPbs?t_TF_~b_!o%Vk z8JGiZ+MgttJ?6qGs%?02bmZT$sXj+%X2If!zHTsEYJ$%@eQK^}FLrS~)uFgk&jn_L>&<#!J{pO+)HlX2z=QxfE3 zr)EMf|I9@m)1;;g{-75y`R+nWqR3yv;q(FY)U*ksskf6z|Bxk8@h=HtzNwlCcJkbK zGISda7=35ma`wAYOHIJvuGkymh9&bIbuDBid>H>BuYvg%_k(E*u1I()tGTGkJGUEZ z8-n5YQnRSIp_(ueqG*VJ6I{O#cU|kfRZie@NBTJ2aZ}=CRj0)gq8JstQL*Uq1wAJK zNkEjFo1>rYCMz#;m@Fr9nmK%t%iMI2!u=-S{; zt|~dAgAgYCk$YQR;u1y(9*-1JbuMA_hl4#Mo}nIl}%vU5q6^^H&ol(Qx#&f0!m32r7j&nMyG|{ zEC1=OM&XAXacS)VT@-%2#Pjw(a%xf8$`3Jwaz)2VkrqO>&(2!E#GU;oEFu~C(IAP1 zeV`Y)%fo+@^5bp@{P?L1)nkp$8a(CGy)*mCEk)RZFdTW@Z^3_gCgMMXatl`+NW+6nwhEM^}2e z$@E`yO=o&PwQV4AHliwK3BgP@SUITc47I-{fhTqWuOHqqm}U*bA>%Caab+F?#YVy2 zL(+ptpSmJJpOUo^e)UHCR0}2NB1ekDz2nV%)pt@^^!XdHtMOS%TVP*=`07IO9Z}Ku z#2&z(D7bi_P9}2NytjZ-r;_HrTp9I4GzorsbXIT0E9df`zoF4XDNzrNmJwYxF^>nN zP7JUn7aM!i(T??g$H4LVHK6VsRkqUW>kUm4p8Sk@5iUnl+ZeI%T96QK*GB4cP_vYl z7+qz0IT3Vvp)EucvIAqQYmNDC+1>J)5jL^Fi#KXbZBLbSh@SwE!^1V1miJ8&^2z%( zVmxC`|ICLJ(s)TowER3JXVzP0`q-0S$YZ@t9hzEw@+6AQ)od49bjJMRQ+9@`N0#{e z3VMgyxg#KQTE}519mc>!_vU1VpUMIK^v{+5`z~lE9QamJ8|N@TIMw!CB|DT(Qqm8- zu-nT)BQxlj0k>}eg+*KmCO!*>S=;r#N?>7kHc zs(Et%#6$d;)_~B?kLye#=hcT@L0et(D}Y}c^FwU*{BRJb_DBahYk1a^GnBQgT`|&? z9D!u0QY~f(h;W?x^~u17)WTlEPZ(YrvYf7c_-$C&nVvdS%y~RK0~+ zdVk~S4Umy%Y$d1Tb7P?<)kwC!ZDxNP8+jjiB-LA5BikYNt%9PGJN14ms=~HIOb?za z43@j&(C_eQqV%60x7GK9l|X_2@}5_QaswwTfJhw*Kr?AYsJhmVyJK4Yb_$`Lp(5a? z-`@_U6#$JT4Pj(do(ZNsp3n~Gg~Jb!F#D}WQNLFhlxRBPGz#Zqy|+~Hrzez4vp(Mo zq+J!xJHrimiyrAWKM&8TL3VaditD1cySDV+(HD`K#>zv+ER~8T-*GG0@qCI?t(k_sxoe1Uy%|l6S2VRLHj<3TC6+k z5hJlgJ*M1*!?_LSyr#KcRNklUVkEJ@rb6jLzJ5AZ3HK-n%v_GvzJ0TXKYqbcEu0VX* zkkEv$%_cy1GAXN)K4g(af%%^6gqBUFTY+sdM>N1IdJ+h^FO|APL9if0aiWGnsJ==A zkmPvbC{*#v=o}Yj)h?ZCX7xYILB$JsqSsFiviHO$nf;uk9I2B83ohdy)%dbxce&tP zdqm}|HAr>f*k+}&Dcw5fo%9J%H40>mT;ZRejG9Zeu+NylO02L6}(Zr>2EI}5^n{mH5tSjTV*w; zdUhU^bA&j|`1difQ_uA)y`C3U(9^u7jNov8?Bg(bWH5s+iL~~g1AeK+_x_;-h^Jj_ z6mpd}bX0e)C>b3qI&59^-O%_hyFc&B-XEInV}?ktLeQ!pE76GhlEO06GQFuTToy zj?UJ%bS5xa4w-X(j*S)Z!{2QDIORXOpE$#Y$SOV6!P<>s8P_M2^@B9n@luMhdho3p~yox*9@7q-*3_g*H4@ z)fegB^=yQEO-0jt*6hX5G#_5HT-x#lQ>Uj>d=nv2p{H zrfLS&(DiXsh$kD95Tw3nN>(Th+++8|aWrP2OxO?SmP-A|SRg$vufS@Q&`(!** zIkH}oE!Y!4fw*X-okfAq#wyavz8il+h+)*jkHbQw_Ii1CQyy(~XleC}%T0hHnqZD% zbh!zGK6p$L?rSC~1R=KfOtR922Q{stes=-1$6q+a~OKp;2;`I+D3= zs$^e*DQBcaZ}eq30~~mN&x?x7pXJxKUfXecEY}NQlXP|ly;ZCX=VO5|4T=VLZxP$6 z^{jI_CR0=Gn?bshX!)sd5$@)Sa3P}Rn)WFP2eCF~hTPF!2wp9t{7`YQj~*Njk=i-C zxvDIprWOysZC}VCI^wrq(lY6^NbV>@mW~hfT-=5@vM-%D$+cG_V?}hPy{oR8Lm2|f zT*ynnID|b|d6SnSg|ybGS*|?iq#4p zDp!VuoXyHf{voLLrLQ)$-;x%VrU&Lmo^i{S?Oa#rV;*_^uph-XBU~$4(YnVPe8lbzvOrLlV(BD?yN(HW3EPcEH>!og7`<-=OJQDkvUe~1{2g=&4Hsj1o zNmu0^Uu?d%{`fA=!^$+>hz7Q!lG=`{6~hh}6nmK8hR#uZs6rJ&5m}PPb{KHtW&BDz z@yWK3L%+91*S8jo6gx=+ui@{5em6 z!H@dD2JcGoNe^fg^6j9YH-cVbyX}@(7K^e6vrR~3Ez zw0K_vZ(!v@d$(=%@8&+}d~By#`7H9g5;^~?8&@XPfh5qL#zX%Az1Gpz32`Q{8YLc7CvVOpFX*p-tt+JTdda(lf*Mc?-FDG~n={Ew`P zzEMn&uxoelFPYXN4jWiKHB#hP9$RiB9QSO?g0++eU}9lUUIR@XmEgi=5wRjbHti|~ zi5j^Dy%)A+Z>b;Y~_=jg4?yk_Y0z2uzvEWMTgZ*B3)PV9~Jj9X^ z(rB>G{W}PIWEWbkK#2oVySw*_R=j<`mI%$T@3Bda=h9~ZekpHwStg?d8GJdYW%7LCmQ=3Zu=8Cxn*Z^pGlx?N zV`24}nomL%AKOIJbY%j-j-#7b8!+6B<99#s9z>L)<>~=w<4}25v_OZzs)ZI&+I8jyQl;fnsv-^NErY9I~U_cDZG_UKg^S2{Gz3jaqG{Xc1ExVVs4 zt~<<##gs7|ui$eygA5otYD+>)%na_@MT9pN0+2 z{Epowd50H=*NI*MgDW!9v%i~{Q#@20ulX0=2hLmTvw!d;38B;vs?rlu4%f?X$2OvV zZmio;*a0gJughu61kIX>Y$M=gDSwtCXK!jSwYwXcM8|Ms=QV|wjhS&nt8OE`sqn0R zf!8Ssdf_n#DD7@EFe}A)gIVXlh%20Va}^8#T3}~u?Bip=vrZt#w01qM`lqr{vhUJ9 zi3Awcv7firF-%M;txI9qFiEq_NNV3qhe(D|oXFeXCAe?n!Msz_v7MH#zWR)eJ_0C& z|3y>@_^#@Hjt=XH7g$!1JFA3oZ&h^2P3ttB=>ahQk|s7T4@kYGazv zyPxJo&~yNdO8V59TkO~GOGSc{jr!NmzkJu|)7owjde+ZUupHvR=9zR;y>$!`lxCD& zQG0axJS{9)Zr{6CNe58D+>(O6w!nVHQTmz=qbym4cRbfn*lWgPe$V+vY7w(EO1q7x zsJRYqHlTJOqyE{`7VyLsYF*rD0y}?q1@x4_7R3WtxgW9WJm5M+br2Y241?I;4IYL^ z#?N9CWtNGkvNfOAVkC%sbngQfpOI-BRLNniWi6i6F%+nZ5o+re%N0rm_hbsHAT@kj zi8d`T&uMkc7ne_8e8TOIrmKG}=n-Pv%z(`1IfbjA*dlMFJ*?ghM}k*;QN4!ni)>|7 zM>YnkXLTR7&WCJQDUZwCxY!E{>lyDYti2{aG&(+)ZM=>~^V42N-u${>y>Mx5|8&%R z3al5{cYgdl>#8=f=KLe#Q_m-MZ=CacXelIbxRygQbf((Z+b;koDE9iPF#9NXLGpb^ z&~H3*(2Yq;>^vEw2)+rT`is+KMNgrfU(lCl!d;AokLP zIHbD%wt+~}84ay%&Dwgy`(nY~_pBDNQPCHj<^~(z$;71v4;1O=dBXV<_&3^zWbQeD ztoEu1Z;aO-lTgn#SW%2fr}aa(0Lk`7ycp7xC|{KPCc2~B4@w5P_2|uXjk&zBhBhab zq)m;`usORZMxZVEI$xPS*ZK;0&%__;Wsk5hGryQE{)hopul=o^$Kr-Acou2K%zBen zX1BKJ0qa*Yie5>OUr+Wj-Zwf^TIYlNd@ew_5}R-w#6I#MZOt~syLE2Pb8L_e_Q*UwS}WdxNHRpPg@WV4TfHYA4wLRV!? z8FK4Mvq}YbuEqSS&r`&w49+1JJ-zosH4ng*Vf$X`%R5(zN5=ijXAd%YfM`#b*}l`S z;}-6A55E}Fpbo3N?XE`HBdeae%7Tz&mwvyWp-FX1#oK5SDhcoYy72p z3Bpmn;0rE(wdLR_J(#B+crAE)z+fL@Li`bEr)HE>9CQ0F4_(U{F6z$PV?($?&jzRx z!4lSH*w$BaqSmzp zhas1!P>Oq)9?F1Jo@~c*&*IXytBw|{W45#=;{g>A=1@l$As#Z$dU(+|>dg&BE!Ahw zC;0640%!f^1u?ECzTorfjBnPIg9d!)H>L#PsyGp{!mt=@K8n&tUTrCvI+WGqSwLm! zuGW76<3VeTi4+Y`>UBMm(5*bFGP3K}qz49YTKlYJoER z#dUc}7g3*9T1d(4hsE@?Tx9Wwl@Aa28t;|I9BXgWiaK9AuTGABl*C=|CPV8(teQ)S ziGOQBjTLU4{<6&^M5Lu`4gXm30Lbe5xDv>kE+!wf6^$Od9Mv+ON^+v103?915w8)(5EJ7#Ea$ zYezBfD1#u>Urb+GaohfBM=uLXobu2CE-z=-8rT5>`AJCs zis$=d&Z}Y!()%8tXAg9(G6=hBm?|_TnVxl+!!n2qY1o$8E=Wgx2V;v9R=IP#>yrJ* z&6yWPPS2mQQDmLr*V^7zio%1q1=VI`ky}iTw^0Nynor1lBp4qdCVzj8q>)u0oH1D$ReYWwP(sntHN-#)1T3Tp4_>$$mSZJjxqG642P{zebCbLt_5o%9x^#o}MTE zeE#b7mdg7(MyetrFDe%kA5SNFAi}2b4zV`Rs&y>fC3`SAu6>y5P?KtyYQK?X)k&B~`ne&!5C8?obFKMk|$&?qQ^MFv5- zBJF%-TU_rIGk<&_OKW(_aa=l|o-lLWrGsEpIWJ-NCkXmSlm}GBVl}w$ zM*&^gfxPn^HAxMkgR3VUKmlGRZ~3@Yu|phoUMdE%G4D!OFzpW5%|U<>C`(tIC%&;Q zARkf`+ku$s2lJzn^);+!YFpQ2%Cc(5!OonkS8~D_VvHhcz$p&VoJK}hIyumrYMdK) zho!wNNVwK=ShhNa$=9@sxBUh)ustyzV^ks{B+g%UA5MJ@<(7GAk=^?Ai^Zw4 zyCN?k8DG1s}WQQ`>6d*SyWke~Vfe@sGY zLVLa7__}`s)o0ffh^jIUa@h2H5zF!$jyFM4rMNlPq-!HiJp?0Bm;Bz7SH=`XS#1b2jR9VFvlMTI)_ zdGFBSpCINi6wn^SfKrzN>M8hXNW!bV1EOsqB}42BP<7U(ZFtJ+|r&opRGaa*)fqnRS{9 zlug-axPLZSM`$SqdEIWu@NcO%wgj>$@b2tujubScB&*~H0~THnZPBNEzv=V44BhRm zqWxeWdUr9en{p$Q1DVq{BXRz#4&Em|Z$Hg$%cECd<7Cs@ajC0=zun5PLU71v<~*CA z`uQD~`w7h})waBsd_yAn$&9swz7-#HKN`ZkPpZvJX`jm;#Ur{!HFARN_jb_EQwE5% z)cxgv*jbPG`B(^MCw{;5bf`!f#t?_lfupJq@|LgzgFNK>IWAm&}N)rP3j- z^L;$~!BRS1T##NYDRs@Dq)|LdQfU_Fm9*F{|KBfTo)u{FjiOd_lpwAqRbJ-XM_mlo zmhZ^wl&s?I=|8X~myFccH@HedzjX)?v+{{wMAj=y!^L{fga9_KQS_m^>( znip0S`)2d+suD-x+$)h|EJdLDdJ&=>(2uBNF;Fd^)<4XEHw3Tu$YgM!xl^dab3w!1_(5tHA-flf0N_U`LAL!biM;X z`XY&Qhe-P^S*ln`KBEmOT!_whtNCn77@+$6$bVwlI&C5I_)>HY!jk$7mQv7~tDDZ1 zHw5o{IC!v;@RL;XnocOrgh=)Xw+h?m+)S|Ph3>J1Zh zzyEj)`uoDuL0l@L%{l>xSOZ3tkg+7IXSEy-p1nC68$KIy8iftRFV!QCURG6xOORRL zZGWK#Z%)L9PekHPL~|UB<1iTkmruMwYWJE!%@s|BfaZc9qiXC9407Kbh&2ub5_}kj zGpyD78Xt*f>Xb>>YOh|`N}UMp#2pL=QZ@rxFR2t4W8EXLqBo243@zzy604hbuU#W?&0pk0b|lxypBzC3$d;n!>~r zVFDO|h-ULg#swb7;WrNcDo0-LO@WHxY(|oD>w-j$euH6xQ!DFa)pFjeCg7;*@_%%w ztQwYwT)I+M8ecIbN2TE~OC51#yBm#ObH1e$Z%$?>-kelRyg8|ycyqFD;?2pf5^t8W zyv%BFUn74xSv^B%7t*vY-nPy9VCHawG zE1|)EWE2Qr@xyCMA=zIl`b_a<78krhpK_LyrWa%uqmGq^Ao(rQ4uUpip0#FIf}Rza z<^i4~5N#4>Okd=Kem9oJbj&6>y=^w1v!^V?zU9kmJBO1fy!G6Qb*IZOynmV^VXNn7 z(5E##5_{YFJY^XiN*2( z>Kd^mej{g3rEERDs6+K3jmkAxP!UhKk(TgPwyae|uNrl?H(pi` zqDD215-3#)8s|@nI1UFMm48bha|=f#36HaIAaHrLDxYNoy-08YH-08mRaCbnc z*GMAqHC4UZtQ34&lO|^*#p(1;71L{_4#Xphj>SqXD5K(8rsUJumQz)y64Z`DjJJ!O z2_|7684^yI-DmdIw2V=_vM1ugN?5b9TLs4uOV>+4gJhej$^^w+2Y)e{C~FAWO=&q? z^#%>AcY-??&_%Ginro%9J$K%kd0oZi473p=U<}Omr2W%}<7pUZB~$twvbbgO?w1P0Tmm8>cdR|{T2 z3m5W5U_ePmqN_9LhJWr#=uX_qYj2E!0M}k{&D|RJmgql8oG7bRymUY{6&3pt5ojlw5W#qCp?!lrqTKtC+_ZtG8W3UM zK^%}@=AKz*lgy6ualMPaV9$o{-H=Ay6aNzN2;p-IR+u zvvswFvwhVTK+-EU&D40}&uUWzWt?Y4St`&SCa-{4CE(pJUOZ2VHtdRkCf_1%sG*Dx}7_hgDYc zV<|Qqvw9CPQ-2qYO)1RIA?sG8!e}>1Ju`c`Ye2=(s1~H!Afh{vKC7N~UsmvxjgUa# z8D7yIb?603G}0+yu`lA$vsRi{#@ktDs;YzvY)Yyo{j(nSFKbCq^kt3q?X!Iqtj01C z*k*F$oVBhxAV_m)VyIE@Sf&mL6+7?}l=#Io8L86JE`MqRVeZIbfLl0)r&CM|pPvbF zrmUhEgZ4udPOwLkea&^8H`54hz$l}&bj@43QU;?imH{)D*i5@@6~S$x@b*W{&_uYu z$cMWya?9OS6zcqTL}s_zEuEY$^lI}JVzW`E*=?M=imfPqH~;sB6vVC2;9pO=== zD@KEHi8J65vB$+oI5fs=9nJOyh6Og_F17vB77E2N@I%_BmVyxN1dBjK8CQ2rsS@_8 zzAazg*34e#`zoC=%V6%kagMR65QT*tgV(nPgP;Mn${(IKLC!9EzRwh?qh-jt%FRu) zvVZ4XayTc*(Q4zCBX2sDD92`j!zFki)>N`kIPZOs!7QS-Bh<3>rP}@CUHK}ASNPsd za6OFR;Rb@Z>Y~R*TRWSBwlZJUEa4(^T@A3BbYv9PcEjN3ViLyRB#Hr#@QN?<)-Oqi zm3YT_2|rz#;5P*!S_aC_%o9037~D4ylYhKXcIU^ZxT^da@rIUQk%%v5jl8wfA{A1K zX_2qfdg_+ph-?*rO*YDywbU&QT@9=9A3Vi|D8kCIt5DLr>y<$r$S zelMwVrv1X)<~@UioWoWy*oO}x-xslVQN%g>D4G7J*pp9%idpO8wn93PekeRY&Up;d z=0v*IrNWn)IYP3{7W)V6>^u-a3(0-&NSvrE_QswsBE5f9EI4m*T-7SOPGoS_r-Z>V zJAckIfcB1O8bIMu6?10qxT*mZzJFi?D6P6a7ZgIWpLS88o(YW42fznX+HB!bL~wnG z_;6r5k^&p!6%W)h<{naVhq0I zem$Ir)u&>~x?5eP6!+C56|62+m9u4{a%{kjm@S;FUd)HG9%EF^Th_$ z#BS^W`{=?(>YD8|8DNy!=~ADjnNj8~i9h|3N)9#A4HfBv*|d8C@d*h=)OmxNfr6bf<>y$GL!49l-fFrfVQ7t z{WuR`+12+14xe6j)q~eC_=@xek{e*JU)Hs3&*`g`w^3sgQf};e6Ms>(Agzt9*M{J^ zYFRIhsj^ajDgs^GCD)3bti7yRsW?6jNLNAp2~6r|ZF{Belqnh2$={#A@niE0#V1~m zq;O|eF52^hNa6TV=uQX9MTD7FeB@eLY!=4ME58jVVzHH^f8XH1Jb!I(zG za)f90G&FxE%#cL@sDA<>=6-EPAp`OeStGNGPVWcKPg5CN?cJ>IZ9EC?9#2AzAgQb$ zD=$xliXRRAzVp6F)se3(b+tfcOu(KCU+Xs_Ig#vcoVoALq3@x?Gz}1>ANA`@`A}1TXaX1ew0Qy6KmGdmoI85PNqrl>F;|@mkbhs=SJ$2GtLs+t)paZT z>be{9)phsPR~JU!jfcesDJ}du_WrclpbW%tEtw1-hSaCmNM`4I&CbA&2g1jGwG)SG zcHad$G)H=oqu1`>syohawF529(Z{cmsampEX<5pa)1M|aHe9#`iS$~e|z>Y2uh5n zw`GYWcbK98$f#J-x}x>lXiBhk|ku08}g>e#W6G@?KDEN|o_{{?jx}zM;U1 z7e8W{3jLFRwGFPtOpPGa2&k-9*O<5bYMO+v!ziM7heFEoJej+DF*`x{qFRFRMdbwH zi**x(FZNZq=2|7!BN4gRs7PFsBC+8#tBXw*y?@!q<|%5RBcmsSG_zmUfs?LOF96g{ z2f2cvnD0pY>)`%!GZo%n=McqLvN(eZX+6;@KB*Bo9ltv7SnJ5_VU|Gd$RK;$){)s< zLxp`jGCMsf6auPGN<8w0N&EX?s}||KCw~$vuCoB&hWsT znEw8^bj9wfdz7Af#;cx;f7qwcEs<+x9+|scLIGC4ubI=6b ze^3%?7A~QySB=6uXFMH@av!HD1zFJ35P!xB?+i%M;-1LV>}5ETI5~1G{)n||#;~^> zzmH~lq6W-{v~qy6BDvT)!YUp%U+=w~t@mD5(|a!~>%Eto@iieNyHSTT5~!b}Ue=l8 z^=Y+8v-0(oRfLT-hc=y__`lS!=YH&y6A1sfIz8`RT=s|%^Yg#shLZZbHk{J&?03!UEUAmgzKyrXfQ~XNf@pna`$;z5~Pwq zJhM|LT&hBc5`Lo6ZhS|D**=()!vc*OSad=2T}Q!y2z1_@)N%%}L*bZ?mr;8X-^ZVL zOZ4W@^GIg#iP_CvNox8paU!Bb^-L(U(K|93>~i-@8D5I=s+_HiQs%8L`+s5M`q<^J z^f5AZZ&(=EaFg&tarfLkz5%CT>2+K&r&f_T>j)GCC)cRzKI6o!go>=yo)RILW8K(H zPV-=@iA#$}#R5#TXO^V68hxw`=SF?@IsBU)h&Tj&dn3cK#C~3u@b zg=D)uJQ3Ht`^t^=-jorxE|gF2U?<%8$&xVu z1nT_c5m9hSfsuSyyM*e8V9#w_TU_v5Sh+^3;fLj@)(&k9B+L@U6#%;Cs-E3!)aJ@o zJ_cK5EyW2)w|0263V&{{uvPu67j{ z5`@X)=KVR#pmo~J-L<9B(6PFR%K&4RL!YUxC z#91wzRNi>OpEbj>69KDMoUAp-TAFr(HRS#$w_e#!|xh0y%Z59_=%@nXdF07FgSQo5=Mmv|#MT+>w|& zw{sD(w13{+O0_D=Haj;Xzv4Qv=TiqJqp)SQxi&%=0AW0(%1mP!$JB(1WdLB`W2*TP z$#~MylEIA(WJJ+St=AI9R1(Ee%smjEtH9mnoC4Yb(;hvIERkE?O_LZf!75BA91B`lU zr5^T`ydDY|xbp0<4-N=6!b|XKO@ohBvm0f!#`_X*NUXEte2>C!TI`e?$OIbyXvP-( z@K%-ut|Z}vLpIbr&f(nf-qRFKPS=vtb8uBsdj}&iDMVqipnz00R6!-jxF)sW&ooQ- z_7-J|3I7d(jRCW8hVssF zJu0GNhW01GIQmmGvMSpmtY*Sz-M->YbAP0AwD1n<%5yL;fPk6s)~dMdQzbDjO1yzD zJNIKNK6kaQ_qy*J9w>}~Rc<8OGs0(~aGP%R*gUo(hnRe^K!In5<4jKu5PF2w{#Y?;IhlBj7#rX70#G?ZVaNdOKK!0%lA)Wxv zluO_ScW4~DRbq9p@K+mIDXEwurw#@VOS=MmQ+c0)`~jFd?IGsC3_(cjbHmxhJdKJ< z2pcOiE(JTkK6r7^JD77f7LM{<&c^$#Ucq%Q7{z9R?4;7i=PxD9kX%ps7nWpx6}fn| zg_o_T1b+3CUV)Y|qG?Txe1A-}X@H}IXtLraUPEH0F3le9bEis2f!{ShFQ#(@oTPj5nIYAeSaH7F$->5@s7Y= zNE-8jwpP6&*sCyomGRCklSq=Hb}=Y-uB<&Pe)8J1X#8d6!PH^@wG1Nfi}RaloUA?; zoy6Yp@%idQ@vbd*S`7=MKU&U3biku;2*L9MQgmbCy2UrdvtIM0!kB+uipEWpPSbP#vN z5v3T67(}eeQ2&jr5LctzR^#?)gf5@b@Fh_URC$>c~Uu zj&8n&5fX;s*Q(fSHF-#5XLQu9cY_Y>%I4QMIGX=JdaGg+oPTyY&kDUYGpCmb-y6&_ za<)^5wrB1%jsH^h9ZsDi_yHU8Dj7v+k*mj|^h4iW{p%Q0LE3}N+p@|S*yuPOL|!g9 zr)uB>S`Z4Obe!7!O6YyXc4fX8=-YH@-x9a{VFn+`pQavK+30-2X&lf^6gueUMGba< zeV;ulRLHf=xPRoJnf@XM1JLm(!8>$*CE=(9_<5*03}8$L>%bT{)$e1+9QM?Zxb&ya zw;dzPM$gOf8V>C#r}5|u2&wg3qv2$FX?f*tu9c5CpJl{!TVdKEtDic22)NclKsLH> z<7JsX`>~ZiT~WeZ!5*25w8@-H3NPpz&LR-2n$ogWmVeD-3k)jKi=!pIcv)k=je}Rp z5u*tW#(4uQ3#1N2tl+?6wyYlh{r~y<-{wku-R{B5-;mW9y_=B;{=ffI*nYIX|LyPp z?=$67&Ir=7=Vl8XQ!jYu$04WE{utiqm^XH7f^6i$dCls7!6Q5do1(^_1B$-+=lfUR zrvEzrW`7oSBGC1j?-qh|tpD}xx3fVCtAbQKE<+M0G_e%i2fS~7coP!IYW~KJKKzFb zA%SL{wdz0rNRQ`TqoUvDd-} zImmtBRC99BGk2JPL}z~p!Umi(Q7tC%XTqP1gnxafzU6LlJbV`Zpr&bAD`1~S^iX=@9)DSzz(iSC6j0awSnK6k!kEw@fW=SN+WcSQ zWU4c!y7Ic6V|CksAQvJs)q~HU-n1|IpTAsJDB)$SGs-MCtqNZ?6nmywmBliWQX7RR zo>jebG=8Axok1MeA$TnhohpaP(3L>8LLAGwAYoR%JMF`vxd!1&mH<`VCA;<}s(%ul zNq9ZE-wTN1iSH%X#8gV)>24Aj;#BQYE0&_;WlXZ_2GdW~uW$g;q2S-tueZjvl$qm> zs&Io6ts;#=rKk`#fFSSng%_}Jn*|c3Eg7=X__1>b_W?CohW{f2S*j%BEtTC%t|ve{ z(cO=+wt{_=#BADR#oF`XNxgB(D}Q#r$hWefK9-!ggFu5^lf*ilC(GyID@@T4J<>_=@Mx4h5b;)J1XfIWy@~Sl4odGo6WpB-C1$=NG8}@4rZx8@9MPX>bC1t zww+xKsA}?Rz68Lt6578LKv$Fh`0IaT^g4uIv`(m+<(L~EXv;4rprm2v&$RB$M;>mu z$#i=ufIB0^AiRcK6zAG+GE`=|*rvvK?Lx~NC?mo0R$4|v*L~HR zfs>G78GpK)pbp{XWv}N}KDD|S$sL>)z2mLpdkOohgaaAJcHxWRG(um^*MHu$*}~cH z9MAU(4BM`8F@;%%`s z%+3zkNZx~dIq=59zt*eX@AF2HQ1zEdGRpGKrU#pJSW+@DsPdbwzMi>9X;-VSp0d#T zNHLs`gsvW^*o2n|N6MB_YwT!WFz~>`KRm-*CiUa$J`y3{KEFUO^!s-$t{A~%@=w`- z+JCu)1pM{$M&Y{G{jmN5{PmJ;;6#)SDPoNL@)D|a)|Z(;it*KO&pF?Ic<&s3`;bWI z1DZ-;bE7ZMwA(i?fV>Z}!{ub+t9FTTCZ#K@iKnVPr$rO$J~$ZM6tMXbhpq1%ef^X> z20VG7vENL^j816#LcXcZWRHv`07@jsSbw6$7l^_ebmy`wgq*dyECxAx4^@**Rb49z zu^b|MWS&)}GlHSMdf>a$-0tBT3WRcPk+1ggP$ANTMNC9$L>1bp;$((v=k>>r%HuyQ zVWcFSqJxp*_Tj5ra@ODnF(%GW;gY@$Jy!)8OOZCECx|V&^8yDyf1t0Q025O&Du0iK zhCatKZ~eXTs57VY`FHQkfO2pumz<55jW$bK ztFR`FO`>FL;ogd1fH8%kKjrKF5X&dH-f$?UGVg zTwwj>m02sX#@!ghh4D3$tPfN5vX!eUOU~Bp&1YFs0)t3RYUy8|`{H1j1b^o$IszZG zDJ}(mR%KW;I{2B#4yc#f;%NVByoslHHX`4ogOjaRmqjWbcokM2r)L`bIaWuv6$&=f zS(^hs`{8BB`9T+l)3q9-Wiol!yl!W-8&B{-K)mY-QD8P+TsyKL{QQuvn=?vF8%H@v_C*$Xg@N+<*DW@EU}6W-JAr zRHMQ9srJ2tm%!U>8_L#^yIE!AY*)(2FoK`2H!CO9s*7X|6sYp*WExFE<#4367<>Em z@1BY#{Yv&vmnJrL&^i2;Z#q@$g7Z%$Yl3{CKXXtbnj-AJW~>}_K&M(ph{HsrEcQliwA6jtV|~~daT`0eHbprFy8NKa`t@v z%nkMLN5k99U@2E}D-u;&KW9g%8^CX{>Yc;+A!0 z?*wL~`2K>zR%|?MXJFGFkAz)gR-Z4lTd=#{=s=!OA+I~7RaBY`CI4$5x862hIEQ3@ z^0{UWc{WHHP6MqvmcwhdePfAC$8~KPaco7HJ$K&CrY@xfz5e*It2^FcOr}a#h@HNO zy+Mjtyn~5U8Gl3EA7x-w_)$zO&JqKxVCrZci+oiq6sSf8p{5=NZ2=s5_gLpG3Sr7I zC$^%^+Y6>DIU_4TV1%Ej7!p-LjcY%vuMmx@S40mz7^M4CC7O*doD%(f%tN#P<$L(A zPNzfJYWx@dGkZn-vz&`oWpoQJFI3p!Kv=gj#|?YRC4Zuhco=cNbxl|uhZB_V&@%um zhx1#Ejt_ay1@4E6K(qC|4Q;>-7V_Nmf@DUImU*BG(V4oxUs}nY30Syp>Zl~8dK`T_C%1BC8CR|-E)^SxI(!hDp(3}}-~aIW+cdb_R6Y%XoyzgV-k&%~d?F)sPhu-^ z=MeQ7l+PyjbW5^il<}GEnTyYNCGadd$0b|7i4(lh&@@9T%E;69>$e%kw>$q;jUAXjD1DPc4s_9StN-!q(WX)RUt3d zR3R^R8HhXu)>ixRx~NklR90M6y70X4VNsEwb}p%v5NH}M^g_8G3kYF}R^BE>S6?-S zED=U|qhz|a2Ll*rJoyOUQGX%kKvg`iR@#7y{o1j2vu0vuvf4DnUVc%!#;R2m zc&KIJ=AwA?O-t21trit6{8{ZGZ@gQb^;EVWz?sq?u60JQCdau$Q}IDMx)iy!ONvzRofw6J}V}AttBK-+IO0t zZ6T_zq}b-nQJ3JybJB>wHdiF2MG=Ro*P+l_%5N-VO0*bF zhbhqvo;f5Q>lQkECK%&|(#bxb@0_R314#$my!a;^VGnrnQGuw zB{lG>sv3B;rW$y)ubxB|!0d)ooQ8uFHhMK(ZK%L77w8`8&|szV)qitEq2jQf?Zx>h zle8d1O<~t`pgq;%&GvudjYb>m@W!T5C!x&~sN9d)EGq~Dc4Tn>NBn4O^4itD%4_P3 zPz8nSj4N;Ym~19ix;Z5!r-X}RWLw*5h~7x>gK@9N~-g zL`R%*KV?U$O3z#;;o#bp6WfYhJ9j`#*64Z2A^>#C7-?9#TLK!TDgG%nNT^U;Y&pSn z77q2>v2N6$T1BLh!GXB-Zmi1T5p`iuq31jf{3C0!(toheYkyiJZp3GX3?){Zw2oB_ zd`98uEclZSSZo?S6l4Spdrq_#yOL2+fO==!6d5;0mKGU$kYKXqtxz3>`z;ZSwiu!8 zJleR!)*L+}#^g^V1?KbYHB4D*F%sy20s^~53@7qtio@W#*{sA}?=jJZuZh%6V}8pj(>E`kCV#!<;HDaRHyAOjF0AY*F?u9+ zyl_x5RPw8$S}a;Tl0LVz#rDT^)gil2n<#LOrDD(7)tp_ZE5_WM*&;p$!7AX<(4xWK zo(F7CDg6B4C2kvQl-EQpkBG=$f#B$q;7eEgSSF)T-3EEGceoC0AG`n)5_L7=vC?(vJzbDy^H5?ZNpE0NtpTUt>56jv7+k+iwF;_bs@_Q2f$V-oQDz>joNgS@Tw!L zIli>KX%my&6d1M7cSKrVi~>?oW?wPaosyhAm4ADL_3c}ZY($rh$oJw_a+q;^?FHBI zwC{S+BjWCFIfmCtyR}$42OFp?Un=sMzC#t3I0zw(9?&;i)(_!ru27+2R`5l1W2)+m zN3#_Jl~6W>a?EI(CRw;}%xS`mc7}rtjJ4ML!7{=jjrarzemcQeu05yP1^Ou#)d;?* zJAbnuk$jy>$J2?UI5yDU$OGLp8jKz|0Z`s^kNHZ8-;~_l=^UY<<-UU~o`14zG<#=O z)-mcT#&4j4)zMtX1v68%cS)o3~rN%w9AVd}( z%qksO3$|q|F*8m%Y79Mb0LCENt-^&dtWtCJ1JD6glc=i#gh%~HVyQ9gar*B z3q@j>@HO164N>NZ5)p$MJj)#ob#9kBhn`RM{u}zNOrK~~(#Zhsl)Ec9jL(Kr>wlwE z?C$t*O+A^eBP=WPh$!@JS+CZ0>68=52q6w5#5DJornzJ_hg3|7P6Ll*j8sbRQJXi6 z;U{+%=tDYm#rTG1Mdug^=V>s64uV)Cqov$q(8>d#T-lRpwz!$_(n-zweoBzMW#CAR z%TW<=jr^=n8K!C`UIJ5y_*(f%AAiv~D{YEgXBrvBFd=?45f;vv3V2EnVXng>CMIhK zbVF`PZlsM+@9o$iy2r%bw?cJn48U)*Y+=`Bxj3aLNA$4~EE!yA>E%?oCuKVNA{mT~ z{)Ed$+IDA0+IFi&+IA~P+IH8CwC(Q7@|ikouDwBu>l&R6-PKK+(yS=@Ie+h1;Etq7 zF!0Yq1pXO2qWETyu%>j(L2i!Wk=7ztP5hvMGmqFzdBu4}Fyu>0rD$0poP|{a_ z3VL?i0E8jKI`XuaxyhGkwl7(;gC;7x^wOJ zCV-$xxNUYDfuS)Nb@-u!w5pIi6l2eSP!Cgp)x)y!>w*=;ildhb4|;kv?I5i?eux2Y z&(zOHRCrvCQy(BpAnhZDFhxsXY=g)FwgT)oUIIm1M9jZVRY9hB+sNtr;owW#MiKpn z|B?zCeyJQ+JEr3mr++`%1fRlZd&Ht%t1_KsB!$CleE$YsN3(}S@ivGP>Z4Lc9L3Kv zedARCa(zM()>@8cIi8g=*NYXBT&~!tbTg`^*m6J}5Gegi&VO?ldKE(k2k?DByVn6h zeui&txrLwu#W;&f7pVeFj*2Y1pW4r?E0#bl)c3=?g8o8L@30!GIgNjG&wJgItCP!% z^MfJ~@4BZ4#)oad?syIf^v)~hd%&;OLUbiVjsqpjr9zddtraRb=V99ftb8~vdk6iq zP{sSIaux3@HGk^bRlI*tCA_IkA2tR_E07x1y9uNvi(uzAgcWecM5fDsqw^QwuzJ)? zqhF1*@devWS>@|g3}1bS60cRY0jS~l>YpRMTIZl*9glRMEgnT)Ti9$Jf0*`6&f>2l ziN(EfWKMtq9*%7tK~$J6NaTtblNZKHVyRrv7{!9sk$(b|xM= z9I%^A{H)rr@pJ;X97Nt^4dRZc{i;J0+MP~OyGP5QwZ^K<a9Kfd;ymD^}Ot zoSVb4;b|)%S#MQHEW7b3m+OJ6ORz+N$0MzhL8qD!MYkrakULp1h-PzEo3o8Bv);Eu z%--=#et&@VgH_StmEx8E@z?*xa^pY#`kywn1|fmSz*&JMyTGMoTCuqbZ$e+%zFX!=}?JYIb$`o@Kc#X?IhXI~PcfL_{ROU_iZOYpe1f?rZMP<(FK)4Q2);B?1I( znSat3TO@&b>FMd|?&*GdmL{Y5kWv;$QsENGve9+Q3{6Oq)OJ_G2Yi5i{%CB@HZ@m` zCwggL;ws0EoaZ*_&hhGQ!S}F&WR7EdW15xhI>emkI{T*<>Y?II!_GO44+DhW$D2ib zO-=DV5^N-=mAEunPS6+c zY&7cpAuHiHh{#@#p3GBvUYkqg86H0^&e~#Ou+b*J?w$$>h8}&U=`FaD8AazS?qcZk zCug9a^+E>d;P$<)56|ZwOyXuKZsKO^5#vBKslE&cmqRD`v=upIJIl!;U46)RIDc_} zfxosV8CQ?!N6b=;2@bg?$%rgkVe#LSTg&7a^2v@{e8DdOx+3Y#HbADfXwUDsTom`T zD!8*EM81O~yNTyTnkhh)fV!9Kda2^N5F=L1Qw6l*lImLM+5*}kDajc_Cy0rb(O8u4 z1Pp?KARsa{b{;Q0P{Yum_~8EtPJe~#GlYM`Axe2?r6Q{AcSU6?U;tof5WbM?Ze}J{T$3vMH%7O%@h(dYh_otD=P#yzRY5-G67jC(j;# z^JuBJ{o7LB_9qWsye!47APZbJHHVq43muj73HinHd|MBA{e*Kve0z^fA%ygs568KO zMqR>ub*uEH2x(8K`CAF+--yU)47^FIcw5%oi2#)fH}W*n1PjL%hEa<_`=o3T@6tur zl~2s;hI;MzeCx)gwaF3A3A(SFzp05Vj7)}K}}AQvzl~ef`6&mf(nY`t)bn; zD&u~4kEJ`xf7(iLMW?2jEHqq@_#3xtNP*T5Xaij7i`j<%t~dB(X?Jo2Z==6_JvOBq zFY4NCU)ZGDJBjU;r_ty5sLZTWZi~+tp$|20EGG1^g5}?4;it z>7i?}q$^qWMVHGXx|R*DoN?+qvr#}jjLo`c3x@HU6kBti2T7i8k z+`BH3k=3qES1OOhculeti4f!D0`GpLTse`13^H7Lv}cTk!f6$Z=MTr{C_mtJ2A|OS z%aUXwxAbU1(Up9DEfHxyx!HJl#0E;kQ-N!mN30Lvo3sVAKz|ae_Gudix3_;-dPiJq z?f2N};1a1H?1!j=Ak?MtKTbXYM`0q7w+I{KJ~&|y|5l*J^+`LuHZEU70EMbrp8NKaDQXCn~1$D|(}%v5|pSyNb@bs?W+8BE;TvVsHn=4}7g8Ar#w zcylD5Tff52On<9s$ocz|s~|;aEK`V6YGruEFLD`LaCNh@g)D#uCFQb@0F(V~*dQWw zj2ILQv&ba($$8a<|A1jOtLT^W0djaTPsuoga?d?lC^l)TkSo=QJ;xn;>8)imNq}0> zuWAHFPm)Un<33UGDX8&dH`LN+tEPKgU7K*bI^VWjx_@o^rD=)rN9B3_(7={UJaw5S z_lhsD8iwh2`b9A%b9FNdGr2CUaq|>j5grd-poiMM#Boit>Uo!29AMzZPHsBRz1qg< zZJldJcYT)T=i#3kVOf=2W7fqv^$o3%Q&<2oIL6UE6K(ZKJXs&_?`z~C1Ajwv&q3SbAT`}>2IBmed;ZxL|7f7^ zPIC}X_?CLDc7=;DC3UyCC`*(0G`K&{wl0r|&^ygbM{1&+xT$+4s-20lWpyLhW*~ZT zF%J9I^VKmHd4)gITNs6~E1Y#U811xd`dgSr`0YIhZHt4>!`=2gI?!XchR`PM^?zw5(+!XCJHx)Q#y$he?V0VYID99szrGoFg6SyiiRy^G?r(tqi6m>Xk(nCCMp6deNL&Z2mPgJnuVS7#0e zf(Nf=ayO|3RgQ9$i0_fBBy>lr3P?v@IkZ`toJS+fH47;3nbHL*xoln)#{s|f2Aor+ z9~c}7E@I3mno@raDC$5+0PFJ57_C98X*5hG3D)+-I3WxaCa4~uKlaBZ$GEvxpnp!+ zNakCfq)p_0zJJ99VE+S%_Z)#qZf?$J8h2-fvCAS8i^p6I>@pa`Z-N@vZnp(5j>pX( z%;@DOoCE)fGvU9gQmM;9s4X#%`79vuTA~$K7V@fB1sb9 z`Z0F4M744ME_K%KLz{%u8UmAESVpA`Y0QYmWev~6XoA{MK>60f8Qx^6-Xze-OH5}R zSA>!i=%q@eSv7NBh@?~a_ zQ^^EjlqCP0@St3JuUoZ*^MC#cu8B7w??*UNSS7`_1rg9JFCHj_V;L(ol5-_jS6z&B zl+JUYdI8cqXQ7tQA#@%@F>HNK$d46JOe5;xD34gw20>0Z4o;8hz$CtnlWlTX!GK>4(bb*8Bk`|*aEsmd=sqrnxyhZOv8-08h<)aDMP(2B1ApH zXP~AGGz6k{aqW>bnL$fDHEMjW=L7;VV58!X-+m{c1Dxy>^o&#?zUo3jC^JZgwMb4@ z_4!Ioz=EJkv!+6A33L0RE%rBc|#iJCV zC$oqeO;Xz?5QJLIfq!Dm>eRtXtIJc}EYoKyMh$+9W;yA5UTi{1^;}&tv3TiL?rVL#-K&EE?uEiP>(brNEQv zaLm$@8Z|}`0yNjT&*uZX%S)M<>e4qbPhg#{1lB|=cQQZ`*?+jS9Zh#tm$NfYrmBOw zGOAjv@q(_~At}(Y<63)#UD%n1*$ATCM({RfZ`Df#*P4q8Vy+p$ z`}eJsinLS9-3zo)-7N<*0Tm78u`tU4*R@BfoNxUT^wBYB5|ikVUfNgjyx9&81O_-9 z1hboLfTPC`UVH?#+J`1J{TKxWXK!?qr7Kd==~A0)_kYRR3KnGK#*%RLvXm$IUkHQH z^Ix`t;UpTK3F20k-2f{`%O*1MeR5IUg(Np+ptXz6)n+^cz@syFF(8`05~=`91G2xaB&dr;DfLE{|pbnyL8T! zw_bY);D349{y8i_SYyjo8~|Rc;miwcXtE{Bnq(yiQY2Y&LUkQcbfa+@Aomes=LMoxs312mxD+gzKQ>Ym)UrvRpjTu8U<;Vx5SIoCK0`a zmPVy6u_gTD@;E=PymQ(dSXO8dI_osNDu0w32pXZ*^Qmd10#33H&()`BiXQP#QT&N* zeN|Ll&9XHT+}+*Xoeja=A-KD{6E^Pd?(VR02=49@GbX|Tp8XYbM!v7PF~ZU(e7Y$c?W z?a~^&Z3*`r#*^FdO!jEhPh&GNBNa5rjf3#x+!A>c1>5_b{n^r9zKLxShvT3Bkp$tr zfo7H)U4ebqgESc;gZ}F!+AXH1oh!09!}`c!2&(ln$y0VvZP^m@JHH%1rWU0Dh&$dW z-?_Mz6Vnv5eRe^xWnIo^XG<=D{y%AwJBU}i{nsv>lB`-px<2WBfBMuxS6$jn9kd%k zpok(4dd3-aFT(1DSAv@y7j0^-ZGhZ$JB~$MgMh-E%12uMzn|Ez%x*=mWW5usp4<#V z`SF7~+2oU(E(rhL1v)?q_j)|{OpIML^XDIF%I+uzi`nkGC0w&o+(&c@TM`{5n)gVP zyk;F3CAYt<;v>F`LLh=pW);dU4wj5EA?g)|g;t3G#r3sE$yv%)j7I6Y3Fl+93R=9< ze3+Qhi#tY&$g5;68^eQ6&#{v#UMp#@)bfI^%s#s{O)p(lQ{Cp7yn8_l*>y-`t3g&a z<{pRq;ThIJKq6gbPI58ntEfn0mbOonPZhATE!cCoxv|uPdOnk(SHr2gpA|{&hIg(v zb(EdusqO~q+F~jvJ3v{6k9|3eC(5xZ2pR?99?n#E(T=r4QND&r(@<*hD@l3sZYeS{ zUEL2GxupqLdT&5@Zxdzt8Z=a~Y_%gN$wS-{2g61h50Am=EC4h#5h2+Y3GzjWngp_D zw%!Xm?Ay!w77S>$2`i&2c--?Gv{ku!`uZ-}73Y~|wA?~eh)g8R9q)Hd!yDtg6gfi< zGd-VKwRhQ|U$j;^66*_~IAAg$+AsNWm5Er){r#iVbEtsMIK6zY;n)U*J z$Vt*E2{f5(c|0=L>a=xHoUP1dFmjNy%*@oTvF0H1?3mx}DLe%j`rmHFhHhrYK3dAw zYy#VC^!$E}vgg%4U>sBHh zyKf6Itl&3OPQiAhnm!>&bEFxG>W9xewyUET-$6}Zx!;<5Y@tb5j;9KFxUY|#(p#Pt zVhlT=k&i2vd78ZWX#o$MDynl ziFyveP`Px|{R5mkbTiVnSGU^U*E6q(UZSGqTdq3e22ZaOXw_YO*#L>ZuaHYWsdX+` zZfrdxgn3fo8VIurL9T&Zd9Xu}A+ha-LxsbiVt8TROHD(#=Ncky$*iTD$^7|r?)kfA zzf9}xdgIf(*lBSA4Y)@U$$M0S+Z9Zvm{ifpY9zYL;5$DYAKFg^p>rRaOnYz~=qH7$ zfij}aedfuJJ9b#{y#UIC6|9*gsK_X z2i#EV5mwaN7NN!@#LWg11a=SnNkW9)AWdp_$`eZcfjiOKMa@y;lXoc`Bf2f-Fb5QS zEwA99c;m;I!_UwN4}SiyLg+;V{$2~dH+R2zW_!5C94=6|-Ftm^yB|@#%zdTs8K(t)q(^1qP z^1)7Cz*YtAm%+V)7)q|h^9mc;v9^ljj8smuifV5gh>Tn{XyVZbVD!V=!@U5^;|%0F zM(q+5m6&|oUVlqQ(i}Y@$0DCyeV{9H|J?eq{sfJv^}(p~4RSk}v)H!^c7z(!URu*G zEiQIW2zo1A+hU!j04(>5xoqY*B4dEl5v{f^@Qk0uw>mfdhs(^Qf%UPuquQ}~z2tEz znKNL;=Px+49Zq=T!5XStj9z$EHAsoK;Z?eS;Q~z7NY{Q~q!gM{AB8-?k046VqE6M6 zflqhCu0Qb5=RuxhR-Q$p*$Zgx%DD_(BW|I!<&gPL{pw*y8;C41$t+&&t6ZOIGExL` zAS7wU0ZhXVdny?-q0E?AR^2?*AiBBLz6;2&u&4qz(sK2^OQfl4Q1%AU)!nNsDi=y{ zLOgAZB>>$7XPsc^jn$K#%h}Z|%~iv%jCuynt^C_BY7k_Ycd!gS1U^hlYs1$+l;jPe zV*A!?qA56NLM3J~DBH1T=d_e5-1vaHuw2;<7@V-)cqjzcY8d!PJs7#lT;M2QJT*I> z>;;P^>rjf5b!UddkslqTz_}j%jadnDzr^KhhiVP5?(M;QqqiBYuv<JVWu zux`mXuze6^vn!eV7D3fwiyvmNE)K5k@tRzE25Dp0K6Op9OZK5|Xm#SUSkC}u5Cq*| zkjZ-{^rS_)Yp0sz%O|3}WPX6%efXouvXQAfm( z6S>nV4_&y*M?4lvE`m%BZcNeYj<9d`(I}W*8fCF*y~rqL^o_{1w7wwD#FL6Ph+L)V zrD6+l1PBi~8~aOXV_#b1tw8|M;#(&em-t855^E`lcq*L6Ncl891E(Jb#+}MTh!sy5 zu)QZaRxYqoApgu-~@`9hcrOu8YfO^Sm&o(tC{*lD%d4TPkk?US)QpJux@QqNyhg)P*lCZH4 z8)k)1;V@b>x1&+8!N0tm(CO?8R3u>5Y=35waZG70jM>Y4HDrp9Pfy^SP4Bu34KK!~egEO-9kIvRncaHX-*%lq zcm3*O&P*|1pB&1})H`zou%zpQWt=P{QY#hPB42*d7>WBN*%uX!LQW_?z;M=&E5%-y zxvNKSck&x0^!8d{L3p?dBh^Nw6*xI&8_Lmo|9DRp_3!0J-XNjXX8dX=>;Og`DKcGU zO6`zv9T&NVIW`=oXufXYs78-C-lOuRHdD8#y;w2CnPSdhPi6ji=Zt_nTzps?F3lEq1f%isQ2SI4aP2(-U&f=@7kB5NBjH{@W{gGu126~_hM za&Vej(I=XRDMJA&UtUi+3H8j)zI^xV$PaHmMGW>v41d4gxb$Fa93y4ZnIvbm`1;+7 zi({ynflLl^>%Qk5Ir_nW<9yv<3!Stu0goxvTaxWJKUiX1zy|0VE9asif_3BuO3qvn zSB~Fs2nhuW2->*kV})+rWDVYiCpb`H(nDO6kjbH#M zH{TfTC6Vp3fk5hi+iGnX!6r%UDDzzDCWy(f&o`KS+E$@V?9dC1EzX@(_hJ{W2Lq~@ zz0_bxLY8|=ia&qGm3un8G6hqRMIy;KeZ4A~tiRlo2%?lu^m)n|xt2eQ z>sr(QgAfhn#L~M#-FO>eO`LeQlB-Zw7rYn{qSD#vF1*!yU$=E>@cx@ho4FWlCxns~ zJ%^peQi*Mb2sh`52i@xooAU=5ZTw9(CKYe5aX-?yQxy?yz4Y@@KSiBV^T#07HiKDP!N zR57ONBVc@WKk;?@sj@_MmZ?7*)h0K#-5oXHt-w%+R{IPJ&dhyEb~C*DN# z{)#%*94&#MLZp2hO-M@74LJMP(DvKkcbn%gFNnf~L%-CMGq z_BdHLNtfKNdN*o)^syp2Oe2;dk(^#1I*Nj~KVv%`Ic*n2Vs{sG-lW%4?tNQaI_Sen z)JyJ&^qcvvi1a^wIznFF_58ykQ{1xT5qFWwnU)kVb^IRE_e9(WL;TCIdv|` z?|_hWRzpNh60#ya?jJGiNuLt$r+$3|&xK`*nCMwioZe^t0kGok_HtR<@a3c!UVfsY z@{9Pg*o|OG1MENdoXY3OgGXqQ>|L_^k|VDGn$5R#u?6^jGp_>Cq^b%E;?XylJ5mmU zWAj~FpLfN#LbAbJ&f5~zT&^G6<6WWNyujO4v`M^STIY{YI+u%(c=zizvP-8tVA7Y; zA7RBzF^OvJhLByT;3m2b7#^Z%J@F*UFJ`|CAv!aUvuS7JtwqPMT8FH8$Ve|6c6B#N zyvh?kBla#m`b03Uy1udB>pP&`iHmiMOVn^9XEkMwMHSf*LDh|D^!nn3wxl+}as%M$>7f)19s3eBlJ0YgW{l(Z9TZD=c8MS8@ z%lVyb7_uGl4}PC}QGhip%T~LU-yyKw-So6EJPSwMI>NhU&@7>msl++D@PZsnauFo`NBE;{|Nz+Go7&}HtdRSIa`A(-3&Jq)} zTAz#h3NAu3!JSB@KFtfE0n5!bE3CUEwPj3QrKR8@dX;$cGy zm1=FPd|#Q)%I#v+)<_eVqE%qs18K}U+|?k` z1;TM8QLX7L+4H9?Q$JUKutMs8+ZOKAKxAn7HYm0gfw4qv%%G}x>=fksn zPUIDl?K_$%49rrKuEJcKZP5u}l;74@zP@V-nvp4PHtt+eZX06QL;sl{ur79S-gZvC z{27f><7NGXJ)GS)nlT*liC7l4+i)V+(161(t!&20Y0P%!+SAx?C$_i4wBaqeqv0D^ zjJ0D8>7D%2+!?Q2N@yl+YU4d(N4`d{lYTFgkZ_ayC?YBxNDh!4=nM|NQd(Y`i8Tpy|4hgJjHx!%3b3{3G-sp-f2I%=N^obs1Mp#R#{Hc4u zsFS9q(kqHt#*p9*X|RUHN0iylvYxqaTh^40R#>FY>mP8z`lN&#DtRhAltGu@6lvsI z_Ri!lBz)HTq!%cD67>RPz`EDO>hcXsrQIPI5vXsvA!CS6oidpGQqH-ux5>)k8^M5R z*&46ONobRxb`l~BPi?|I5-)f;`{0bP(&mNYC37+ZZx(TH$#gr*Y|xBx4jDP1ry-t}88bwDuNlJe6sUt6k zrLH;{=^-Vs9efN0M@^;To>h5gX0>R*KOwyQK zzGN*9;hFB{o$z)hj?VU=ZM2S)%#og}-#9^WzAR6CVrKSu+*?hbU$G$*fvz!Z)_|@w zVfhZP4{4}r=wZT+6ID8^YzFM}i)nmC5XzOal`r&DXpv&Cx~mM=R4CiB*EYB`f4`h( zS(J1HmaKR*LR9xmxXC-b5KLM4icg9MZMz=e5j_g1#YzfNZg7Sn=le}Eg?Am?t#@C$ z_}MlT7Yj6Sd2RYP{Kg|HXDwCwj zc#xrH3a0hR@9M8lNuLbI#zx|BI=|i>O7WaG+O@WwnSpau@cQ~rniYl@^#Z{ouJ|lq zccEAp#Qr?lDCE{vKk6yxRYuY?6d~3Nfy4odDf3gJjNya}S6J951N7ks_YrhD6pOZ4>o}I;l8d9?W%y zh?-+WC52#*EO_Xnomw%`72jP9G&9@a@O!{OhxTN5w#6FU-{SEOfMY(# zV*%V@DBtF0FSq@c6^_xxlgTBe=20ewmuEU9f995W-wM?*A8`$pHBrJ3w%01M+5ebY zv1B}0ec6kp523-^aT-CPfs4T?A|@- z)tjz@pp&>|(&wuR_M&>!AOx3dD(OkU;mN5lZ?etfYU7nhkIHRw#ZF)Gb)l2%sYq1x zjJADKNm|T08e7m-E2h~hFKE4T@;)%&{eIxqK`^#?f5&gI!-aBrB|jxl0NP#IwbX3- zFT2^Xdp^`125an-mS=a6t5&A4Y{Fxgf@1-PLoEUO?sWy<027D4E(LHbSvWA+-Dy6n1LbkTME@v%K$Ym6uif%~>+DJ|u;^NN5C81l;70LV z??yn~wbZ*>mn1el-9mTyh}K8dws?K}Y2+G<4g)ScF;=ALXL<&^joQC8NzM( zPbO@6cSt&|V#M~97p4ZtUNWf3+_1V+(%qNiZ%g%@-JqkBnkml1E(w&}8DaBqt6{3CXYp zNKbv5LLhE0!>PJWqgJr{yq)jYWlEVdyRo@jYqp}Pp$(O*gTo7c|MAAB&sp^+_&-@u z$6`tcQfYqbaXLeGIex!a08IDv2k*6{+lNt>!q=*=SJ8UEqLT$6E)ejq<|Qr~H3dHM zUR9pY^t!vh2&GhB?W48}eJkK%R*`z*)jYg=kYG;hW{iMW&rC*D*M2oe12+`<_R-y$ zLkpCvpVI0xWN|UAEp`zS&QX=|hmV0D4Mu7S~>Rdp^*~q7($6cm>plt4q-ggJE=}?$` z|BxqH?LwDU67M)90>ob__PN)oIz<`I_5ky9j#m%=Fn7VR_#`_Wvo;0?oL*CR&6J#aQtjIXj(vUe4Wwe{D5pcm$ZF1@ch)eX)_~SB8ZSIi}YcX~>U*u9s!gm_x^G zl>w5;pEG{&QqDW~(M<)^joP?IQOz1Tk3Bn}InH6JrKV-{c0`RIL3+68?xhkQ+W~=< zx^jmHC2lwNh8^^{>|@=k=#?He0%%+7->A!=Q9zya&Dg&z29*$I)>q$4gb~mllviv< zVnYQHld{a1P0r!4!~I$sKuHEzdt9IigLt{vC!MkBR-7C_tz!i<>lN2r))0bkM$fN3 z%aC;sUvQml9HZ#XAC+Y|CNi9@C&14IeSO&t@g(AYzYEDBo`SUZ6)xT;m?B7hUz?|I2KC0G<2&yk%4#41> zJ@n+{vsS?VqmQeD;gULFjs~<3#`ziBBF!)p_KZt_!XO84LB&r?oPA$b^wJ%j+T;7~ zxm{?7`*3VFhYv8=5f|Gw{up~V{1D`CUNK#E_?(r4soQWFL=mp46S&wr#u_%rPV`MqZK$@P;t=<51R>=OJ( zM>}r`nrS3``XW8Wn+DKWBs1?1+R-TEuj1CesYAUJ@j;KMW*R~ss6rxAb*ENn6TFOG zqpfJ}1q`?m@4i;e8{>&O3$4kV2I@|;aNjPKp`&>C1FCsSU*0ObPJ0Z+E;ERCw*l{2 z0CftIiCM~0CN8>12ks1hnxp9~!6`P+rUv-0^Nd&iR*eW|1W6#_Vq3Mu5;lE9$%v`Q zL6s-^g$v0f!O7P>Rc+JT5P@~r5*)e6SF@&{cYxbMqN+O;Qtb%nm&$y*}XoAe_8r|)qh!Fzu3R*aR2}C zNCQ&;<_VHr25A33ZvQvlACN`*M^*Xu>&$xouF#XrKggv05A)xJNrb;M|2wE4!N5!% z9o) theSet) { - String[] theArray = theSet.toArray(new String[theSet.size()]); - // TODO: Get locale from OOo rather than the system - Collator collator = Collator.getInstance(); - Arrays.sort(theArray, collator); - return theArray; - } } protected abstract class CustomFileHandler extends PageHandler { @@ -514,7 +505,7 @@ public abstract class ConfigurationDialogBase extends WeakBase implements XConta private String newItem(Set suggestions) { XDialog xDialog=getDialog(getDialogLibraryName()+".NewDialog"); if (xDialog!=null) { - String[] sItems = sortStringSet(suggestions); + String[] sItems = Misc.sortStringSet(suggestions); DialogAccess ndlg = new DialogAccess(xDialog); ndlg.setListBoxStringItemList("Name", sItems); String sResult = null; @@ -658,7 +649,7 @@ public abstract class ConfigurationDialogBase extends WeakBase implements XConta nCurrentFamily = nNewFamily; sCurrentStyleName = null; - String[] sStyleNames = sortStringSet(styleMap[nNewFamily].keySet()); + String[] sStyleNames = Misc.sortStringSet(styleMap[nNewFamily].keySet()); dlg.setListBoxStringItemList("StyleName", sStyleNames); if (sStyleNames.length>0) { dlg.setListBoxSelectedItem("StyleName", (short)0); diff --git a/source/java/org/openoffice/da/comp/writer2latex/ConfigurationDialog.java b/source/java/org/openoffice/da/comp/writer2latex/ConfigurationDialog.java index cadb262..ce4afae 100644 --- a/source/java/org/openoffice/da/comp/writer2latex/ConfigurationDialog.java +++ b/source/java/org/openoffice/da/comp/writer2latex/ConfigurationDialog.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2010-12-14) + * Version 1.2 (2010-12-21) * */ @@ -31,6 +31,7 @@ import java.util.HashSet; import java.util.Map; import writer2latex.api.ComplexOption; +import writer2latex.util.Misc; import org.openoffice.da.comp.w2lcommon.filter.ConfigurationDialogBase; import org.openoffice.da.comp.w2lcommon.helper.DialogAccess; @@ -677,7 +678,7 @@ public final class ConfigurationDialog extends ConfigurationDialogBase implement StyleNameProvider styleNameProvider = new StyleNameProvider(xContext); Map internalNames = styleNameProvider.getInternalNames("ParagraphStyles"); if (internalNames!=null) { - String[] styleNames = sortStringSet(internalNames.keySet()); + String[] styleNames = Misc.sortStringSet(internalNames.keySet()); dlg.setListBoxStringItemList("TableFirstHeadStyle",styleNames); dlg.setListBoxStringItemList("TableHeadStyle",styleNames); dlg.setListBoxStringItemList("TableFootStyle",styleNames); @@ -687,7 +688,7 @@ public final class ConfigurationDialog extends ConfigurationDialogBase implement // Fill the table sequence combo box with sequence names FieldMasterNameProvider fieldMasterNameProvider = new FieldMasterNameProvider(xContext); dlg.setListBoxStringItemList("TableSequenceName", - sortStringSet(fieldMasterNameProvider.getFieldMasterNames("com.sun.star.text.fieldmaster.SetExpression."))); + Misc.sortStringSet(fieldMasterNameProvider.getFieldMasterNames("com.sun.star.text.fieldmaster.SetExpression."))); dlg.setCheckBoxStateAsBoolean("NoTables", !"accept".equals(config.getOption("table_content"))); checkBoxFromConfig(dlg,"UseColortbl","use_colortbl"); @@ -766,7 +767,7 @@ public final class ConfigurationDialog extends ConfigurationDialogBase implement // Fill the figure sequence combo box with sequence names FieldMasterNameProvider fieldMasterNameProvider = new FieldMasterNameProvider(xContext); dlg.setListBoxStringItemList("FigureSequenceName", - sortStringSet(fieldMasterNameProvider.getFieldMasterNames("com.sun.star.text.fieldmaster.SetExpression."))); + Misc.sortStringSet(fieldMasterNameProvider.getFieldMasterNames("com.sun.star.text.fieldmaster.SetExpression."))); checkBoxFromConfig(dlg,"UseCaption","use_caption"); checkBoxFromConfig(dlg,"AlignFrames","align_frames"); @@ -825,7 +826,7 @@ public final class ConfigurationDialog extends ConfigurationDialogBase implement else { mathSymbols = new ComplexOption(); } mathSymbols.copyAll(config.getComplexOption("math-symbol-map")); sCurrentMathSymbol = null; - dlg.setListBoxStringItemList("MathSymbolName", sortStringSet(mathSymbols.keySet())); + dlg.setListBoxStringItemList("MathSymbolName", Misc.sortStringSet(mathSymbols.keySet())); // This triggers an onchange event dlg.setListBoxSelectedItem("MathSymbolName", (short)Math.min(0,mathSymbols.keySet().size()-1)); @@ -834,7 +835,7 @@ public final class ConfigurationDialog extends ConfigurationDialogBase implement else { stringReplace = new ComplexOption(); } stringReplace.copyAll(config.getComplexOption("string-replace")); sCurrentText = null; - dlg.setListBoxStringItemList("TextInput", sortStringSet(stringReplace.keySet())); + dlg.setListBoxStringItemList("TextInput", Misc.sortStringSet(stringReplace.keySet())); // This triggers an onchange event dlg.setListBoxSelectedItem("TextInput", (short)Math.min(0,stringReplace.keySet().size()-1)); diff --git a/source/java/org/openoffice/da/comp/writer2xhtml/EpubOptionsDialog.java b/source/java/org/openoffice/da/comp/writer2xhtml/EpubOptionsDialog.java new file mode 100644 index 0000000..b3dc0aa --- /dev/null +++ b/source/java/org/openoffice/da/comp/writer2xhtml/EpubOptionsDialog.java @@ -0,0 +1,319 @@ +/************************************************************************ + * + * EpubOptionsDialog.java + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * Copyright: 2002-2010 by Henrik Just + * + * All Rights Reserved. + * + * Version 1.2 (2010-12-28) + * + */ + +// TODO: Add to doc: +// New options relative_font_size, font_scaling, use_default_font, default_font_name, split_after, page_break_split, include_toc +// Also add to list of possible locked options external_toc_depth + +package org.openoffice.da.comp.writer2xhtml; + +import java.awt.GraphicsEnvironment; + +import com.sun.star.awt.XDialog; +import com.sun.star.beans.XPropertySet; +import com.sun.star.uno.XComponentContext; + +import org.openoffice.da.comp.w2lcommon.helper.PropertyHelper; +import org.openoffice.da.comp.w2lcommon.filter.OptionsDialogBase; + +/** This class provides a uno component which implements a filter ui for the + * EPUB export + */ +public class EpubOptionsDialog extends OptionsDialogBase { + + /** The component will be registered under this name. + */ + public static String __serviceName = "org.openoffice.da.writer2xhtml.EpubOptionsDialog"; + + /** The component should also have an implementation name. + */ + public static String __implementationName = "org.openoffice.da.comp.writer2xhtml.EpubOptionsDialog"; + + @Override public String getDialogLibraryName() { return "W2XDialogs2"; } + + /** Return the name of the dialog within the library + */ + @Override public String getDialogName() { return "EpubOptions"; } + + /** Return the name of the registry path + */ + @Override public String getRegistryPath() { + return "/org.openoffice.da.Writer2xhtml.Options/EpubOptions"; + } + + /** Create a new EpubOptionsDialog */ + public EpubOptionsDialog(XComponentContext xContext) { + super(xContext); + xMSF = W2XRegistration.xMultiServiceFactory; + } + + /** Load settings from the registry to the dialog */ + @Override protected void loadSettings(XPropertySet xProps) { + // Style + loadConfig(xProps); + loadNumericOption(xProps, "Scaling"); + loadNumericOption(xProps, "ColumnScaling"); + loadCheckBoxOption(xProps, "RelativeFontSize"); + loadNumericOption(xProps, "FontScaling"); + loadCheckBoxOption(xProps, "RelativeFontSize"); + loadCheckBoxOption(xProps, "UseDefaultFont"); + loadComboBoxOption(xProps, "DefaultFontName"); + loadCheckBoxOption(xProps, "ConvertToPx"); + loadCheckBoxOption(xProps, "OriginalImageSize"); + + // Fill the font name list with all installed fonts + setListBoxStringItemList("DefaultFontName", + GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()); + + // Special content + loadCheckBoxOption(xProps, "DisplayHiddenText"); + loadCheckBoxOption(xProps, "Notes"); + loadCheckBoxOption(xProps, "UseDublinCore"); + + // AutoCorrect + loadCheckBoxOption(xProps, "IgnoreHardLineBreaks"); + loadCheckBoxOption(xProps, "IgnoreEmptyParagraphs"); + loadCheckBoxOption(xProps, "IgnoreDoubleSpaces"); + + // Files + loadCheckBoxOption(xProps, "Split"); + loadListBoxOption(xProps, "SplitLevel"); + loadCheckBoxOption(xProps, "UsePageBreakSplit"); + loadListBoxOption(xProps, "PageBreakSplit"); + loadCheckBoxOption(xProps, "UseSplitAfter"); + loadNumericOption(xProps, "SplitAfter"); + + // Table of contents + loadListBoxOption(xProps, "ExternalTocDepth"); + loadCheckBoxOption(xProps, "IncludeToc"); + + updateLockedOptions(); + enableControls(); + } + + /** Save settings from the dialog to the registry and create FilterData */ + @Override protected void saveSettings(XPropertySet xProps, PropertyHelper helper) { + // Style + short nConfig = saveConfig(xProps, helper); + switch (nConfig) { + case 0: helper.put("ConfigURL","*default.xml"); break; + case 1: helper.put("ConfigURL","$(user)/writer2xhtml.xml"); + helper.put("AutoCreate","true"); + helper.put("TemplateURL", "$(user)/writer2xhtml-template.xhtml"); + helper.put("StyleSheetURL", "$(user)/writer2xhtml-styles.css"); + } + + saveNumericOptionAsPercentage(xProps, helper, "Scaling", "scaling"); + saveNumericOptionAsPercentage(xProps, helper, "ColumnScaling", "column_scaling"); + saveCheckBoxOption(xProps, helper, "RelativeFontSize", "relative_font_size"); + saveNumericOptionAsPercentage(xProps, helper, "FontScaling", "font_scaling"); + saveCheckBoxOption(xProps, helper, "UseDefaultFont", "use_default_font"); + saveTextFieldOption(xProps, helper, "DefaultFontName", "default_font_name"); + saveCheckBoxOption(xProps, helper, "ConvertToPx", "convert_to_px"); + saveCheckBoxOption(xProps, helper, "OriginalImageSize", "original_image_size"); + + // Special content + saveCheckBoxOption(xProps, helper, "DisplayHiddenText", "display_hidden_text"); + saveCheckBoxOption(xProps, helper, "Notes", "notes"); + saveCheckBoxOption(xProps, helper, "UseDublinCore", "use_dublin_core"); + + // AutoCorrect + saveCheckBoxOption(xProps, helper, "IgnoreHardLineBreaks", "ignore_hard_line_breaks"); + saveCheckBoxOption(xProps, helper, "IgnoreEmptyParagraphs", "ignore_empty_paragraphs"); + saveCheckBoxOption(xProps, helper, "IgnoreDoubleSpaces", "ignore_double_spaces"); + + // Files + boolean bSplit = saveCheckBoxOption(xProps, "Split"); + short nSplitLevel = saveListBoxOption(xProps, "SplitLevel"); + if (!isLocked("split_level")) { + if (bSplit) { + helper.put("split_level",Integer.toString(nSplitLevel+1)); + } + else { + helper.put("split_level","0"); + } + } + + boolean bUsePageBreakSplit = saveCheckBoxOption(xProps, "UsePageBreakSplit"); + short nPageBreakSplit = saveListBoxOption(xProps, "PageBreakSplit"); + if (!isLocked("page_break_split")) { + if (bUsePageBreakSplit) { + switch (nPageBreakSplit) { + case 0: helper.put("page_break_split", "styles"); break; + case 1: helper.put("page_break_split", "explicit"); break; + case 2: helper.put("page_break_split", "all"); + } + } + else { + helper.put("page_break_split","none"); + } + } + + boolean bUseSplitAfter = saveCheckBoxOption(xProps, "UseSplitAfter"); + int nSplitAfter = saveNumericOption(xProps, "SplitAfter"); + if (!isLocked("split_after")) { + if (bUseSplitAfter) { + helper.put("split_after", nSplitAfter); + } + else { + helper.put("split_after", 0); + } + } + + // Table of contents + short nExternalTocDepth = saveListBoxOption(xProps, "ExternalTocDepth"); + helper.put("external_toc_depth", nExternalTocDepth+1); + saveCheckBoxOption(xProps, "IncludeToc"); + } + + + // Implement XDialogEventHandler + @Override public boolean callHandlerMethod(XDialog xDialog, Object event, String sMethod) { + if (sMethod.equals("ConfigChange")) { + updateLockedOptions(); + enableControls(); + } + else if (sMethod.equals("RelativeFontSizeChange")) { + relativeFontSizeChange(); + } + else if (sMethod.equals("UseDefaultFontChange")) { + useDefaultFontChange(); + } + else if (sMethod.equals("SplitChange")) { + splitChange(); + } + else if (sMethod.equals("UsePageBreakSplitChange")) { + usePageBreakSplitChange(); + } + else if (sMethod.equals("UseSplitAfterChange")) { + useSplitAfterChange(); + } + return true; + } + + @Override public String[] getSupportedMethodNames() { + String[] sNames = { "ConfigChange", "RelativeFontSizeChange", "UseDefaultFontChange", + "SplitChange", "UsePageBreakSplitChange", "UseSplitAfterChange" }; + return sNames; + } + + private void enableControls() { + // Style + setControlEnabled("ScalingLabel",!isLocked("scaling")); + setControlEnabled("Scaling",!isLocked("scaling")); + setControlEnabled("ColumnScalingLabel",!isLocked("column_scaling")); + setControlEnabled("ColumnScaling",!isLocked("column_scaling")); + + boolean bRelativeFontSize = getCheckBoxStateAsBoolean("RelativeFontSize"); + setControlEnabled("RelativeFontSize",!isLocked("relative_font_size")); + setControlEnabled("FontScalingLabel", !isLocked("font_scaling") && bRelativeFontSize); + setControlEnabled("FontScaling",!isLocked("font_scaling") && bRelativeFontSize); + setControlEnabled("FontScalingPercentLabel", !isLocked("font_scaling") && bRelativeFontSize); + + boolean bUseDefaultFont = getCheckBoxStateAsBoolean("UseDefaultFont"); + setControlEnabled("UseDefaultFont",!isLocked("use_default_font")); + setControlEnabled("DefaultFontNameLabel",!isLocked("default_font_name") && bUseDefaultFont); + setControlEnabled("DefaultFontName",!isLocked("default_font_name") && bUseDefaultFont); + + setControlEnabled("DisplayHiddenText",!isLocked("display_hidden_text")); + setControlEnabled("ConvertToPx",!isLocked("convert_to_px")); + setControlEnabled("OriginalImageSize",!isLocked("original_image_size")); + + // Special content + setControlEnabled("Notes",!isLocked("notes")); + setControlEnabled("UseDublinCore",!isLocked("use_dublin_core")); + + // AutoCorrect + setControlEnabled("IgnoreHardLineBreaks",!isLocked("ignore_hard_line_breaks")); + setControlEnabled("IgnoreEmptyParagraphs",!isLocked("ignore_empty_paragraphs")); + setControlEnabled("IgnoreDoubleSpaces",!isLocked("ignore_double_spaces")); + + // Files + boolean bSplit = getCheckBoxStateAsBoolean("Split"); + setControlEnabled("Split",!isLocked("split_level")); + setControlEnabled("SplitLevelLabel",!isLocked("split_level") && bSplit); + setControlEnabled("SplitLevel",!isLocked("split_level") && bSplit); + + boolean bUsePageBreakSplit = getCheckBoxStateAsBoolean("UsePageBreakSplit"); + setControlEnabled("UsePageBreakSplit",!isLocked("page_break_split")); + setControlEnabled("PageBreakSplitLabel",!isLocked("page_break_split") && bUsePageBreakSplit); + setControlEnabled("PageBreakSplit",!isLocked("page_break_split") && bUsePageBreakSplit); + + boolean bUseSplitAfter = getCheckBoxStateAsBoolean("UseSplitAfter"); + setControlEnabled("UseSplitAfter",!isLocked("split_after")); + setControlEnabled("SplitAfterLabel",!isLocked("split_after") && bUseSplitAfter); + setControlEnabled("SplitAfter",!isLocked("split_after") && bUseSplitAfter); + + // Table of contents + setControlEnabled("ExternalTocDepthLabel", !isLocked("external_toc_depth")); + setControlEnabled("ExternalTocDepth", !isLocked("external_toc_depth")); + setControlEnabled("IncludeToc", !isLocked("include_toc")); + } + + private void relativeFontSizeChange() { + if (!isLocked("font_scaling")) { + boolean bState = getCheckBoxStateAsBoolean("RelativeFontSize"); + setControlEnabled("FontScalingLabel", bState); + setControlEnabled("FontScaling", bState); + setControlEnabled("FontScalingPercentLabel", bState); + } + } + + private void useDefaultFontChange() { + if (!isLocked("default_font_name")) { + boolean bState = getCheckBoxStateAsBoolean("UseDefaultFont"); + setControlEnabled("DefaultFontNameLabel", bState); + setControlEnabled("DefaultFontName", bState); + } + } + + private void splitChange() { + if (!isLocked("split_level")) { + boolean bState = getCheckBoxStateAsBoolean("Split"); + setControlEnabled("SplitLevelLabel",bState); + setControlEnabled("SplitLevel",bState); + } + } + + private void usePageBreakSplitChange() { + if (!isLocked("page_break_split")) { + boolean bState = getCheckBoxStateAsBoolean("UsePageBreakSplit"); + setControlEnabled("PageBreakSplitLabel",bState); + setControlEnabled("PageBreakSplit",bState); + } + } + + private void useSplitAfterChange() { + if (!isLocked("split_after")) { + boolean bState = getCheckBoxStateAsBoolean("UseSplitAfter"); + setControlEnabled("SplitAfterLabel",bState); + setControlEnabled("SplitAfter",bState); + } + } + + + +} diff --git a/source/java/org/openoffice/da/comp/writer2xhtml/W2XRegistration.java b/source/java/org/openoffice/da/comp/writer2xhtml/W2XRegistration.java index 2e639ab..447e33a 100644 --- a/source/java/org/openoffice/da/comp/writer2xhtml/W2XRegistration.java +++ b/source/java/org/openoffice/da/comp/writer2xhtml/W2XRegistration.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2010-03-22) + * Version 1.2 (2010-12-28) * */ @@ -90,6 +90,12 @@ public class W2XRegistration { multiFactory, regKey); } + else if (implName.equals(EpubOptionsDialog.__implementationName)) { + xSingleServiceFactory = FactoryHelper.getServiceFactory(EpubOptionsDialog.class, + EpubOptionsDialog.__serviceName, + multiFactory, + regKey); + } else if (implName.equals(ConfigurationDialog.__implementationName)) { xSingleServiceFactory = FactoryHelper.getServiceFactory(ConfigurationDialog.class, ConfigurationDialog.__serviceName, @@ -120,7 +126,9 @@ public class W2XRegistration { XhtmlOptionsDialogXsl.__serviceName, regKey) & FactoryHelper.writeRegistryServiceInfo(XhtmlOptionsDialogCalc.__implementationName, XhtmlOptionsDialogCalc.__serviceName, regKey) & - FactoryHelper.writeRegistryServiceInfo(ConfigurationDialog.__implementationName, + FactoryHelper.writeRegistryServiceInfo(EpubOptionsDialog.__implementationName, + EpubOptionsDialog.__serviceName, regKey) & + FactoryHelper.writeRegistryServiceInfo(ConfigurationDialog.__implementationName, ConfigurationDialog.__serviceName, regKey); } } diff --git a/source/java/writer2latex/api/Converter.java b/source/java/writer2latex/api/Converter.java index 2457f9e..92f6c4a 100644 --- a/source/java/writer2latex/api/Converter.java +++ b/source/java/writer2latex/api/Converter.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2010-04-12) + * Version 1.2 (2010-12-21) * */ @@ -90,6 +90,29 @@ public interface Converter { */ public void readStyleSheet(File file) throws IOException; + /** Read a resource to include with the converted document. + * A resource can be any (binary) file and will be placed in the same directory as + * the style sheet + * + * @param is an InputStream from which to read the resource + * @param sFileName the file name to use for the resource + * @param sMediaType the media type of the resource + * @throws IOException if some exception occurs while reading the resource + */ + public void readResource(InputStream is, String sFileName, String sMediaType) throws IOException; + + /** Read a style sheet to include with the converted document. + * A resource can be any (binary) file and will be placed in the same directory as + * the style sheet + * + * @param file a file from which to read the style sheet + * @param sFileName the file name to use for the resource + * @param sMediaType the media type of the resource + * @throws IOException if the file does not exist or some exception occurs + * while reading the resource + */ + public void readResource(File file, String sFileName, String sMediaType) throws IOException; + /** Convert a document * * @param is an InputStream from which to read the source document. diff --git a/source/java/writer2latex/base/ConverterBase.java b/source/java/writer2latex/base/ConverterBase.java index 08cac27..e1624b1 100644 --- a/source/java/writer2latex/base/ConverterBase.java +++ b/source/java/writer2latex/base/ConverterBase.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2010-04-12) + * Version 1.2 (2010-12-21) * */ @@ -81,6 +81,12 @@ public abstract class ConverterBase implements Converter { // Provide a do noting fallback method public void readStyleSheet(File file) throws IOException { } + // Provide a do noting fallback method + public void readResource(InputStream is, String sFileName, String sMediaType) throws IOException { } + + // Provide a do noting fallback method + public void readResource(File file, String sFileName, String sMediaType) throws IOException { } + public ConverterResult convert(File source, String sTargetFileName) throws FileNotFoundException,IOException { return convert(new FileInputStream(source), sTargetFileName); } diff --git a/source/java/writer2latex/epub/EPUBWriter.java b/source/java/writer2latex/epub/EPUBWriter.java index 0f70b65..b3a8118 100644 --- a/source/java/writer2latex/epub/EPUBWriter.java +++ b/source/java/writer2latex/epub/EPUBWriter.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * version 1.2 (2010-12-15) + * version 1.2 (2010-12-20) * */ @@ -30,7 +30,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; -import java.util.UUID; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -70,10 +69,7 @@ public class EPUBWriter implements OutputFile { return true; } - public void write(OutputStream os) throws IOException { - // Create a universal unique ID - String sUUID = UUID.randomUUID().toString(); - + public void write(OutputStream os) throws IOException { ZipOutputStream zos = new ZipOutputStream(os); // Write uncompressed MIME type as first entry @@ -93,14 +89,14 @@ public class EPUBWriter implements OutputFile { zos.closeEntry(); // Then manifest - OutputFile manifest = new OPFWriter(xhtmlResult, sUUID, config.xhtmlUseDublinCore()); + OPFWriter manifest = new OPFWriter(xhtmlResult, config.xhtmlUseDublinCore()); ZipEntry manifestEntry = new ZipEntry("OEBPS/book.opf"); zos.putNextEntry(manifestEntry); writeZipEntry(manifest,zos); zos.closeEntry(); // And content table - OutputFile ncx = new NCXWriter(xhtmlResult, sUUID); + OutputFile ncx = new NCXWriter(xhtmlResult, manifest.getUid()); ZipEntry ncxEntry = new ZipEntry("OEBPS/book.ncx"); zos.putNextEntry(ncxEntry); writeZipEntry(ncx,zos); diff --git a/source/java/writer2latex/epub/OPFWriter.java b/source/java/writer2latex/epub/OPFWriter.java index 8e28b5f..928c55e 100644 --- a/source/java/writer2latex/epub/OPFWriter.java +++ b/source/java/writer2latex/epub/OPFWriter.java @@ -20,14 +20,16 @@ * * All Rights Reserved. * - * version 1.2 (2010-12-16) + * version 1.2 (2010-12-20) * */ package writer2latex.epub; +import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.UUID; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -47,8 +49,9 @@ import writer2latex.xmerge.NewDOMDocument; /** This class writes an OPF-file for an EPUB document (see http://www.idpf.org/2007/opf/OPF_2.0_final_spec.html). */ public class OPFWriter extends NewDOMDocument { + private String sUID=null; - public OPFWriter(ConverterResult cr, String sUUID, boolean bUseDublinCore) { + public OPFWriter(ConverterResult cr, boolean bUseDublinCore) { super("book", "opf"); // create DOM @@ -76,123 +79,113 @@ public class OPFWriter extends NewDOMDocument { metadata.setAttribute("xmlns:opf", "http://www.idpf.org/2007/opf"); pack.appendChild(metadata); - Element title = contentDOM.createElement("dc:title"); - metadata.appendChild(title); - title.appendChild(contentDOM.createTextNode(cr.getMetaData().getTitle())); - - Element language = contentDOM.createElement("dc:language"); - metadata.appendChild(language); - language.appendChild(contentDOM.createTextNode(cr.getMetaData().getLanguage())); + appendElement(contentDOM, metadata, "dc:title", cr.getMetaData().getTitle()); + appendElement(contentDOM, metadata, "dc:language", cr.getMetaData().getLanguage()); // Additional meta data if (bUseDublinCore) { // Subject and keywords in ODF both map to Dublin core subjects if (cr.getMetaData().getSubject().length()>0) { - Element subject = contentDOM.createElement("dc:subject"); - metadata.appendChild(subject); - subject.appendChild(contentDOM.createTextNode(cr.getMetaData().getSubject())); + appendElement(contentDOM, metadata, "dc:subject", cr.getMetaData().getSubject()); } if (cr.getMetaData().getKeywords().length()>0) { String[] sKeywords = cr.getMetaData().getKeywords().split(","); for (String sKeyword : sKeywords) { - Element subject = contentDOM.createElement("dc:subject"); - metadata.appendChild(subject); - subject.appendChild(contentDOM.createTextNode(sKeyword.trim())); + appendElement(contentDOM, metadata, "dc:subject", sKeyword.trim()); } } if (cr.getMetaData().getDescription().length()>0) { - Element description = contentDOM.createElement("dc:description"); - metadata.appendChild(description); - description.appendChild(contentDOM.createTextNode(cr.getMetaData().getDescription())); + appendElement(contentDOM, metadata, "dc:description", cr.getMetaData().getDescription()); } } // User defined meta data // The identifier, creator, contributor and date has an optional attribute and there may be multiple instances of - // the first three. The key can be in any of the forms name, name.attribute, name.attribute.id, name..id + // the first three. The key must be in the form name[id][.attribute] // where the id is some unique id amongst the instances with the same name - // Thus you can have e.g. creator.aut.1="John Doe" and creator.aut.2="Jane Doe" + // Furthermore the instances will be sorted on the id + // Thus you can have e.g. creator1.aut="John Doe" and creator2.aut="Jane Doe", and "John Doe" will be the first author boolean bHasIdentifier = false; boolean bHasCreator = false; boolean bHasDate = false; - Map userDefined = cr.getMetaData().getUserDefinedMetaData(); - for (String sKey : userDefined.keySet()) { + // First rearrange the user-defined meta data + Map userDefinedMetaData = cr.getMetaData().getUserDefinedMetaData(); + Map dc = new HashMap(); + for (String sKey : userDefinedMetaData.keySet()) { if (sKey.length()>0) { - String[] sKeyElements = sKey.toLowerCase().split("\\."); - String sValue = userDefined.get(sKey); - if ("identifier".equals(sKeyElements[0])) { - Element identifier = contentDOM.createElement("dc:identifier"); - identifier.setAttribute("id", "BookId"); - if (sKeyElements.length>1 && sKeyElements[1].length()>0) { - identifier.setAttribute("opf:scheme", sKeyElements[1]); - } - metadata.appendChild(identifier); - identifier.appendChild(contentDOM.createTextNode(sValue)); - bHasIdentifier = true; + String[] sValue = new String[2]; + sValue[0] = userDefinedMetaData.get(sKey); + String sNewKey; + int nDot = sKey.indexOf("."); + if (nDot>0) { + sNewKey = sKey.substring(0, nDot).toLowerCase(); + sValue[1] = sKey.substring(nDot+1); } - else if ("creator".equals(sKeyElements[0])) { - Element creator = contentDOM.createElement("dc:creator"); - if (sKeyElements.length>1 && sKeyElements[1].length()>0) { - creator.setAttribute("opf:role", sKeyElements[1]); - } - metadata.appendChild(creator); - creator.appendChild(contentDOM.createTextNode(sValue)); - bHasCreator = true; + else { + sNewKey = sKey.toLowerCase(); + sValue[1] = null; } - else if ("contributor".equals(sKeyElements[0])) { - Element contributor = contentDOM.createElement("dc:contributor"); - if (sKeyElements.length>1 && sKeyElements[1].length()>0) { - contributor.setAttribute("opf:role", sKeyElements[1]); - } - metadata.appendChild(contributor); - contributor.appendChild(contentDOM.createTextNode(sValue)); + dc.put(sNewKey, sValue); + } + } + // Then export it + String[] sKeys = Misc.sortStringSet(dc.keySet()); + for (String sKey : sKeys) { + String sValue = dc.get(sKey)[0]; + String sAttributeValue = dc.get(sKey)[1]; + if (sKey.startsWith("identifier")) { + Element identifier = appendElement(contentDOM, metadata, "dc:identifier", sValue); + if (!bHasIdentifier) { // The first identifier is the unique ID + identifier.setAttribute("id", "BookId"); + sUID = sValue; } - else if ("date".equals(sKeyElements[0])) { - Element date = contentDOM.createElement("dc:date"); - if (sKeyElements.length>1 && sKeyElements[1].length()>0) { - date.setAttribute("opf:event", sKeyElements[1]); - } - metadata.appendChild(date); - date.appendChild(contentDOM.createTextNode(sValue)); - bHasDate = true; + if (sAttributeValue!=null) { + identifier.setAttribute("opf:scheme", sAttributeValue); } - else if (sKeyElements.length==1) { - // Remaining meta data elements must be unique - if ("publisher".equals(sKeyElements[0])) { - Element publisher = contentDOM.createElement("dc:publisher"); - metadata.appendChild(publisher); - publisher.appendChild(contentDOM.createTextNode(sValue)); - } - else if ("type".equals(sKeyElements[0])) { - Element type = contentDOM.createElement("dc:type"); - metadata.appendChild(type); - type.appendChild(contentDOM.createTextNode(sValue)); - } - else if ("format".equals(sKeyElements[0])) { - Element format = contentDOM.createElement("dc:format"); - metadata.appendChild(format); - format.appendChild(contentDOM.createTextNode(sValue)); - } - else if ("source".equals(sKeyElements[0])) { - Element source = contentDOM.createElement("dc:source"); - metadata.appendChild(source); - source.appendChild(contentDOM.createTextNode(sValue)); - } - else if ("relation".equals(sKeyElements[0])) { - Element relation = contentDOM.createElement("dc:relation"); - metadata.appendChild(relation); - relation.appendChild(contentDOM.createTextNode(sValue)); - } - else if ("coverage".equals(sKeyElements[0])) { - Element coverage = contentDOM.createElement("dc:coverage"); - metadata.appendChild(coverage); - coverage.appendChild(contentDOM.createTextNode(sValue)); - } - else if ("rights".equals(sKeyElements[0])) { - Element rights = contentDOM.createElement("dc:rights"); - metadata.appendChild(rights); - rights.appendChild(contentDOM.createTextNode(sValue)); - } + bHasIdentifier = true; + } + else if (sKey.startsWith("creator")) { + Element creator = appendElement(contentDOM, metadata, "dc:creator", sValue); + if (sAttributeValue!=null) { + creator.setAttribute("opf:role", sAttributeValue); + } + bHasCreator = true; + } + else if (sKey.startsWith("contributor")) { + Element contributor = appendElement(contentDOM, metadata, "dc:contributor", sValue); + if (sAttributeValue!=null) { + contributor.setAttribute("opf:role", sAttributeValue); + } + } + else if (sKey.startsWith("date")) { + Element date = appendElement(contentDOM, metadata, "dc:date", sValue); + if (sAttributeValue!=null) { + date.setAttribute("opf:event", sAttributeValue); + } + bHasDate = true; + } + // Remaining properties must be unique and has not attributes, hence + else if (sAttributeValue==null) { + if ("publisher".equals(sKey)) { + appendElement(contentDOM, metadata, "dc:publisher", sValue); + } + else if ("type".equals(sKey)) { + appendElement(contentDOM, metadata, "dc:type", sValue); + } + else if ("format".equals(sKey)) { + appendElement(contentDOM, metadata, "dc:format", sValue); + } + else if ("source".equals(sKey)) { + appendElement(contentDOM, metadata, "dc:source", sValue); + } + else if ("relation".equals(sKey)) { + appendElement(contentDOM, metadata, "dc:relation", sValue); + } + else if ("coverage".equals(sKey)) { + appendElement(contentDOM, metadata, "dc:coverage", sValue); + } + else if ("rights".equals(sKey)) { + appendElement(contentDOM, metadata, "dc:rights", sValue); } } } @@ -200,21 +193,18 @@ public class OPFWriter extends NewDOMDocument { // Fall back values for creator and date if (bUseDublinCore) { if (!bHasIdentifier) { - Element identifier = contentDOM.createElement("dc:identifier"); + // Create a universal unique ID + sUID = UUID.randomUUID().toString(); + Element identifier = appendElement(contentDOM, metadata, "dc:identifier", sUID); identifier.setAttribute("id", "BookId"); identifier.setAttribute("opf:scheme", "UUID"); - metadata.appendChild(identifier); - identifier.appendChild(contentDOM.createTextNode(sUUID)); } if (!bHasCreator && cr.getMetaData().getCreator().length()>0) { - Element creator = contentDOM.createElement("dc:creator"); - metadata.appendChild(creator); - creator.appendChild(contentDOM.createTextNode(cr.getMetaData().getCreator())); + appendElement(contentDOM, metadata, "dc:creator", cr.getMetaData().getCreator()); } if (!bHasDate && cr.getMetaData().getDate().length()>0) { - Element date = contentDOM.createElement("dc:date"); - metadata.appendChild(date); - date.appendChild(contentDOM.createTextNode(cr.getMetaData().getDate())); + // TODO: Support meta:creation-date? + appendElement(contentDOM, metadata, "dc:date", cr.getMetaData().getDate()); } } @@ -269,6 +259,22 @@ public class OPFWriter extends NewDOMDocument { setContentDOM(contentDOM); } + /** Get the unique ID associated with this EPUB document (either collected from the user-defined + * meta data or a generated UUID) + * + * @return the ID + */ + public String getUid() { + return sUID; + } + + private Element appendElement(Document contentDOM, Element node, String sTagName, String sContent) { + Element child = contentDOM.createElement(sTagName); + node.appendChild(child); + child.appendChild(contentDOM.createTextNode(sContent)); + return child; + } + private void addGuideReference(Document contentDOM, Element guide, String sType, ContentEntry entry) { if (entry!=null) { Element reference = contentDOM.createElement("reference"); diff --git a/source/java/writer2latex/util/Misc.java b/source/java/writer2latex/util/Misc.java index 2941721..a4c5654 100644 --- a/source/java/writer2latex/util/Misc.java +++ b/source/java/writer2latex/util/Misc.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2010-12-08) + * Version 1.2 (2010-12-19) * */ @@ -34,12 +34,14 @@ import java.io.UnsupportedEncodingException; import java.lang.Math; import java.net.URLEncoder; import java.net.URLDecoder; +import java.text.Collator; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.Locale; +import java.util.Set; //import java.util.Hashtable; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -357,6 +359,15 @@ public class Misc{ return buf.toString(); } + // Utility method to return a sorted string array based on a set + public static String[] sortStringSet(Set theSet) { + String[] theArray = theSet.toArray(new String[theSet.size()]); + Collator collator = Collator.getInstance(); + Arrays.sort(theArray, collator); + return theArray; + } + + /* Utility method that url encodes a string */ public static String urlEncode(String s) { try { diff --git a/source/java/writer2latex/xhtml/Converter.java b/source/java/writer2latex/xhtml/Converter.java index ee030a0..ad0fcf4 100644 --- a/source/java/writer2latex/xhtml/Converter.java +++ b/source/java/writer2latex/xhtml/Converter.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2010-11-22) + * Version 1.2 (2010-12-21) * */ @@ -28,8 +28,10 @@ package writer2latex.xhtml; import java.io.File; import java.io.FileInputStream; +import java.util.HashSet; import java.util.ListIterator; import java.util.LinkedList; +import java.util.Set; import java.util.Vector; import java.util.Hashtable; import java.util.Iterator; @@ -82,8 +84,9 @@ public class Converter extends ConverterBase { // The template private XhtmlDocument template = null; - // The included style sheet + // The included style sheet and associated resources private CssDocument styleSheet = null; + private Set resources = new HashSet(); // The xhtml output file(s) protected int nType = XhtmlDocument.XHTML10; // the doctype @@ -109,7 +112,7 @@ public class Converter extends ConverterBase { this.nType = nType; } - // override methods to read templates and style sheets + // override methods to read templates, style sheets and resources @Override public void readTemplate(InputStream is) throws IOException { template = new XhtmlDocument("Template",nType); template.read(is); @@ -129,6 +132,16 @@ public class Converter extends ConverterBase { @Override public void readStyleSheet(File file) throws IOException { readStyleSheet(new FileInputStream(file)); } + + @Override public void readResource(InputStream is, String sFileName, String sMediaType) throws IOException { + ResourceDocument doc = new ResourceDocument(sFileName, sMediaType); + doc.read(is); + resources.add(doc); + } + + @Override public void readResource(File file, String sFileName, String sMediaType) throws IOException { + readResource(new FileInputStream(file), sFileName, sMediaType); + } protected StyleConverter getStyleCv() { return styleCv; } @@ -252,7 +265,11 @@ public class Converter extends ConverterBase { // Add included style sheet, if any - and we are creating OPS content if (bOPS && styleSheet!=null) { + // TODO: Move to subfolder converterResult.addDocument(styleSheet); + for (ResourceDocument doc : resources) { + converterResult.addDocument(doc); + } } // Export styles (temp.) diff --git a/source/java/writer2latex/xhtml/ResourceDocument.java b/source/java/writer2latex/xhtml/ResourceDocument.java new file mode 100644 index 0000000..251fd29 --- /dev/null +++ b/source/java/writer2latex/xhtml/ResourceDocument.java @@ -0,0 +1,79 @@ +/************************************************************************ + * + * ResourceDocument.java + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * Copyright: 2002-2010 by Henrik Just + * + * All Rights Reserved. + * + * Version 1.2 (2010-12-21) + * + */ + +package writer2latex.xhtml; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import writer2latex.api.OutputFile; +import writer2latex.util.Misc; + +/** + * An implementation of OutputFile for resource documents. + * (A resource document is an arbitrary binary file to include in the converter result) + */ +public class ResourceDocument implements OutputFile { + + // Content + private String sFileName; + private String sMediaType; + private byte[] content; + + /** + * Constructor (creates an empty document) + * @param sFileName Document name. + * @param sMediaType the media type + */ + public ResourceDocument(String sFileName, String sMediaType) { + this.sFileName = sFileName; + this.sMediaType = sMediaType; + content = new byte[0]; + } + + public String getFileName() { + return sFileName; + } + + public String getMIMEType() { + return sMediaType; + } + + public boolean isMasterDocument() { + return false; + } + + public void write(OutputStream os) throws IOException { + os.write(content); + } + + public void read(InputStream is) throws IOException { + content = Misc.inputStreamToByteArray(is); + } + + +} \ No newline at end of file diff --git a/source/oxt/writer2xhtml/Options.xcs b/source/oxt/writer2xhtml/Options.xcs index 0736929..5124492 100644 --- a/source/oxt/writer2xhtml/Options.xcs +++ b/source/oxt/writer2xhtml/Options.xcs @@ -12,6 +12,11 @@ + + + + + @@ -44,6 +49,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/oxt/writer2xhtml/Options.xcu b/source/oxt/writer2xhtml/Options.xcu index ab5ed63..ef66302 100644 --- a/source/oxt/writer2xhtml/Options.xcu +++ b/source/oxt/writer2xhtml/Options.xcu @@ -54,6 +54,80 @@ + + + 0 + + + + + + true + + + 100 + + + 100 + + + false + + + false + + + 100 + + + true + + + + + + false + + + true + + + true + + + false + + + false + + + false + + + false + + + 1 + + + false + + + 0 + + + true + + + 150 + + + 0 + + + true + + 0 diff --git a/source/oxt/writer2xhtml/W2XDialogs2/EpubOptions.xdl b/source/oxt/writer2xhtml/W2XDialogs2/EpubOptions.xdl new file mode 100755 index 0000000..b967359 --- /dev/null +++ b/source/oxt/writer2xhtml/W2XDialogs2/EpubOptions.xdl @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/oxt/writer2xhtml/W2XDialogs2/dialog.xlb b/source/oxt/writer2xhtml/W2XDialogs2/dialog.xlb index b0d250e..7ca2e70 100644 --- a/source/oxt/writer2xhtml/W2XDialogs2/dialog.xlb +++ b/source/oxt/writer2xhtml/W2XDialogs2/dialog.xlb @@ -12,4 +12,5 @@ + \ No newline at end of file diff --git a/source/oxt/writer2xhtml/help/en/help.tree b/source/oxt/writer2xhtml/help/en/help.tree index 51ec2bd..bbb6cad 100644 --- a/source/oxt/writer2xhtml/help/en/help.tree +++ b/source/oxt/writer2xhtml/help/en/help.tree @@ -4,6 +4,7 @@ XHTML and EPUB Export (Writer) XHTML Export (Calc) + EPUB meta data (Writer) Introduction General diff --git a/source/oxt/writer2xhtml/help/en/org.openoffice.da.writer2xhtml.oxt/epub.xhp b/source/oxt/writer2xhtml/help/en/org.openoffice.da.writer2xhtml.oxt/epub.xhp new file mode 100644 index 0000000..0f1a298 --- /dev/null +++ b/source/oxt/writer2xhtml/help/en/org.openoffice.da.writer2xhtml.oxt/epub.xhp @@ -0,0 +1,99 @@ + + + + + EPUB meta data + org.openoffice.da.writer2xhtml.oxt/epub.xhp + + + + + EPUB meta data + + The EPUB standard specifies a number of meta data elements not supported by ODF. + Writer2xhtml supports these elements using user-defined meta data. To add user-defined meta data choose + File-Properties, User-defined properties. The following properties are supported: + + + Identifier: Each EPUB document must have a unique ID. + Normally Writer2xhtml generates a Universal Unique ID (UUID) for this purpose, but you may override this with + your own ID. + To do this add a new property, enter Identifier + (case is not important) as name and the ID as value. + An identifier may follow a specific identification scheme, e.g. ISBN. + To specify an identification scheme, append this to the name separated by a period, e.g. Identifier.ISBN. + + It is possible to have several identifiers, in this case append a number + to the name, e.g. Identifier1.ISBN and Identifier2. The first identifier is used as the unique ID. + + + + Creator: A primary creator or author of the publication. + + Enter Creator as name and the creator's name as value. + + A creator may have a special role, you can specify this with a three + letter code after the word creator, e.g. creator.aut for the author or creator.ill + for the illustrator. For the complete list of three letter codes see the + EPUB specification. + You can define several creators, in this case add a number to the word creator, + e.g. creator1.aut and creator2. The creators will be sorted according to the numbers. + Note that some readers may only present the first creator. + + + + Contributor: A party whose contribution to the publication is secondary + to those named in creator elements. Otherwise it is handled like Creator, and the same rules apply. + + + + Date: Date of publication. The date must be in the format YYYY-MM-DD + (year-month-date) or more generally in the format specified in + http://www.w3.org/TR/NOTE-datetime. + + A date may be associated with a special event such as creation, + publication or modification. To define this, add the event after the word date, e.g. date.publication. + + You can give several dates, in this case add a number to the word date, + e.g. date1.creation, date2.modification. + + + + You can only have one instance of the remaining properties, + hence they cannot be numbered. Also no additional data can be appended to the name. + + + + Publisher: The publisher of the document. + + + + Type: Terms describing general categories, functions, genres, or aggregation levels for content. + + + + Format: The media type or dimensions of the resource. + + + + Source: Information regarding a prior resource from which the publication was derived. + + + + Relation: An identifier of an auxiliary resource and its relationship to the publication. + + + + Coverage: The extent or scope of the publication’s content. + + + + Rights: A statement about rights, or a reference to one. + + + + + + + + diff --git a/source/oxt/writer2xhtml/help/en/org.openoffice.da.writer2xhtml.oxt/export.xhp b/source/oxt/writer2xhtml/help/en/org.openoffice.da.writer2xhtml.oxt/export.xhp index 5366530..dd582eb 100644 --- a/source/oxt/writer2xhtml/help/en/org.openoffice.da.writer2xhtml.oxt/export.xhp +++ b/source/oxt/writer2xhtml/help/en/org.openoffice.da.writer2xhtml.oxt/export.xhp @@ -114,6 +114,9 @@ are exported using the Dublin Core standard. + The EPUB format supports a number of additional meta data elements. + You can define these using user-defined properties. + AutoCorrect diff --git a/source/oxt/writer2xhtml/w2x_filters.xcu b/source/oxt/writer2xhtml/w2x_filters.xcu index e1ab97f..0fbda4a 100644 --- a/source/oxt/writer2xhtml/w2x_filters.xcu +++ b/source/oxt/writer2xhtml/w2x_filters.xcu @@ -91,7 +91,7 @@ 0 writer_epub_File com.sun.star.text.TextDocument - org.openoffice.da.comp.writer2xhtml.XhtmlOptionsDialog + org.openoffice.da.comp.writer2xhtml.EpubOptionsDialog org.openoffice.da.comp.writer2xhtml.W2XExportFilter unused com.sun.star.comp.Writer.XMLOasisImporter com.sun.star.comp.Writer.XMLOasisExporter staroffice/sxw application/epub+zip com.sun.star.comp.Writer.XmlFilterAdaptor