From 60980e40e47d7a60bdcf7f8a2f05377dbee26c46 Mon Sep 17 00:00:00 2001 From: hallgren Date: Thu, 17 Feb 2011 14:38:46 +0000 Subject: [PATCH] Adding the prototype GF editor for simple multilingual grammars --- src/editor/simple/P/w1s.jpg | Bin 0 -> 24313 bytes src/editor/simple/P/w2s.jpg | Bin 0 -> 26674 bytes src/editor/simple/P/w3s.jpg | Bin 0 -> 28192 bytes src/editor/simple/P/w4s.jpg | Bin 0 -> 25066 bytes src/editor/simple/TODO | 28 ++ src/editor/simple/about.html | 157 ++++++ src/editor/simple/editor.css | 72 +++ src/editor/simple/editor.js | 789 ++++++++++++++++++++++++++++++ src/editor/simple/gf_abs.js | 1 + src/editor/simple/gfse.manifest | 4 + src/editor/simple/index.html | 42 ++ src/editor/simple/localstorage.js | 21 + src/editor/simple/save.hs | 12 + src/editor/simple/slideshow.js | 86 ++++ src/editor/simple/upload.cgi | 77 +++ 15 files changed, 1289 insertions(+) create mode 100644 src/editor/simple/P/w1s.jpg create mode 100644 src/editor/simple/P/w2s.jpg create mode 100644 src/editor/simple/P/w3s.jpg create mode 100644 src/editor/simple/P/w4s.jpg create mode 100644 src/editor/simple/TODO create mode 100644 src/editor/simple/about.html create mode 100644 src/editor/simple/editor.css create mode 100644 src/editor/simple/editor.js create mode 100644 src/editor/simple/gf_abs.js create mode 100644 src/editor/simple/gfse.manifest create mode 100644 src/editor/simple/index.html create mode 100644 src/editor/simple/localstorage.js create mode 100644 src/editor/simple/save.hs create mode 100644 src/editor/simple/slideshow.js create mode 100644 src/editor/simple/upload.cgi diff --git a/src/editor/simple/P/w1s.jpg b/src/editor/simple/P/w1s.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9135958410e5afd30862a8b37527f1f7db6a677 GIT binary patch literal 24313 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 literal 0 HcmV?d00001 diff --git a/src/editor/simple/P/w2s.jpg b/src/editor/simple/P/w2s.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23683a2bb03ec8ddbca72164de4162e42630b27a GIT binary patch literal 26674 zcmex=$<%PwSRFvdYWaQ-KK!z}~va+(XvGZ|o z@X3h?ipY@+{vTiv|EDQ{cwTw*63@n1ILW+itY{G$w>`H|qMvW5}awt1(JSZA; z@q>zSQc)8pmzcPOq?D?fx`w8fiK&^ng{76Vi>sTvho@I?NN8AiL}XNQN@`kqMrKxV zNoiSmMP*fUOKV$uM`zch$y26In?7UatVN5LEM2yI#mZHiHgDOwZTpU$yAB;ba`f2o z6DLnyx_ss8wd*%--g@}x@sp>|p1*kc>f@)+U%r0({^RE_kiQrin8CgR5fG1|`Ad+2 ziIItgg_(sNL#U$&Q_~EE0RYZ6+Cn z23SqiY1X;kL*TwGRv*`ETui$ZmE0 zPl#OD+u3#g`e$yRyZ?2rJzrs*;iJ9Dhrj=0{INNC(U0^)yCS!2yv(@!!`IWExh1`o z!um3L59bImSe~#vs`9@6^@g{r+;3NvtzYuW@8$BWY2kg%IvZkiTHRM3v{=3MN&M#J z4W;~?k!M$CMTIx7mHKt=j-y(8wn@;Y2b(#2dYtPyC5~IJ*Zi^fqw>+PIHMn3muj5m zANpP=X*T~uf5u4}$5MeGI%n1`U3%i+<7IEYhz5m~30;l(b#C*zt#|n@eR_26b>!s* zJGX5!FFve#O8Y3oYi&)-5czvH)z?q&v-~*y$XWlmkEf%5oDTT#C__$S<2BaSy;~}T z_XyfdoOF7x+p|35uP?inR<67MYM=4-Kb~cYlm5Mbu>N+MK9`lrx{bS2IkX&A{wzt} zrd7ZG{Gaw*`}O*t?RIV4y>;K_u209FNw3bFU=!^0@RF-7*MDP86L za6ezhJ>y*;-gecP^hcF!*xVSp-02VFmK=62yO;zXp0v$h>$~Fxw(3ehd^`7g$9&K2 zS4$-GmS1uGB2|8C-KETA#^saDUAb2Dgs`6bx2J3Q@~^M|xh$`L{p(%rbl1xLhxQ9r z%=*vpKzDzKsq|{u@*{!~cLhx+@{8WtXwx<0cEgc30c9Wj3gc~REPt&1sP!z`x3VTa zd*$7jh*$cRi|@QL@K)LE&a%lxX^Y1+kAh^$lZtyQ5Bj?&t_}RAdTr&hs8?dQO3y9M zWPN+1I5%JA)FvO1)GkfS96mp*;F7iRURQG-?YZ>TTKjjVr{LLKs}p^W2N|bKD5$!A z{60^OqkX5HVU5Z)Q-1lgkLJd`x*Rg^-z`T8shr-N{|vjiR&h1=wf9d~X1H$u@b=0) zlm4bz-&Q`F|HCaeW%tzw*{7qkvomrc?0+4Vi|CE~&T1)f==nO&viEy8Ldd=Cn&+O<6uk zaisPsizMD`I?*EZGt_!>!-5{U?B;zxmOhU7D*ZOKrr0D-b=$}3-(2@Mw;2A+Pv6Z@ z8C^c9D*t@mPNk05e{1#!RMp2{Pks}neW*?#OV0XZ{L%MP=c^xgPq|QI`AG7u^2L8g z1tS+L9%|O-Sy&guZh74F?7ypWwjaaWY^w8F+qH1Ejg9i8ND!tU5n3+Q?zKG z>%NcY_U5nr<8}SZ?#ubr{LLn_Z&x3`{GjW7%|r)p52q*dXZ%?*Rr0_KE$g-UkET?$ ztzI_2Yu0YXA9ee5KieH=DAZc<_tb>_N(hVf*RKZU2K%&! zG<(es+|nPg!&${_tx@Naz^hY@C$aH)h<@r@`_cHwuip2KYroF#EUs`n9P%OjTkF>+ zg@ZTQ7XSqWPboZCu1**RAV%>N5l; zEtb3^YE^o!`r`Jlum3q-to+Y#!0yPReV%{k?^F8m`G}qMhrP!ZKhBOmu{BaJ>1xU8 zxqf$_q;b5N=ex>fljHU@KTr1S8^84T{#xI?{KxqR{wx*MN4M{j-Ev(wzxT?v3&)ky zEV@@pA3XS2QsP+gwf3cr*~Pb4tetEw#;?Nc?v^EoFiwk^KD zRyOx<$$thz^W6UoYyUHx__gkM_@(@_2R2^SS=YPe*}X#EL;I&{yp~S*v&Mc`<%)G% z|8iY=_UhW}=*tQ7&dG0ybydBjeNg<*mjb`gN|||<>pN@0nR}IwNOiyZZk4-s{V~g$ zpURxu6mD;{)Zyc)_A@?yrifqk){o~w=5h)@=BBc(&s}?S`QZ~!x`PEAQg@%9{`=T0 zQ`W|Fg>&~cO|E@BuqH=UX% zwJY;pcv2i?`f=avN3qGyQ=eZ--@bLn#vkUH<+%mZCRV;w_*77HX!oiA44XXTeyqLE zRdM}MT=yei zV_+9u{^9v!w~cGpACk5BvFF~a?bFL&Kk_bdG1{eV*kaZC_^C|pvCJFp*F=LoubP~V zyZpAwZ*lsH=seBmQD-(Sdw3-;$jyCeP5+1OkIr{(&F`Kk@LRrXtMpmv*gZR&UY!oO zqPtF&Yr$JxmcZ4~MMgW*bo+LktM&h;@tmGAc{$M*}onrGbZf7QnHTgD}AZ-4X50Irm>n0M!Go-}1|{qUcmYfou0 z`%!s`tbO)Zl`q=puFjekkXg2?gzvYL(UC*W&7Z{F7@pM3d9Kzs{ok(o8MiiX|N1wh z*3z{m_kn!ZJo8EKkC}a}*!1e#IeX^V*I{*ai}P3bW*03i6Psi)LAmF%AiGSuX}nlC+Pv`JBGL;cnWk~dpFURB5K&ZA{h0mh&;JY)rmeew-T$-Q zzD4`oKAi8fQ~q(I#{81<$Ftx1)wVwT>r{Pvc6G(fr;|9N=eDbk6)4+hcl4PAt#OQF*tnf9;F) z{dQtCksrg>ek?vDpZqawapmId?b8inBeSGhw;ov-BD-`!muYsMTe!~Ajn^g5zUTU} z{L$9$2kw?X;{FrRrajSSR_WBOf7b{c=AJ!c`Wa)v-rMCG_n3MQOfsAms}IU*M!RnR z`nSby>!Ll{-@HH0Tl{E-jd$wGSG&&s`IWNm#j|hUZhccp3%~m`=D?~=%-byv-af{8 za((HttDSxiT}6TS9=c~w67PDNL(w9lpuZI!Xgty9D&h3XuAocxE&Vog4G#lo7v zblvCef9k7OL?2b3sxr|zyETWoFX4;Q?iEkJuDbkfW0Z{PX0DKw$0}bw+4_nGIw`e= zN-*#+Xw7{#aml@V&efI6B4h44_N!$kgjakhGTSIA^Z96zRL2{K; z+vf7bm6^Xv@AsNotlKJH@mAUF+L2Qymd;3VY;0xu+_iLCc)qv9ntRPR?RR|PEV*kH znWsA4e@mrafV;Jcme1Y0c4`)+oNusgRj zA;2a6^O?f$^*3Mo?6_Ex-D_uS_t_QhG<9? zgN0}iue5t}V67Lg+9B=hDtk{wFPOUdx(=IfQ6zHsEVg?8m$z#9-yd84Gdwn_PrLSs z|80%^{5z%7X32GC8lBBt{PNqU#m1|T=5(DpV{k;kYT`lL7n7YYs%-GJ^Og6nwzypt zy>*ks)tyiD4EWXOS3UVmoSU!vE`BMTC75NLS!NV>h@tD@+6yNdO1N&E_@h;!^HyQ! zyl31IO7k8xn{-O>s#)bJPwuaJggZDg|1+dr`}F(p?|4XXXRg&%+u8OiJ0fKs?>(Qj z68ds(e3!4Jlpb}sWof~(O!o2(in#NAjwHyktEFZuF#)DvTz?#_gV%H97AEN^qy zywzPY%R4(lvGRV+S(!wi-d9IT?VhcEC1uvX;*NXaicB-{V%LA`Jl|ftY5l?D#5!-3 zAWo0{&#-WP$bW|YV)Or`^}o4w&++g2_RqifKbYHdD{iLERaE@E~pP^3I{>NFAl)w15 z+4c$bIf;M%z5k&)*Z<-CR#Sc1%zyg3H+|MC`D^p?LzGC*t&VQvV#&A#8;{$!mewb1 z{Ox0IpS=C^1AjeDo27T9{xg*N8L@9zr;o=6^S|ZhEBw2D_~+l_(QLho53bm^lx=dN z=<7*wPjxSN-F!WbS#6DXdZz9j^P*b^RgW-qEX_Dr@yVcU-eToTJJt}$J&@?M`mv=~ zOJ%#qmeVTH>G}*2A{;ZmY9Bx4zhapzzl*tlNlC5!TYjxGpZ?A?-_kwD(&A*|8H*w<0< zw02jxGIBmgNjUEC(76A>Z^w&Yp65z-%O!{%|0`SB{jc)N?>)8mrg$!Sd1m#da~vri zynBLefmBB+aCM*cY;2|A6(D-Bm3yJe_FZm zM`k@+nJs)YQ*Zr>%13uB4o_utR}td0w7FiKzwpJj&z*0-)Y?h5v;`_fD{Uygx{0l* zHhVIjbhG^L+~^bW(4ys<Sc{dv`+3k?-nj z3uodj%(iafe_Lbwe*K-&vR{1dIjy>1a;-!&W(jS)wWwKIX3B%wOO?t?eP+eY=oMC* zo3U0T&L_ob!IJtrG6nnY5|OzeUQv%{o4ho7i!R&DRAGmn2~!$FjxD$3ZaiRV$$YJ2 z%UmtN9Hq-Ti^W=dH$;e3s_y%C&MxLV{sITNG?Pt{lIzYd&`Y@Z<;QX%Nte!?uG{Cs zPDq~ox{_`3(r)(4$7ZMLJW<)Zf5N_Kp`xN42iMu7#6jP$TbgMf)0VATtTH2)f%)H` zOUPBnt;}1sZL@Q~ta@Mmh+Fz~%FgSh{w8tJ?z&sgh#fHUG+OvnS&~Kg)b_yZT}L0zox5c2o^!1| zy;mQr*6TfAaM4xtOqrbL$J@^PKdQ}s6wB`uaqH7(x2=5&Z?}4WUT!n*u6FCkn)LEo(W&jXro3IXZb?}6jOR@*tp*`KtGO8`&fVL1+}^qVkmllFui}50?EKI0 zcnS({>g~T<-sWHa$Nz_a#@@N!HQw+3Gc;AIAMj^;{f~d!)rHq|-zqdcT=?5)q1&9d zVLYiRp<$NFyuHWgd|U6oE-SYF;j5@u-<3XxWqhgilQsJCpCL15MPH<9M04s==7cnb z?Z0_nMoa#ve|p>Eql#+Y!^*cEA9YQOpx`7e8%=n8%HDYejaazOU;cNKOdKtw&nFN z`Om4bb7OtVvma#Q^(z@mUZq?207tQ}C=qrCc=s&~3rRV=M$gC)Rxjemo z_dkw(i~cjrSneABk*_y(>G9OUbk$!c@|B(U{i_sNdCoDci2rHmKDi2g*N?9Iwy$_? zF7;Nd8CnF)N@r#^Qt6%2e5>z1KUIw;r&J7k%ZkE7Q0KZC(3ZDXIUzQLiF*5<43GBlg5b4F?BB&Bmw44fJV z=1K1Qb?rX`N)UzzEz#WV{p*iso8UQ{>zWtC?H`I<{9CI3M=It&!^cxg*Ju2by;x%X zH|^)v!0g0a)iX~`wWlR?ES=4K=E(!8sd2N*!hi37Fl~eG-}MKgwAHlVx4oO5cTY8f zb;`^9;^(g~AARa|a&N%9DMfDe@2AOzJn-&ktIv#$^tM}`|IK@5?z36BQ7N511@6{n zkInCLDt&%a+;}$LeDd#BP#`p}bq!*F__6PtH;u8e=XrvKyBtN-!TXSI{{-J0fC`akzG&2_GqKAUb5_*Uvi5P*=bPQcQ0Ub%tyPI= z(MvJkZ_GYoE~U29tiQOpd`0Hum)DufT3!bG#k2(_>q}@QTNgLfeL8mkVAFY_`>w09 zwuy&rI5+LWy{KcGd|IV~t_RF%wP`Tx+o7)BXSp%7RBu}RH^I&S87|Fu-4r2JvRHH3 zxB7{Gpp;JJzKizAsS2D&A45`Sj!d zw#8lE-YM?6VGL_deV)ef?n&?I`9A$oFSp+RDXX{tjco3JhQ)eX{%!xXKiqGtG-?Z~KpJ4Xv&iF21^&lnXi=^by>Md#uTl#lBxxIDz*>AP|(yv~vGg>lx z>)IcSw*S#t-){fK{zveC26nOk41Z#c>O1B6KXawx$Gi!AGmNXEo;tMT3r_NU(C|c4S;6q&!DalNb&O_V<;_QTc{Y7ZZ@b&_ zSnq{HVc+6RWt9&`##h2(?tghze{KJ%(%L}%Efv8T^&AQf$Cv&IyZE-|MsCoPv+E8Q zsZYB1R8M(Ar;4KA(}K`~9TRtm=6i4b5x@MERp=Xgu`Lo$HW_a{e0bGum+NVnsZ%e0 z+jn1M&yp5}#~BCNRernN7v3j#l;_j-9+R@@$~`k%$`x-}vONk}^`wc((58SJhwebWuPWtr5*8GE5={hX-OVo9Odq-qQZ#^+Z|WltgGLu zrYY=PF32%kCEuj!rs2Pr#~#iRd{c0;rgE`t8L!$&^((U~9#6CGwp5%X7B+K{ioAi? zty4!ESQ?gmGd-)5s<~ZVy!_ez6Y)W@=j}eGAK_=b8x^IyzITtQwd#{1i~i8Yt`+AZ z9`0biwkyBEd|Fj|n`!rL?iG4()2`>u(p)gX%Hq@~i30aayQY5ZZ;86PZu(Ix>F700 zW>c~RMfgHC1eGVNFcrSwT=rw}u{hBWJGaOwUVme9xx#Twm+8&@u2wpFEMZMSc_$1Zd4+*Of2*J@(5Vzi};PaJ;m zXMgFg$M5EQ-RjfZs`2UI&H7o}pYUnEtC)URzWJWQ<@K^#XLoB$XG@kWOi9}Ata~WZ z*QVw4#to4zt9V+TOz;dmuy(b4)1;gK8PeA7?_AWGTVqw?J>A!K`#t^1IvM9@c4-7_ z7Kl2RvYs$~T~=N;ed0`=cMEp7T6?=H6!0%|^^FxR_VIagyX+^YtMa5D*$=AynGdeI z9pTHlZQstek~Zl?F6T|xI5-%D_^S^XPqc{70MZ|HQ%%&;KR=NAo{Jb9enez5XAO@qG0!>OU<1$EW+B;m5A8 zT3Y+IyZ?;8xBtZHSKd3H?*Fi9pUi)T3;!7&`u~xM{?G8S^m&}(wjYUWUss)5Yk#z! zH|owSvqLP^*1tWX%p!v#mKMo>-{f|2-8Bn^^y~dgU#!hcGg$JT<@(wB3D@}UXZ%d8 zG5?UqEC1W>_@ln&yp379mAShkwx@KN^*%QHUEXuNGu7gRW$`%+Bk#q3^vd@3{}cPx zux+}*-9@+8Elgv{FV5NE@o;;}hXoD(vX+nK120DZXUO&beZK~j(F5O~skvB~{bAdq z&%x9DyZ*^V=Q??3s&45I*%l%BaGs{~E=jJ<6NMHgFy8VjDvZr5@m$_>v_O7=k$`P$b*Si6pL3?lr&YD9j{j->YO8yuG9ROU2)(*b zxyE+7*X}NTxr)dq6|$k>;SJMN{TQTwn!cVArY-4e{b~Q+`U(4%?4HN`@V)F0x%)Af z)4hrM>;^`~}Iuhkzq^`rPdgY$oeR{IZy`TrS?USAm) z6?#T9WV&(l@9RH>d6-&qvAHDe$MR$Ic}xE@@MP^0xi4s=&r{Vq=UTr~*0-kDb3q;jeT-7bj*4StKQp~Js>8U$0&U|Zg%;h(6 zrw2Lro(c_YuwGD*Uv-Juk#+LQ9nJ;CpXJ;| zzibt~u(?`0^6$t03{RY2)!(y=-FESx$kI8}KL3gM@b$1svC@fOQ`bHHoGD$e$UcEzG+Z)-9i9?ts~_HoJL zkoIJ&Jx8a=-cVr+a?d?{C46^au)n<5>|LOsle}{J%A?0;cRq~&u%U+aKZEoBw)zj* z?Ee`=qqJ8F46L-`eNwQ7Zb`+tVVr(XX% zZhil+?djNTQ65*RIUBQ1@2b9kQbzdn)h95-LhN0ydvou$2%Q4g*eIFhxes91+TL#n$sYW+@y7H z_kRZErPu#9uigJ8^=N*L;D3fm`VZ=Vi!{fHFy*-_G|1FfZP=foEie0O*Yoz0^=z`KV$Y5TMK0a6 zf6_UP^qc%QpG*sp72Phd{C#4(&2`)Q2lxB<*S{7wc-<@IyX;=HtBTd0Lz<}u8r!G1 zya`hmVpCbPK=S>yZOdMVEL*PQ6z=c-I=AHYe+Ks0bJr$aI-b4ikI0903m@K9cgx=E z$~LvUyfnMubiVPkmv^6rc_wAd^(vIs4>l;u@mvns=K{-|eBZbfSFh#6{+sHOCS{=7^Xr;oV;{ zZ^68*1+OCQ*Q#Fs_{VJj*EM_d?)dxL^KD6fplg3{e%3BuyHoG9HzYURYWi%naOn(oaKEH=IqtMzy0wMXgMP3I0iOgw*U=}$Lt z>52zWzs={`vfKN$_3hmHSkE_a&+g&#-Mu9vwUX~zhPUG1#|pRHgc*`0*E=p+nz`ZL z^2rs8AIe@my0)iEzf*tv?Ny5AX^a!4VssK7-C3<^&cB!I&jEey=G_Z^G=I44{c+2M zJFl$PtxPU3`B`#%`G$%Mu~DZ&mvkOp{Ls^(Xh-7f*t4QbwJtB#%gQ_B8}sas`Gd2@ zhi}#GOkH{>&SlooC)4eDF=a+XaT2?&e=~?wMPL(zN7PBAxYx?%c;_KWzNnwAf zm|*1taoUP98#@>>x+bukD>u-eliKff_rvqXEoUW7w}{`G`Y79V*2}c1$pMi|bOM}K zh|WG^nfO^o&(AG;)uKtcImYIPZ;8!b5Op$p=~0tHPxTpxqGzgEZ(xs{__x}w3Mb~$SxBRI8XR~hqo8rCy87|-1 z`tm`2bM(c!<@5XRP5%KdAS&Az6z+Qer*C@vH@TQwfDlA8HXvqDHWD_81yd>8lYLc_T! zZJ~X}JWi30Q&#w_NiUQ~L?uYHXs-OEt zPt{QM$S&Vo3KmY1o!w8IRGeftEHP*K95s*q%qx(LwRyknOvHUI3dlGN* znQJOA@$oY}DV$(rw6t}t#7-|=)&C4UGACYUEb2OtNJ@C)Qaf1UK`CFZg8lG4(~RiY zu7_vL%EL0B`UHP3=jv8}+!7;q^-RU?gZ8{S>QnzXZ1>Ao-+N_AqtB-4LQ%SF4^Qn8 z6YS_}s^E$!o}_(6d-_MS?n3jONXuZhr(EmgJ5RUzH_35d*LkaaRp0clYeM6L)_11n6I=9@e=^#NRA#st z6wi6CwmY7;BHr)Ax20?Dy}Wdf|84c+%0iaO(>v9apQQwUFE5$Fr$nE%;nb%`4 z=O=l8H0f5GwW;&Kj>@j{oebqn{<_f&TJNMia(J%(u+A@B?)mV`N3~|1ZQFjQIxc3b zSTgCTZp)c{b)nrZs_ZM3*GsQjmGt^bzs|E;Z-4wt3iSB4s`Fj$rFYh5vrKnPmGgL{ z``Kt^z!~-e?sfI|u&VvM9o{}x2LPm`MJh${*2E& zU#yN^wh4du*XyNjuBoWeiBlWaOx#mf_H^QuV-buB+B{1{Pbf+}?^?g8!tb`%N6~9r z<(9ATS3N&-mt@U)-SQ2|y&KyeOGqXkkNLXJ-1mpew^^;dpR<0IoX@P5y|KMkw|8YB z@0lX2LuuN=C%;WNe)`tzMZudVhpLKvDQCW_u|}VvBJcj8IDyMsxC^sVCWr*OGLVZ!AKJ~$)mzb;D{=GKf0*tS ze^vS8@5}m5x$UkZ;WMhx+bGfZS?Zs3|B(N8^sfDX2G7N7WRYhV?)^~y&!7^2;6KAR zy_f$Pe)-B)mDb-;{HK3$UY-2kck54ovikMezvrLO^&0Qh8Rk~1bJrf&*!TJ^XGw^w zl|}zw+5Ze3Dhnk!0}3ZjIILBxw?n>j`rGB%V$-FLK3kjoaOvfBH8;O}o9cCUdWY-Y zML*k5rEu||ig@sO)1KY8gD-47lX_`S-L9ECH*ej)aqI8oJKPcP-X5B29A&ha;f8|S z_U!)*OmTaX{SVv{@76WFTODxCr?a|tX>>IA;i658V_bD_>UEww@zEwVWW7X!TV)Qn zyiASf? z#}@p$d-P3RNMcGCo8UHP*3`}rnUvmBhb_*zi=KQrPw3;e8PkIf>D#6pox@va3r};JL47yWHz{;^hRZmJ4S~0wm=mq(qWm3C^5Z z*D^Wa!fBI0R|PJOMGa)*5A*r|GaR3K{cm6S{$JJ8_TJi~e)vDb$ET(L8ItF||2OaH zdVl6WQun&Q+We{evj0eb^r9~9Gq%jAgNPW_<~2S7ZELIj?*#rch`%^*&;Rdx_|u=V zwFUD<_qeXiP-Dy#?Y+8XR^H-5+qGvZg(Vd4t)BB?-(q&WyZpZNJpbucQSOG?HWR0}irHTJ zbNpRHd!gj-owkhYM4i@5H|oy5_@80oi&$kX`A$LiQoZTP4{t`l*=`u2chaSh)BCX4 z1+T^}l8+C@{8=!G{gkx#!F%@GKZ>{Kmrh&~dz(AjBcDYs$!3zP4pYi;MdyTxO@$M$ zUs@8U`@`efw(riNANBGFK_>6*!<v)UC*Df+<$lUQb*qV69sq7 za_cRgIytfIj)-{Tv;!70*Vr0A+DFV>_h`18_Lby*qu|?k4RH6^V+c4&c>PtNIsa^d;ynet9PMf{Nre=cgK$Tzd)_ zpD+fh%`OXbei82!DLT_@qokH!;ahK4Q3Y~KPMAK?K~aJ#{pkPj-0S0>5B`-aU+v1d zc=Jw#$2TE2o^P95g$_M(DQvr8DUo>Nx^nsldDop+zOFR=>-Fuq&#pZ?rycffa+q*? z$+ga`*uMLQOF7ms>V@#g?mTIC)V281@kg4@lY}?@oB#Ef>|3?U>&fZf3F)ug!>iB%PbwvJ5i<5IlqQi~Q2lHp!ddh?^y6Bo5wb$#@vlZ_Sy1FMU>e5zh z6$x};r4*xAPH!h^yIx0tZ+ z2jzb%{bT>nu(90#Kf|Sr*X*(X875wO{qNwl`@f7HZQsZ7pW&qV2m8O>yXyZHTq7CtG)i(9oK zHy)Jv#2ay8pXRIY`-R^AG1hBOn-#O`=(WD>PA_}@m6&Cg?pbzVx7WtFo#$|67Vw*%va`q0`wh9i@wD$jqIP&mQ# zi++ck?6uMrCe@aDcDJ>JF4{z7#IUK#q$~9HpELWw_GVM_(Zu^JuU?F}<=*)vH#}_T zr8Q|gt9R!f3$3@yQ^7|9sS9gnTx=-5 zxA$HT~$)6?CD>{#- zePvtoGR~-8IM(f+U>o;sjg-JjlOyX-TykS}Z*HFQc{clmz#_JXQ`l2+wcd#p$4n># z)!SNU{m8tl#`@vvUZdQ4-<`V*I^Vxt+GSF&a9Hkofn=lZrZ5H#l_w3x4b@Vg|1)$~ zskfBQ?iT&%->G(K&u;IneJT|Wlhj>>?cXaWnXQmFnz-HaymMUAoiE%%2R|Hp_;wB3 z;)Sa-k3<~K=Ubv|U_NV&(yes{$2>wFOX^B|S+!mKKLg($?d2yQ`5NU~J$zWq@!M?C zx=$xO)8c3O*fjVYN!MYXV38yBtG{`V+^rO=tM69Vny#Jt^)~17ZEXcMzgs^mX?@s! zO4YIb*u$ps2a}>RKjgb@*)~hV#`BTtw2G9b$kVq?`ei2GKK5W*OOwaemUqf!A)ik! z+jHRE>5Qt{f1H=s>Z{4EnB+P6=bVW@ud6?Pn|*lWtJRs0;<@g`-aOtNb|p`#`^`qx zBilX-?wldO?KAW7lKhwFmUrjuQJb}Idi^8LXMLYMleTS6EVoH~a?ecf#tlu?8Kts6 zAI&ef>wTPSRcm%QWLMAanCO_FADp*NT|C2ET5%%Ru4(NnSOhP8;tg55*zb+4Pp)U3 zNL;+X>9?&5ZO)d73ti!g=t$i?;>3m?WcHkvN53a38 zvg;a?^rDk$&UPF&%w2ux$u@Si9XIzVfB1LbvFX?2xc$-EyJsBTGhN`w0e_}*@!#_~ zB@@zh)-B@^_lCk17mbn>gd>=@8B|7>cp=u?Jz5ZtB7ekg8;|* zXx`az>>qpVbowmcmc)jgyA`cnePW$nvZKgqlfY98y*8d?@{zk4_U*iX=(_?a`x0_x-l^U6a(~nklIquzJUe06&HoteK(K@s6w_fgVg<8Vkt67%iu=^_(C6 zGyJKHt-tZS`ai?+o!OTU{AXa>zUZ&Nz5HJNkIL6xEb98q@9?-3d3sg5`a%DniS^9? z8E))e{-5EcNoh0c7$e;J=Y{GVa()t`0l@iG0qHLB(vfBYB3+dR{j zwTP*FWIa=9>X}Bf#x04{HBW6k$j&15diA+FogYsB8IImlys%cWDI&-2Y&GkA5W?N4{pIN_4d_V&!uCoErHXie*1RB`>EpuG6W z+C_2RYqR{*3#DT9=KW{Ln3~v{!Wi;1+F7~wk4!?7pTR?Q@e;GDw7H9&^A|^Fe(xzY z+x|3lx0<`|B*!~X`)WV=i$3fAaQsO3vWU!Y-+z@(G5ZjC?2zQ#DJMC0@Twi_XD^s( zWEb}L#^IG*hdkcaX-9kIzRffBc$+-yYqL$6@t&vaR1Kfba=p=J*0YRJ;T_KcR?)Q& zzewU~}bnz4Pq>jG6^2C*Cr!O5l4sS7b$6s7`@V)vS*$*X*>t zD=U{fT)*^cTiFELyNl}6A9(7BA1+auQ|VN)RZDjJ+uw)h<=JjOQX3u09{b_%mu-bv zVwZ0*d}FztQ#s93vVwby1=SL)6& zjM#K@hM4|_qdfP#j!CCa)G&H0;k2@G?y$<9mOxNtuuI5wzsu-@%t|AGd9Ibe>~iiw`+de+I2w^&l-<(Tw5`D{-(HPswahP zJhg96T6^NoQ6q<=+7(Ev2*Hr=Ip;q^d9uN<#^32{ClO5EyU8=U*SQn#j$zw*}KAzUN5?L zKjP$~*&Z&2$8$pe+`aVv;AcJy!>;lRWz=}RliyKVH> zWk_v``D1gbX4#JIJFB}p9&Ih_t5o0gA}!&7Nx%t?pztTbTQ;p&xB1X4_8U5>SO1+9 zo!;@)+roZJ%7o7Lc`N+SZqC}k_kQkf$CJl2*h;R1i%r`vX#Y^=vcRid0avcQ<-IMf z+|2iJ;=k>(=IOGI3<*86>;+2gMKkxQZxH)l9QoqA(amUA6Q~dSM`rGQVz4v|<@(M&7S|yk} z)!lMr5&ZO(wQ%ObAJxaKOrlseMP*s>&0ns&{aeel_X%8X+qQ2!5%IKV;<5A0xw$v) z9CbX-Aotj{IG#84BkTFr-1Rk{C7bWZXl)Y|4bWN<`?{4~NYv=Tr+sPnAFi85T(5G_ z^dKwWALTwT&@cL<*yF>$g{r&bkCts#@|&2>J;zm7~Xs>wx0J()#}^6g`%tW2s`QPDFij2<6BaxAeMOL zi6(pd>-{1*Z~v$+{jrH-`IgJGgR`T5=sk+xqSUb@X$ODD{i5~vl^Nz9tZHldW>s0b zwy-9~Wa)<&xh5Of1AaSy;7XZ0FYMl)+W!n6)l=yYC(=cPm4D^lrXz`r!G@j;>-1{3L+-*iPk!Uh^q;oIL-5^aHsdSvDxPn>WD}nMXs&qB^h1*!Rp0KZPWtT_ z*5l!*y*pXBr>|14NO zwQrwgy%i3piZ|^zacE?bxuCsfTNMCdq!;hpdmTjh^PtX)6p+DB{H#p3 zZI;cZK1cP8gCdM~17q3`|7Q^MeKglOU`O9Qk1fl#Zr*dbXXC1qD#4346mPxVyhU)r z8Y4&1>lYKa$Qd9SG}*dH&gRORwWYFp((gIUw%yNk+cGP)7uUkKwaw*^RF0=o>eS5a=jb65AV;{%K$T$Q=w+Rp~XSd#Vg}}SjqFn9#4H( zYxe50+tr2JvmeIrp45lT?o3%vuoP= zr%{KLJN6#h*`?Cdrf+I*Vk|T8tWZ!`NDB-e;w!VT-zp@Udh)MNt6iVDe`Kb zBlAJ?^t6BP4)p9ajc={;s?Uy!$e33mcIcnk=F1mOZ&<~9%ISI8-8t!s4(FM6amyB} z?wa>J_>$`7MNKZ-x9*->l=eA2V~W0Hz)__fxpOmLMtFZ%e0X;A-g~Q+yFGQ8_ne4K zF1h7kZSi6`bI-cM&t~uD$6qk<&Gz56>H1sUtr8DsX)2q0tnukMb*d^^WyJ{@!HGRG zA&t`?U;pq$PVQ=+{uW*1h{^7oW(S#-3#^omRONF_O_03ewdC=f2^FS&pK1)7{<+q& zAMRvo$=|}waWZq>QnMsRu@vA0F$?{8qYk|5e4N+owJ$L@FB|+35fL*eb4qRe!}7 z#Aq-uFz~cHUHv1T`Y6}#^r5P>{<)dv{-w(gZTz74`SHC_gPU%57!w>yEe@ycUiD~? z<%4{_7qgD8xV+W-{+0-q8Mn5cGJB+Zbkm8~+ii|??UZ0our2b>c6X?574`PInp0|` zb}3D7MZZdr+r`rYrFRxSPLSl3oxvQQ!LVq?rXvSLCrXHE862J_dE!@({E4f!+2I>6 z>9SsZeR9KD83tEjuV?NFt9FM7pH%+5fcs0BUhAV?<>;N$crD*O%}AXjDY@pUi@T#_ zs?I498Lu7B=g*eBbz|4Bxr?$Vyf|}-d*|9EyLu|qv)y{S?wc7-NbxhCm%;Q_)IaE| z$z3D!$pQPeZ*^(%Zp%#JVhLL~_|HFv#ZE}Q(G@pfIFeXYuc!y835 zx=o##tiygcOzVK~G1trhM%UtB-+Q*m3VnNZK49L{^er2$T29L@+4QzSM*P%DcDd$x z+O@F}4-C{99`ED#Vu;e}eYSS_&GRDR!82SInt7c#q!j1cD}LtK-81hN=oJ+oFs*9f z(vn=acHuk;wViF2%T=7Eckn7Qt7zEF;j37=f?-jY1_s9HI^JDn@E&dk$Z)xQl->DS^P)-sRQ*9`b*z>-qfQKg0Xd zy7-CLuSDf)Ut*OZ(Vc`?Jd9J-xoS5F9n0s1Flv(ESs!jDX&G;l9$gje>HpU**CXf$4rs`3^hh>r{@_hzqaS_1t~G0aV$>@_Liol28y zg38>ko&)6?7IulpE>Fr;Ykd5l;ccYS&MWH^FZ-=HP@nEAlVq)b|7Wzwq@ooUv>8^P zsboBxw|ZvZnzhi3#kMo&xdwfNFZ07Zsf7jeDkYd&IeOKAi zN49*PdZk;h_AdEVk$-m!+ufv;%zZf%IO-S`diTxPmGNV0^-|Z$rT-Z+MJKA=(pxu8 zQ@KEYG1nni`yM=*oRsIMV{#u0)M#I_30!vPrIp>n z$`xyuOE&bNPDOG{T~AA9dp zZ+v3wr$=&e5h72M!X6e`CcmGzby4`f{U2O69=iQUbHkN<)ho%@OuXM4{nMV=e?u-L zHE8`4k>8Fz3hY@mJ3|ue@;onmIDhE(TE5#pO}xpTiOKcZl{+$?dT$Bq&R4Uq{j{aA zT?)pS?BYEI*h?S0wN6_Qh17Cey<+@6qLDSL3$#Xk~Tyzzu<{00F9;0cl3R-iT zTZ7LlY`X6K@lgFC^XJ*OvbkN3t*|?(mToOkP;;+R`%0U@$zH+pB(fSA4r^=K9oY z@8o_$yz1Hm znG2K5-hBSke#;=VzNPl^O0&t2U!Sdd6zg^BS*_()4)yIFu}7j*gJ|@9Qd6Q@)E%^wV!P`(EWE$Xo2QbK4|qw_>q*FJ&(s%~fGA>?=5Cv~Jx3bDpju zchN#S{-0G>s@7Pon<{!Ju6w^>N%6Bu`qy5w{&_Qbi%H~{GTT$Lq}x{wXf+%z313IOk_w)G3Es>B?o5+&v7wo@*+sBA)Hqe`)!=XRjWIZQY-d zw|?oTL&q-Wg|cj57yM9QIHy2+%c7|V9{p4NA@O5Xgq-y4Xn|>$4k~23l@)wCsOGHG z;bzm5JfZkJGuyPCAMS4Tw&#uZTy?8?(aZk~Ntu0f_9e@HJNxYL)~N}F-|`G3c>nMj z)UtIkd_49;Hm{_5HuI_*-l}I?@Ah0bmnxa;sW3~`(eS<{Q$nC;Dwp*9DFv>-=Qn@* zUjDs2eEO`=3%hqVWlqYqau1ft7dBDk`OQ@KV%49WA-OyA%Bz-&lx&bu@3NCyxA_t0 zSBdABlD6&eW}S8KvDfGB?#OvQVxL7s6He_=c${GKMdpY+TmIEY#uc-DcL=_`koi01 zqGy;#>pUZyf0bKKoGW}buYk2$R798g#G~aOraqm2=x_94smcvI_w3xZr|CvV@0!3h z?-fH1=!FJ&u**(wu;PvQqn)wq?!Q&ncg_2KJL5scwSTE0H_qLRu|NI&#{r3h$Ae>8 zMHrt|Ek9JTuH>!MDcPXAlfAZVYmEAJcHOM-wrBSW&O`;2)i0iU!>V#^^NpwXY6ROJ zyUh3fcWr~d;g0lOv;8Jz#y;6TOLXG)bKz&$0-jFMdo1l>szN^`?Yk= zh1XU}5z$$0zu&B0WHfhQ)wzv}*BJrLnw#OJmUljA^sMG7YwG z&+SKlcAcqH`0%Hy;JV#$74z(xTUGZ&U5-@be<{ts$GB&Kt^d|4-{M`*R@P@f&gXkM z!I$Y){L+g%-1_y7nFQ^QwkfK7@K5wvsV#H!G~_O@hE+Scxqxq6@8dF(mX;&F6xPR_!V ziJRn~e){0}q_@9o*6Np4b9>HhJk29jd-m1h+eek%O@gCVooGGg%sR{Qplmj`+m9XF zZsk7R`gZBP)hljgi&qtJG^)%#RlO`oK;!YL?OHOtJr8;s)}8v!woP%{$N7C<)3-GJ zK0Li_qxrX-ql+%Sf2^(Snf;vI`f5Y4%G&Kbt;&kG+t~eXAGH@c`>vPwe)}5T$2)dp z|wQ2)zQ~l#l`i@g;gv>TG zoLd*`eB||`hbglpa>WbSzSq?7&QzDnd%ySio&O9{&ug;(GjQs+yps<4ue;;uLg$6vmeD#hd*-1$?gmlDx6%HOBa%K$UEZO3Nq@=b=h@}kwr9+IJTda> z&h$_%DI+63KX<=TzD_;-Q+as&f#LNJ-w0@C;d1X-U#tDRVJPnT{5{a zXzR3l3!fBBx3m4Y#qXl;a@Ul%t2{GvE>%>0^WSp#TlLJvQ$;LtCUY%TS1pM6aJqHt z$Mr{6cQ)OvD7)@;zf8e!uG+V^Z?6m0yg9keJh;Vr;)k8LDqpUD$h|f@;_{aLViirf zcEA0*u0Dy#{c>65WRYsBkQ+l9bGnRB)wi|T^|Cj-Qy=c0|K@E-eV);(_1|g_ek$fZ zdH&tc-!tA$C@&G6+VGgY`%m@iEHi=a?Rhy5CPj<8|2w%aQ24~epG`rs7VhP$9-3PV z&PWL8yFQZd_%-EL+}!$w(J!a{n&M`CGVIp#vkgy`rYIlZ8`xYqNqHZ$qMsv=%dLHD zAHCA^J+d{oG!Csl@;@9eX@_ug@+@0kDQ(_|^7lSLE%97$HWwQ0@-$J7Hkb9e6(`FQZ!AE%PcEs<;D zPt82iTQG?!Il5e#`_=S7`4xp1m`=#GClfn63sXm>S=#9zULU(Pzuiv0qWJLj{d|8y zRj*B78g=vBhqKEiZa(S^?3!H0DH+_;PcmOn<}%6J}h7_GoHi1R~$E2CrmaV zWYy8#*57Py1{^uIWmQntrET9|fc8tD-}#?mQQ>3$-@ljrXZVyFbfu=0ZNW>`>xbTp zZMnEI;(6qjC$ki)-b~DAR;$0Mv?9u`xlmg4W8FGc50+0(EAy3CJ>>u3bg)Cn%_FGp z*RQTN>+^ixIuo5A^TvfmD!6J*yPX=jr*~cZsl)oeTwLZnNnh?W?>ggu2D|(B{xh6e zoxJ<_N1daOdJW4f|1)s?Nv?~?J-4ttu`HyVD{XJ?f{zmn=kR-Ns7YQX@n`dg`gqO1 zm&K;`@7=xp*8aWcug^*`$OwKZ^y$47>B^?e?U`Cr_r`o9!TPP^xU* zmT|uN;gOli?Z>3{UNGo9GeLE;o5&U|yL@ey`F6%zQXYJH!eq6B^*@8&{d!Lb5h~b&A!W1pWJ=keBz5K`ybU?o)Z5VS}oT-p4_kQ`R-u< zpS|@J%wHu}P1{^iR?_&N;i2KxMdCcG`De>;#cVp}ek$=)|Gnei8-5?Y61qFOR_L|w zjw@^bWUlng%sZGeMR%W(gLeO&KewATW75kW_B;uETcG_fcK_c03^Sr-ejWd)ck_>n zSlH|Q^bh-whFw^xn%ueNNPy?b2eFSQd9I9pl=Eh3^uz7lH$4ur#hNtPe=ypdll#T` z^^G-aZL(LKE!2AF5|}^vpv8ZN;KK#?HJ?Atv#?k-`A5dFl*z|#E#Z=L$+yx_zLlI7 zre4C#T(p7Z?;{RLlj<1uKfmj%|1%hDv))rL9CiGW)QzaMYx@tq7rAv{=4}ym9~VhW z3#Rw7S@Az2Cnvi9(T*2Sw0r;FB(<+~NfLv^!-Pn#63-EE|$ z_jrzT>*HmG^O~0IX?NXvVgI%#AM4iToGc02cp&z!d7i^Ozek6YpB7Hsy17Tnb{*68 zZ~5;Nrdekn|EL@Pe3z_uV@n@f! zI8|ejt_G{t(JB33))_>0e9`f*S}*(~&ne``t6yfJI)|KdcHHWDdwz2B7Ug#bEp9nJ z35a%ZcoZ+0HE~PMsS`nWJCwpY_@@bfHeSpczvqYmn8mn-alNCw2!IC5c_IzBoIKPzTm}Zc3 z*3!bfJnlJ1=QbJC<;|2>eCt8|^V`4g|7_iO_wkSE(#NWbcU#veT)#Qvgs0(4m-)tj z)Bo)K&mdkO_vN*}bVTI2?PBve_BiJoJs8&fd(VVz53dxT)@;|l zywCXf3RHj3sz){2{g2M?`M=cV4E{6h-t_kPbO$GpT{$ zn4v!JlLrm$g$ffE2o*L5N%wPicP8Y^#p_IXZoPxB*YTCJAn?XISKZ@T!^dj6&x6~}|;70S=LsCB#D_1=kc zX10^7FnsMw6esb=nv9 z==k|=2Ijek*(c5xGpeZi_4>`VeMVQGPB<}f*$qV{-;YbWPSx}ny`5;6c;Jqao2%S) zW>`V2+xK4n$nF0Ot@DfjGq^lHCjb4r?|+6Tr|ci5-}%pQ(c)wK-@ljZe;REz<&G8i z-!tvp_hVK|gpW#0o%pyxXz5hP_&a~@8!tF;^0fYn6{`$?W@Zl&d#=cSO3uTs`{sLVHwT5 zcL$itH3UBGk)QwW_a*1jhu?+8KIU!aI;cL~__XY%CFv(W@B2Qr?Wg5W&*ODps$=+( z%d~}reY)w5;)VC`9&Xw4ao%#B&*@1l&6d)emK*$8XJ&t@;J$X@!4-M&hr{mG&waf5 z%Ws=yniktF68GDGIzGW>Wsy7c=>q>#1!x6nHd^}8z;wg`?|!~blG4YdjudvPbr>IJ znpQDqaceN&vx7WEj1ob`jX~2t+^7_+DP3W$oO@g9_Ri!<95GJi$(iTwJeIV8=9nAN zviIyexBh3~wtN1s^LUT_`**YdGn|}KkDjpX{|OrZXK)tV_@ANXcKyd$_78>ZzZhoA ze?PnZKZE3Alql-KbS!$>nE#)FW8!~?h20VV8TRGw|8Z9SL#O;NiLL#=pWXh?&~p(b zce!D>1}zQv|7U3N_|I_R=$iWbX7~T3_5X0`|H~6~{O{*n(7AZucJTlF_V4?@#GLYq zf6C}i=|{`D%l|VRQmKEDbj|+#?EHVm?thfr|F!8R|NFTObQ&INJPFQ6Eoox%+ZXNW z_wdYLleS^j>m!%$aaYcj^0-tRy3FC2S?amtF%LV~_m=HP@$2P9ALckcl2pG|YCWYZ zWQwc$B+;1?M$dB+J~-IOU5$@E>@?@07jLoN_xJa&oGUR5O_k4hoO1cnb9Yyf@F`U- z=G*==WNtUCymY8sTW8_~Ne_i4BaTR6tfPcUw1f8j3jM>=ubpSTJLfZd!khP%h7)I0MkM|Ip8j31c>crhmTi|0*okiY zbfhY$XW|l%i6<*fIuSk1T&a_eAw?F_To5iS3%&k*XEarn|EsuuAaqoy)m<_#e)$ z+;ihintGN-_@0>;ax-QKEIn~DLrLYa?)FJV#f$$laQtii&)`rk|NF!Khwgure~JHP zd{h7a(0_(j{s7IJKdcXL+sLtK(}ae3aVfi|xoLN_ai*z!WO4q-_^vqm@I8)8U*?Ma z_RQ|Sy}SD4wItOY35hpWY+RGW_k>G1Xorp9F$?DKe}aFx|22HG|NgN4Q2!72FZ#cj zZ~SMt-};|{i=o^1!@17oCiY%oz{-OMZ{V({F|1;Ey{{bD3gB(sg zH~#QGJQ5k=SX1*PWzM#xMaN1L9EF6{Qkd1HH*Z&$SUqcgn@Oy@&%bj!w@r!e?#y$a zTCC%@$s^{(!Hdnj_i`E<3fq*I`r->I>9%7LANX6E?y7(DOWrkAZI*GNrdw(4Pww5! zx^r(ZmqnO43#9D(;NG^r?vnbZ8EY@F3dV_?XrKV-kK z{({``e}D9U1fp8#AhP8@1A9f?;UKBrrCZOGCuuzVTzA*fE-L5Np8ft4i|o7SJXbd> zmFLZv)pS?)?(`XY%QBb!eZB6vLG7G*9LL}7i!*$Eeb!`radB?)fqP=p^z~}>&z}*# zz1h1^dAG{heZFU+Rl9|pg?E;lU1FBGcWIC1;>>Bmk+-7cl`8hE42z75eL2nAv&he` z?9a!Spwa~?>=z?j*I<14pqzx9=VV`Ve$FXtri%-md49IT<@d}R(^y5rS>~`x9Al07 z@VsqHK7XhErnO5tPIOC4>Zweb8g$exw%_UP&nxpk^uLJz!oKl8!+!36BFKRiz!rPG zp+>uCck1P3$7gM3*uHt)b%aGlXYK#cR1tq>Tm1&#?#zT)5@+B1i}K`Ba=UH*_C&;mbeXr$ zO_$>}KY04Vd$QAy7-xTq*qvo8V&wU4X4#}(Va=PnGZYSrTl|wRo@uh4D_mZ@DJcX3afganjLg*1ua= zqu;CZ**Q0Us=dc9!?mSG^5N#)f0=yOl#Bch*=?R<`0n;@>1~EFUzO#W#qsCc6E)(? z93Sl{{hj&lf#IIX(jhbV%v76v=B~D;irA5L##eawnnmRnKH%qzJCjneKKZkrROK}5 zm($PO+1%97c1qD)$S~vt#hf$$){5b z0?eL0EU-(HcycNJhw!28w-PSvne6{!AnRgy$5ZNU`MuMhHasr3cwuqOK-(KRoue0V zd$aRpx5S0GIqkmruTt_{WVc+zUYj|?`5&KR4(tiE_Na7aLVsxz2BO5R7QuU#GW#`{quN!$f8|} zodx~66SK;~Ha^+DOTK?y$;y(SYxVQOqRYc8O>6fXM^`4AwOLQ`SarMeZ%RkN5?BrswUY-#I-f`}^+R4cn`Cmz>oMZIssHu%0tT zdBw|5^D1nvwTdv#&QGrtU2{@<>E)9`>)*>XM6;Lq-JA3AXlS$lHI{=adqcN#tt#`l z-N8`R#~;_WU1I^y?$y>e`{wRHQP#5BU+vS{i9K%*yzqE#@wo4gZ)Se6+>tS##)kwH-LeU~A8Hc~OJG+mh8c(mJ~r za>`w*`F6+c&~77?~vH*MM1_2}SJ!>Mf-7tR(oJe^wLpv?YmUWLu?u(=`( Mfvz;gjQ?)}01|V;kN^Mx literal 0 HcmV?d00001 diff --git a/src/editor/simple/P/w3s.jpg b/src/editor/simple/P/w3s.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88e2f3451624d56e92c1ada963e4ed8ec0bc51c4 GIT binary patch literal 28192 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 Rh0-q~j9Fb83;6%v1OWZip}PP8 literal 0 HcmV?d00001 diff --git a/src/editor/simple/P/w4s.jpg b/src/editor/simple/P/w4s.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c904cdd90b2a8318755c81868fd60c55d9b8fca GIT binary patch literal 25066 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 M?M1{VUjP3l0Lz_riU0rr literal 0 HcmV?d00001 diff --git a/src/editor/simple/TODO b/src/editor/simple/TODO new file mode 100644 index 000000000..b9a684518 --- /dev/null +++ b/src/editor/simple/TODO @@ -0,0 +1,28 @@ ++ Safety question before deleting a grammar ++ Check identifier syntax ++ Allow lincat for deleted cat to be deleted ++ Allow lin for deleted fun to be deleted ++ Apply category alpha conversion in concrete syntax ++ Remove a concrete syntax ++ Apply function alpha conversion in concrete syntax ++ Change lhs of lins when function type is changed + +- Allow languages other than the ones in the given list to be added ++ Export as plain text +- Allow definitions to be reordered + ++ 1. possibility to compile the grammar set, returning a URL to a translator app +- 2. possibility to import modules - both resource libraries and user's own + auxiliaries +- 3. possibility to upload own modules ++ 4. access to the created files in an on-line shell (making testing possible) +- 5. rule-to-rule type checking and guidance (e.g. with library oper + suggestions) +- Try grammars in the Translation Quiz + ++ compile only the uploaded grammar even if other grammars are present ++ 'flags startcat' is needed for grammars with only one category (since the + default startcat is S, even if it doesn't exist) + +- Bug! After adding a 2nd def of a fun with a different type and then deleting + the old fun, the corresponding lin will have the wrong lhs. diff --git a/src/editor/simple/about.html b/src/editor/simple/about.html new file mode 100644 index 000000000..337c453b0 --- /dev/null +++ b/src/editor/simple/about.html @@ -0,0 +1,157 @@ + + + +About: GF online editor for simple multilingual grammars + + + + + + + + + + + + + +

GF online editor for simple multilingual grammars

+ +
+
+ [GF online editor screen shoot] + + + +
+
+

About

+ +Traditionally, GF +grammars are created in a text editor and tested in the +GF shell. Text editors know very little (if anything) about the syntax of +GF grammars, and thus provide little guidance for novice GF users. Also, the +grammar author has to download and install the GF software on his/her own +computer. + +

+In contrast, the +GF online editor for simple multilingual grammars +is available online, making it easier to get started. All that +is needed is a reasonably modern web browser. Even Android and iOS devices +can be used. +

+The editor +also guides the grammar author by showing a skeleton grammar file and +hinting how the parts should be filled in. When a new part is added to the +grammar, it is immediately checked for errors. + +

+Editing operations are accessed by clicking on editing symbols embedded +in the grammar display: ++=Add an item, +×=Delete an item, +%=Edit an item. +These are revealed when hovering over items. On touch devices, hovering is +in some cases simulated by tapping, but there is also a button at the bottom +of the display to "Enabile editing on touch devices" that reveals all editing +symbols. + +

+In spite of its name, the editor runs entierly in the web +browser, so once you have opened the web page, you can +continue editing grammars even while you are +offline. + +

Limitations

+ +

+At the moment, the editor supports only a small subset of the GF grammar +notation. +Proper error checking is done for abstract syntax, but not (yet) for concrete +syntax. The resource grammar library is not available. + +

+The grammars created with this editor always consists of one file for the +abstract syntax, and one file for each concrete syntax. + +

Abstract syntax

+ +The supported abstract syntax corresponds to context-free grammars +(no dependent types). The definition of an abstract syntax is limited to +
    +
  • a list of category names, + Cat1 ; ... ; Catn, +
  • a list of functions of the form + Fun : Cat1 -> ... -> + Catn, +
  • and a start category. +
+ +Available editing operations: +
    +
  • Categories can be added, removed and renamed. When renaming a category, + occurences of it in function types will be updated accordingly. +
  • Functions can be added, removed and edited. Concrete syntaxes are updated + to reflect changes. +
+ +Error checks: + +
    +
  • Syntactically incorrect function definitions are refused. +
  • Semantic problem such as duplicated definitions or references to + undefined categories, are highlighted. +
+ +

Concrete syntax

+ +At the moment, concrete syntax definitions are limited to +
    +
  • parameter types, + P = C1 | ... |Cn, +
  • linearization types for the categories in the abstract syntax, +
  • operation definitions, op = expr, +
  • and linearizations for the functions in the abstract syntax. +
+ +Available editing operations: +
    +
  • The LHSs of the linearization types and linearizations are determined by + the abstract syntax and do not need to be entered manually. + The RHSs can + be edited. +
  • Parameter types can be added, removed and edited. +
  • Operation definitons can be added, removed and edited. +
+ +Error checks: +
    +
  • The RHSs in the concrete syntax are not checked for errors. Arbitrary + strings can be entered. +
+ +

Future work

+ +This prototype gives an idea of how a web based GF grammar editor could work. +We do not expect to create a full implementation of GF that runs in the +web browser, but let the editor communicate with a server running GF. +

+By developing a GF server with an appropriate API, it should +be possible to extend the editor to support a larger fragment of GF, +to do proper error checking, and to allow grammars to be tested in the GF +shell or the minibar. +

+Grammars are currently stored locally in the browser, but a future version +could allow grammars to be stored "in the cloud", allowing the same grammars +to be accessed from multiple devices. + +


+
+ Last modified: Mon Jan 24 17:20:37 CET 2011 +
+
+TH + +
+ diff --git a/src/editor/simple/editor.css b/src/editor/simple/editor.css new file mode 100644 index 000000000..2c09897a0 --- /dev/null +++ b/src/editor/simple/editor.css @@ -0,0 +1,72 @@ +body { background: #eee; } +h1 { font-size: 175%; } +h1,h2,h3,h4,small { font-family: sans-serif; } +h1:first-child, h2:first-child { margin-top: 0; margin-bottom: 1ex; } + +#editor { max-width: 50em; } +div.grammar { border: 1px solid black; background: white; background: #9df; } +div.files { margin: 0 8px 8px 8px; } + +div#file { border: 2px solid #009; border-top-width: 0; } +pre.plain { border: 2px solid #009; } +div#file, pre.plain { background: white; padding: 0.6ex; } + +.slideshow .hidden { display: none; } + +img.right, div.right, div.modtime { float: right; } +.modtime { color: #999; white-space: nowrap; } + +div.namebar { background: #9df; } +div.namebar table { width: 100%; } +.namebar h3 { margin: 0; color: #009; } + +td.right { text-align: right; } + +.kw { font-weight: bold; font-family: sans-serif; color: #009; } +.sep { font-weight: bold; color: #009; } + +div.indent { padding-left: 1em; min-width: 1em; min-height: 1em; } + + +.more, .delete { font-weight: bold; font-family: sans-serif; } +.more, .delete, .edit { cursor: pointer; } + +.hover .more, .hover .delete, .hover .edit { visibility: hidden } + +.hover .hidden, .nohover .ifhover { display: none; } + +.editable:hover, .deletable:hover { background: #ff9; } + +.extensible:hover .more,.editable:hover > .edit ,.deletable:hover > .delete + { visibility: visible; } + +.more { color: green; } +.edit { color: orange; } +.delete { color: red; } +.error_message,.inError { color: red; } +.template, .template .sep { color: #999; } +form { display: inline-block; } + +table.tabs { + width: 100%; + border-width: 0; border-spacing: 0; empty-cells: show; +} + +table.tabs td { text-align: center; border: 2px solid #009; padding: 2px; } +table.tabs td.active { background: white; border-bottom-width: 0; } +table.tabs td.inactive { + background: #cef; + border-top-color: #66c; border-left-color: #66c; border-right-color: #66c; +} + + table.tabs td.gap +{ border-top-width: 0; border-left-width: 0; border-right-width: 0; } + +table.tabs input[type=button] { + border: 0; + background: inherit; + color: #009; + font-size: inherit; + font-weight: bold; + /*text-decoration: underline;*/ +} \ No newline at end of file diff --git a/src/editor/simple/editor.js b/src/editor/simple/editor.js new file mode 100644 index 000000000..6420b5eac --- /dev/null +++ b/src/editor/simple/editor.js @@ -0,0 +1,789 @@ + + +var editor=element("editor"); + +/* -------------------------------------------------------------------------- */ +function div_id(id,cs) { return node("div",{id:id},cs); } +function div_class(cls,cs) { return node("div",{"class":cls},cs); } +function a(url,linked) { return node("a",{href:url},linked); } +function ul(lis) { return node("ul",{},lis); } +function li(xs) { return node("li",{},xs); } +function table(rows) { return node("table",{},rows); } +function td_right(cs) { return node("td",{"class":"right"},cs); } +function jsurl(js) { return "javascript:"+js; } + +function insertAfter(el,ref) { + ref.parentNode.insertBefore(el,ref.nextSibling); +} +/* -------------------------------------------------------------------------- */ + +function initial_view() { + var current=local.get("current"); + if(current>0) open_grammar(current-1); + else draw_grammar_list(); + //debug(local.get("dir","no server directory yet")); +} + +function draw_grammar_list() { + local.put("current",0); + editor.innerHTML=""; + editor.appendChild(node("h3",{},[text("Your grammars")])); + var gs=ul([]); + function del(i) { return function () { delete_grammar(i); } } + for(var i=0;i0 && !local.get(local.count-1)) + local.count--; + initial_view(); + } +} + +function open_grammar(i) { + var g=local.get(i); + g.index=i; + local.put("current",i+1); + edit_grammar(g); +} + +function close_grammar(g) { save_grammar(g); draw_grammar_list(); } +function reload_grammar(g) { save_grammar(g); edit_grammar(g); } + +function save_grammar(g) { + if(g.index==null) g.index=local.count++; + local.put(g.index,g); +} + +function edit_grammar(g) { + editor.innerHTML=""; + editor.appendChild(draw_grammar(g)); +} + + +function draw_grammar(g) { + var files=div_class("files",[draw_filebar(g),draw_file(g)]); + return div_class("grammar",[draw_namebar(g,files),files]) + +} + +function draw_namebar(g,files) { + return div_class("namebar", + [table([tr([td(draw_name(g)), + td_right([draw_plainbutton(g,files), + upload_button(g), + draw_closebutton(g)])])])]) +} + +function draw_name(g) { + return editable("h3",text(g.basename),g,edit_name,"Rename grammar"); +} + +function draw_closebutton(g) { + var b=button("X",function(){close_grammar(g);}); + b.title="Save and Close this grammar"; + return b; +} + +function draw_plainbutton(g,files) { + var b2; + function show_editor() { edit_grammar(g); } + function show_plain() { + files.innerHTML="
"+show_grammar(g)+"
" + b.style.display="none"; + if(b2) b2.style.display=""; + else { + b2=button("Show editor",show_editor); + insertAfter(b2,b); + } + } + var b=button("Show plain",show_plain); + b.title="Show plain text representaiton of the grammar"; + return b; +} + +function upload_button(g) { + var b=button("Upload",function(){upload(g);}); + b.title="Upload the grammar to the server to check it in GF and test it in the minibar"; + return b; +} + +function lang(code,name) { return { code:code, name:name} } +function lang1(name) { + var ws=name.split("/"); + return ws.length==1 ? lang(name.substr(0,3),name) : lang(ws[0],ws[1]); +} +var languages = + map(lang1,"Amharic Arabic Bulgarian Catalan Danish Dutch English Finnish French German Hindi Ina/Interlingua Italian Latin Norwegian Polish Ron/Romanian Russian Spanish Swedish Thai Turkish Urdu".split(" ")); +//languages.push(lang("Other","Other")); + +var langname={}; +//for(var i=0;i=ci) g.current--; + reload_grammar(g); + } +} + +function draw_filebar(g) { + var cur=(g.current||0)-1; + var filebar = empty_class("tr","extensible") + filebar.appendChild(gap()); + filebar.appendChild( + tab(cur== -1,button("Abstract",function(){open_abstract(g);}))); + var cs=g.concretes; + function del(ci) { return function() { delete_concrete(g,ci); }} + function open_conc(i) { return function() {open_concrete(g,1*i); }} +// for(var i=0;i0 // && g.current<=g.concretes.length + ? draw_concrete(g,g.current-1) + : draw_abstract(g); +} + +function draw_startcat(g) { + var abs=g.abstract; + var startcat = abs.startcat || abs.cats[0]; + function opt(cat) { return option(cat,cat); } + var m= node("select",{},map(opt,abs.cats)); + m.value=startcat; + m.onchange=function() { abs.startcat=m.value; save_grammar(g); } + return indent([kw("flags startcat"),sep(" = "),m]); +} + +function draw_abstract(g) { + var kw_cat = kw("cat"); + kw_cat.title = "The categories (nonterminals) of the grammar are enumerated here."; + var kw_fun = kw("fun"); + kw_fun.title = "The functions (productions) of the grammar are enumerated here."; + var flags=g.abstract.startcat || g.abstract.cats.length>1 + ? draw_startcat(g) + : text(""); + return div_id("file", + [kw("abstract "),ident(g.basename),sep(" = "), + flags, + indent([extensible([kw_cat, + indent(draw_cats(g))]), + extensible([kw_fun, + indent(draw_funs(g))])])]); +} + +function add_cat(g,el) { + function add(s) { + var cats=s.split(/\s*(?:\s|[;])\s*/); // allow separating spaces or ";" + if(cats.length>0 && cats[cats.length-1]=="") cats.pop(); + for(var i in cats) { + var err=check_name(cats[i],"Category"); + if(err) return err; + } + for(var i in cats) g.abstract.cats.push(cats[i]); + reload_grammar(g); + return null; + } + string_editor(el,"",add); +} + +function delete_ix(old,ix) { + var a=[]; +// for(var i=0;i0) el.appendChild(sep(" → ")); + el.appendChild(check(t[i],ident(t[i]))); + } + return el; +} + +function edit_name(g,el) { + function change_name(name) { + if(name!=g.basename && name!="") { + var err=check_name(name,"Grammar"); + if(err) return err; + g.basename=name + reload_grammar(g); + } + return null; + } + string_editor(el,g.basename,change_name) +} +/* -------------------------------------------------------------------------- */ + +function draw_concrete(g,i) { + var conc=g.concretes[i]; + return div_id("file", + [kw("concrete "),ident(g.basename+conc.langcode), + kw(" of "),ident(g.basename),sep(" = "), + indent([extensible([kw("param"),draw_params(g,i)])]), + indent([kw("lincat"),draw_lincats(g,i)]), + indent([extensible([kw("oper"),draw_opers(g,i)])]), + indent([kw("lin"),draw_lins(g,i)]) + ]) +} + + +function draw_param(p,dp) { + function check(el) { + return ifError(dp[p.name],"Same parameter type defined twice",el); + } + return node("span",{},[check(ident(p.name)),sep(" = "),text(p.rhs)]); +} + +function add_param(g,ci,el) { + function add(s) { + var p=parse_param(s); + if(p.ok) { + g.concretes[ci].params.push(p.ok); + reload_grammar(g); + return null; + } + else + return p.error + } + string_editor(el,"",add); +} + +function edit_param(ci,i) { + return function (g,el) { + function replace(s) { + var p=parse_param(s); + if(p.ok) { + g.concretes[ci].params[i]=p.ok; + reload_grammar(g); + return null; + } + else + return p.error; + } + string_editor(el,show_param(g.concretes[ci].params[i]),replace); + } +} + + +function delete_param(g,ci,ix) { + with(g.concretes[ci]) params=delete_ix(params,ix); + reload_grammar(g); +} + +function draw_params(g,ci) { + var conc=g.concretes[ci]; + conc.params || (conc.params=[]); + var params=conc.params; + var es=[]; + var dp={}; + function del(i) { return function() { delete_param(g,ci,i); }} + function draw_eparam(i,dp) { + return editable("span",draw_param(params[i],dp),g,edit_param(ci,i),"Edit this parameter type"); + } + for(var i in params) { + es.push(div_class("param",[deletable(del(i),draw_eparam(i,dp),"Delete this parameter type")])); + dp[params[i].name]=true; + } + es.push(more(g,function(g,el) { return add_param(g,ci,el)}, + "Add a new parameter type")); + return indent(es); +} + +function delete_lincat(g,ci,cat) { + var i; + var c=g.concretes[ci]; + for(i=0;i1 ? n+(++use[n]) : n; + } + return map(unique,names); +} + +function draw_lins(g,i) { + var conc=g.concretes[i]; + function edit(f) { + return function(g,el) { + function ok(s) { + if(f.template) + conc.lins.push({fun:f.fun,args:f.args,lin:s}); + else f.lin=s; + reload_grammar(g); + return null; + } + string_editor(el,f.lin,ok) + } + } + function del(fun) { return function () { delete_lin(g,i,fun); } } + function dl(f,cls) { + var l=[ident(f.fun)] + for(var i in f.args) { + l.push(text(" ")); + l.push(ident(f.args[i])); + } + l.push(sep(" = ")); + var t=editable("span",text(f.lin),g,edit(f),"Edit lin for "+f.fun); + l.push(t); + return node("span",{"class":cls},l); + } + var df=defined_funs(g); + function draw_lin(f) { + var fun=f.fun; + var err= !df[fun]; + var l= err ? deletable(del(fun),dl(f,"lin"),"Delete this function") : dl(f,"lin") + var l=ifError(err,"Function "+fun+" is not part of the abstract syntax",l); + delete df[fun]; + return wrap("div",l); + } + function largs(f) { + var funs=g.abstract.funs; + for(var i=0;i10) i.size=init.length+5; + var e=node("form",{}, + [i, + node("input",{type:"submit",value:"OK"},[]), + button("Cancel",restore), + text(" "), + m]) + e.onsubmit=done + start(""); +} + +function ifError(b,msg,el) { return b ? inError(msg,el) : el; } + +function inError(msg,el) { + return node("span",{"class":"inError",title:msg},[el]); +} + +function kw(txt) { return wrap_class("span","kw",text(txt)); } +function sep(txt) { return wrap_class("span","sep",text(txt)); } +function ident(txt) { return wrap_class("span","ident",text(txt)); } +function indent(cs) { return div_class("indent",cs); } + +function extensible(cs) { return div_class("extensible",cs); } + +function more(g,action,hint) { + var b=node("span",{"class":"more","title":hint || "Add more"}, + [text(" + ")]); + b.onclick=function() { action(g,b); } + return b; +} + +function editable(tag,cs,g,f,hint) { + var b=edit_button(function(){f(g,e)},hint); + var e=node(tag,{"class":"editable"},[cs,b]); + return e; +} + +function edit_button(action,hint) { + var b=node("span",{"class":"edit","title":hint || "Edit"},[text("%")]); + b.onclick=action; + return b; +} + +function deletable(del,el,hint) { + var b=node("span",{"class":"delete",title:hint || "Delete"},[text("×")]) + b.onclick=del; + return node("span",{"class":"deletable"},[b,el]) +} + +function touch_edit() { + var b=node("input",{type:"checkbox"},[]); + function touch() { + document.body.className=b.checked ? "nohover" : "hover"; + } + b.onchange=touch; + insertAfter(b,editor); + insertAfter(wrap("small",text("Enable editing on touch devices. ")),b); + +} + +/* --- Initialization ------------------------------------------------------- */ + +//document.body.appendChild(empty_id("div","debug")); + +initial_view(); +touch_edit(); diff --git a/src/editor/simple/gf_abs.js b/src/editor/simple/gf_abs.js new file mode 100644 index 000000000..468ed91c7 --- /dev/null +++ b/src/editor/simple/gf_abs.js @@ -0,0 +1 @@ +/* Abstract syntax for a small subset of GF grammars in JavaScript */ diff --git a/src/editor/simple/gfse.manifest b/src/editor/simple/gfse.manifest new file mode 100644 index 000000000..60c6f3757 --- /dev/null +++ b/src/editor/simple/gfse.manifest @@ -0,0 +1,4 @@ +CACHE MANIFEST +# 5 +NETWORK: +* diff --git a/src/editor/simple/index.html b/src/editor/simple/index.html new file mode 100644 index 000000000..ef3843379 --- /dev/null +++ b/src/editor/simple/index.html @@ -0,0 +1,42 @@ + + + +GF online editor for simple multilingual grammars + + + + + + + + + + + + +

GF online editor for simple multilingual grammars

+
+
+ +Hover over items for hints and editing options. + + + +
+
+HTML + Last modified: Wed Feb 16 15:10:52 CET 2011 +
+About + + + + + + diff --git a/src/editor/simple/localstorage.js b/src/editor/simple/localstorage.js new file mode 100644 index 000000000..31201998c --- /dev/null +++ b/src/editor/simple/localstorage.js @@ -0,0 +1,21 @@ + +// We use localStorage to store the grammars, +// see http://diveintohtml5.org/storage.html + +var local={ + prefix:"gf.editor.simple.grammar", + get: function (name,def) { + var id=this.prefix+name + return localStorage[id] ? JSON.parse(localStorage[id]) : def; + }, + put: function (name,value) { + var id=this.prefix+name; + localStorage[id]=JSON.stringify(value); + }, + remove: function(name) { + var id=this.prefix+name; + localStorage.removeItem(id); + }, + get count() { return this.get("count",0); }, + set count(v) { this.put("count",v); } +} diff --git a/src/editor/simple/save.hs b/src/editor/simple/save.hs new file mode 100644 index 000000000..01d3ce270 --- /dev/null +++ b/src/editor/simple/save.hs @@ -0,0 +1,12 @@ +import Monad(zipWithM_) +import System(getArgs) + +main = save =<< getArgs + +save [dir] = + do fs@[ns,_] <- readIO =<< getContents + save_all fs + putStrLn $ unwords [n++".gf"|n<-ns] + where + save_all [ns,cs] = zipWithM_ write1 ns cs + write1 n = writeFile (dir++"/"++n++".gf") diff --git a/src/editor/simple/slideshow.js b/src/editor/simple/slideshow.js new file mode 100644 index 000000000..307bcd98f --- /dev/null +++ b/src/editor/simple/slideshow.js @@ -0,0 +1,86 @@ + +var internet_explorer=navigator.appName=="Microsoft Internet Explorer"; + +/* How to change opacity in IE: +http://joseph.randomnetworks.com/archives/2006/08/16/css-opacity-in-internet-explorer-ie/ +*/ + +var set_opacity = + internet_explorer + ? function(el,o) { el.style.filter="alpha(opacity="+Math.round(o*100)+")";} + : function(el,o) { el.style.opacity=o; }; + +function start_slideshow(img,options) { + var p=img.parentNode; + if(p.tagName=="A") p=p.parentNode; + var is=p.getElementsByTagName("img"); + if(is.length>1) { + var cur=0; + var w=img.width; + var h=img.height; + //p.style.position="relative"; + p.style.minWidth=w+"px"; + p.style.minHeight=h+"px"; + var images=[]; + for(var i=0;iw) { w=n.width; p.style.minWidth=w+"px"; } + if(n.height>h) { h=n.height; p.style.minHeight=h+"px"; } + c.style.position="absolute"; + c.style.zIndex=0; + fade(n,0,1,ft,function() { + if(c.width>n.width || c.height>n.height) fade(c,1,0,ft,null); + else set_opacity(c,0); }); + //debug.innerHTML=w+"x"+h; + //for(var i=0;i=1) { next=1; done(); } + if(next<=0) { next=0; done(); } + set_opacity(el,next); + el.current=next + } + if(!el.timer) { + el.current=start; + el.timer=setInterval(f,dt); + } +} diff --git a/src/editor/simple/upload.cgi b/src/editor/simple/upload.cgi new file mode 100644 index 000000000..fbc5a0be1 --- /dev/null +++ b/src/editor/simple/upload.cgi @@ -0,0 +1,77 @@ +#!/bin/bash + +bin=/Users/hallgren/www/bin + +charset="UTF-8" +AUTOHEADER=no + +. $bin/cgistart.sh +PATH=$PATH:/Users/hallgren/.cabal/bin +export LC_CTYPE="UTF-8" +style_url="editor.css" + +make_dir() { + dir="$(mktemp -d ../tmp/gfse.XXXXXXXX)" +# chmod a+rxw "$dir" + chmod a+rx "$dir" + ln "$dir/../../grammars/grammars.cgi" "$dir" +} + + +check_grammar() { + pagestart "Uploaded" +# echo "$PATH_INFO" + files=$(Reg from-url | LC_CTYPE=sv_SE.ISO8859-1 ./save "$dir") + cd $dir + begin pre + if gf -s -make $files 2>&1 ; then + end + h3 OK + begin ul + [ -z "$minibar" ] || { li; link "$minibar?/tmp/${dir##*/}/" "Minibar"; } + [ -z "$gfshell" ] || { li; link "$gfshell?dir=${dir##*/}" "GF Shell"; } + end + begin pre + ls -l *.pgf + else + end + begin h3 class=error_message; echo Error; end + for f in *.gf ; do + h4 "$f" + begin pre class=plain + cat -n "$f" + end + done + fi + hr + date +# begin pre ; env + endall +} + +case "$REQUEST_METHOD" in + POST) + case "$PATH_INFO" in + /tmp/gfse.*) + style_url="../../$style_url" + dir="../tmp/${PATH_INFO##*/}" + check_grammar + ;; + *) + make_dir + check_grammar + rm -rf "$dir" + esac + ;; + GET) + case "$QUERY_STRING" in + dir) make_dir + ContentType="text/plain" + cgiheaders + echo "/tmp/${dir##*/}" + ;; + *) pagestart "Error" + echo "What do you want?" + endall + esac +esac