QCodeEditor/0000755000175000017500000000000014277233147011640 5ustar dimadimaQCodeEditor/example/0000755000175000017500000000000014277233147013273 5ustar dimadimaQCodeEditor/example/image/0000755000175000017500000000000014277233147014355 5ustar dimadimaQCodeEditor/example/image/preview.png0000644000175000017500000015173414277233147016557 0ustar dimadimaPNG  IHDR%T pHYs+ IDATxwx^ɥPBN*]PP EAED *ł]T vE&{ [\rp$vynwf{3pn(_!B!DSùT!B'ɄB!J$B!BT$B!B*9W +o||,B!+ګ |>ϔ4$$$H2!B!D5z$ gI.ju2@LICZZ$B!BTSDDGP+I9K&\I&B!2$#66V?-UɄHaB!;v#I(I2"""2 fRd">>^Ydӓ<PF$B!ժ{$;vG?5Sh21"dCnnҤI%//O9=il n/aaad!BqefboZu}z@@ާO[#^I&NO$ 6Mʩ BIp8$iB!KL&'l-$I}#Ǐ v]q8T\.$B!BeF煅'fYS oPT+(kDl6٪j58Nr) LNLV$B!?̓$CUU@WUU/I,\Ztt[#=Y/M$bf,nVr˥hX,EӴ B!73 g=/ofY+,,ff4???tl6ש EuF(LiDnjQQj2 N`6M<;YA!B+IJ-**`0%tjAw\.t\.yzBQWhD0\.&h0Te0L2FEuwQ_t J !Bo(J'cɿ% (E iK4TšpRFBQJ%H8e6Fa4S].Au$()DUճ#ɄB!/8S2r)A^[:Ǐt{n!B( ѫgwĴ&<< eWiVtBp@rb0Sxʸpdl]ݮ2 xQ2t(foRw&vLСCUj/B!Dm]J]+.;x)$9Z].08N늪8Nl6W:*%NS*hTiZMU90MU&B!B~mbb,~~~DQc Pf(CQUEVgUJ&Nib0Jlmе Mlݲ@Mݠ'=n䛫l⎁0oݗB!U]/T0( ce+cO8mؽ{7\v9Kcm126)E)LzyW]ƶn7?s?Λ+E)0|#H$m8u6mv>_-%3t]wǗ,v8nW +`T{dT+-8`o i$''9ٿ fٟ%./GuF&TH(~3kBTLtt}cGZZ.ᮧ*7\?.{ unw~&i>ɿ LJ|w:C'| 8NP` 1[jJ[^|Z|!@,sW#R.]XfMwhGؓk$lv^=4=ub*O|Ǻ}lܴcFtV)RUnW RP|||k(t]Wr~p{$7_@k0?epI o8?'TZ!Q'*_+W3ddfҸQ#~p0͚6u DGs|,ƐQOg>rw5kֻ7ލ-jwvKhh;ѰA>b׏%kl*ĺSlv'T|AYuBDV|Bqq/ԑ}_H(J};xգ'7LLq2L\.JF'ʫ#*׭e>~Ӣtwjr]Iܳ Z%Ak4=~M 9WUof|ƛoG&M҉ČeTe !nF:oޖccǽ|Dظi3;us ~piiţyy,/w͛i԰!w~5}ɿo]sV++Ws.7nv;Oq @\\[{f͚?S>捷#00{Hq,[|FHHC6hk(,,r=4o֔{x#_Kff&,ZLFF^g$*wy;j4bj>3v;K:K&M e Շ#߯nPSR/ٸis?BZb11vh&:'ݺva#Krq?OF===6#J%j&]וޚl*|Ӻӹ\.`,(Tt椿 ^:]n?`QuPPX ;E5b7`sT4śog*3շ|75=]N)׆˖ڞ;wѾ}:pхٸi3ieτ1緹4}>\e.Evo1/čоhÐ9x}sˠsޭT}%-g?Xlw}:0dp0G !{| n3JPV|7o!;'6-7H۶<< {p5d7ѝKb#yw]t؁G=/W[[~`0L~o|󣟡~tLI";eLzu2A]J/I$&: 6W8rV^s㞭Gt% ŋ'IgL$8GEU½ZJɹ}eU98#]X|^mAQ WԭWѵvx.rEs\ ^<7LJ'Ev  33}\|3ӭE=v?,E4;Ə3f@A׹g.k Xѣ(ӿ__c1F4f<61x,m ~ż9?SN͚6/gt8Ys<Nj|A6|m6 /wi&ϳfeVrs5{px_֗\ D{#Gu6uًngނ蚆ro]򾗲`"݇il޼kq٥gJ)++Wf+3tr{{.'U9q-PN|{<˼riؒH Kj( E(B4$>LΝ?w.۶lE˖t *ߥW~Np?7|LmBT^n^.!!e~=a:GXXI؟NDx8:®={<ׁpwB'/ 8$9?<޳!bOIK?/(j4E!44c$&)~KDEEu8:c e';^4rr4MCU_Q?55JMBn+Va+3#:xe5ԡY9^p֫2HOϠAt}X#sOsJOϨXɚ EQƥaf"ω*-.%n֗p\MHBBΥ~t4u%7ljBUUSU{׮b-233???|,ьx^~d_Fz~ZQNFF^_N;fn]Zlڼ5ֻack[m322|##INNB \^g ¸\Z}mvƽ8IUe6G[m^*8uuIP֢}$W9L&TU𚉒Y( p\lsަU@.hUhgyBbs76BUUtEĜ >)R37Hƍ#ԫWZưnnO@.[D&WO֭@Q0Lj'_۠G%AcH@`jw%mKgeeѸqC dmOl6c璿ڟQ "##k9b8 ۉDiܸqms,~}i޼9( ۷[׋XxIHrnʊի;n.[ΩoTfpu6zYlYʼn+V*N%jfdvL"|۲Gh `pp`Svn/܊b0TUeaLx9m'\5kזD!(Cd>{モޚ?_ot8x1s<3 BCC(**blF#?ȣCxv66惮bJFgaW]:{B|}t(upj޹o#{N^?'ogW|C n=q {W,^wq/OGW_bXvMgމ ٳw/(6q\s!?Uj:ڸq3۶'жMU,f^x ;u,UGn?=nƍ+x]g$JBB6l>>>(FMLf٬iUUU_]4M ͷ;hPdXl(**rhiiiZDDeaӽ>2Q?:`2?`KC7@5b4i޵%.0 ( oO!$//gF?ϻoM'7%BQaI"/ܼ<%*q$cMʗE^^Ersrp8JV^:ш`@Q@5v;6 &edd2{k: !P۶oǟ`ѶMrN~+8"qÇOY5`@)~|S%))I~B!*>:uh"m""HKKgײU\_02i,vB! ~ ݣyB!BI&B!U"ɄB!J$B!BT`.B!M^DޤݥB! -ޝ$ӜB!UbwB!B'ȄB!J$B!BT$B!B*)jNJBB&)B!KHHPOKV`YӦZk2 /QXP}4#0ZO`B!CPSc1L枳щf͚rsuFMؽgY?!9?OeyL!|:ȟ<}İ~ ""B?S]3kDBxMzFW4H"!BMPL5;ӢBDLL ~B!BJ՜B!U"ɄB!J$B!BTI9T.KZiB!B(Lyy[eecx-9 4 㕾*lQ=jzwގ)BOLQ >^x=z[>jڛ!-.[~`ڞENVڝs _oxn- Z\L|'wzAAfF~BDuYFNҳ$8ԉb}}6L.\}z__E λXb/+_?yi|u`Ʌ?i}I}.Uj%% 4sUouĆr5k: !­;`3zGeН47ocmgP=:>F~ODdeʯ#4IGOXLr?w-lk5;b练+cmL0yG76!#Jܿ]'6@( /fBr&Rs(&lɪwHُ{QMc06f [cwNSթQWϏ/wophhHp?z˳c;ӼE0v>xwKq=5V3w_:ѥ[|||^[3X؄W'nE`]E (…Nn'Gچk^-]BV!Ija#{kV%ST↛r͵yeȭ)Bx$Az8~< 7y쿬__vٹk9U"qi {Cv<wW&̦[pك<5jHӿBx'tQYc蚏9.{|g =O?^vg\9g^_fuyw\>ڽv!w2bnCgf'''kk.̴=2څ4St-|cû qj7tg ْ_'WrNSSl?qrw,>Gi`>YHRb&ƌ[K<4on D7gsusK=坭 ?˜_3Lx IDAT{.؟ó#WR/~){v'ps=ȗMQ;iszgTg ~K:\ֿkV%_6ܽkoh”/alm忧B!ĹiN+Ϲ'-cCzە׶ ʘcnjry[n_ҳGw_CCȰ\u\ҧW_`/ԳVz*q{>p0?_7s(?YI+aQ nɇo`KALzF"0EǶ4eI).{-d<4hOV!|3}{wgݚ^EvoiFt_ZKlNf|"u[ڽ>J@tgɟG"y(M(*t^ác=/?SW؅Bw^;o`ʇS9x?/:gLRw={75jUXT*~[Kzza:B!@}|# _A=RFrs##c ra7BerϚ$@^*TjQ_˥E=X>|o; MO/" Єh,N(B,pr=y3oOM6c\qɬJXִE{SX,i ^Е{Xԭ_q-.1j/Bx\<ۺu3EǎsSҙ5Wnwpu8p̓Ӊ-$$yDxz꒑qn~U6}/w/q rxDc[iP;aP"}ʣNQ7U1`1\De#ĥ^ۇ6&7Խ/x-Pzs"mQ>A _90YK<&1Tog^A[x8}{e`q"uA@:_ r51?rtӦQeda4SBB,:v^K2Ѷ*>fwqhhK"QEPqvԩ7gPB!jLc> ݺuemdgIu[<~ƱrjvHfMN(,,E󦤥( I16ϧmXZ4oƢ5W_oƍpE^{͚z "뷦an(ɇ}#'(̫p 8|Ⲱ Yc$* ::WáUaU0u<w#Y|ڿ6gO֟wx[q777tOh7bz v~<+O~&l9(*F8naI/o`4ش!1Ck/C/:2khΚU)_J~X(og^AfF%\޿>XZ׳vMF-BsM9Q<+ JZZ4iDIKK3f5??ߠip8̀`u=@"W ozj&Mxf͚bZ?2p8O.Փ{zup8Xr:]s5w.GGأCޭ+YǏb9 ?w^άYs79u܉[GTddڶaC3vp3`{sEw^jۮ@DB!ZL:uhזNn_PSqy~f׫Gq8deeO?GFFЩc}9.ǎlr.>-8t8ؘz]nFff&Wn:mWZ޿mv4M Rvv6AtH`{Bv{b0?/Ch?$msEuK{z'JuC"_ާQ !\Ӝ#;;ȈSRRR1 %//SGf36l,u.nsۭ7cŗ_1{ίʠnsN F#x=~J욦QXXf4繹y3 -STD-zO&?~ ׊M:c4q:mڵCؚd́AA6:zb ݦAl;s+6<,=$==\?1ώIL:ꍐBE6H 1)/}SKO?__wP'* MI@1(CQQǯiiiƝwf+Yb%ZՉILLMl ={vgϒGÆ ŧJEF{+> A#}o|.(|БqOڔuDMi6͗w]#|hSIxs}>-lGr/.I!_k F?7;onAUUy8r(c_fcժ5LxCu^F>_~$##/g|!i})>-RRS=hڴ)ƿlnp"VYˁyi\zijyr=wӺYYiL*m{#xzup8Xr;YF\ h^@~nVǐ{WJn/-c(`+pl}wm;ksaF6@In *no=1EH."cd~zE=VۧOG}D=ղ-MGƴXha'*~mVuFH$00S˭/BV'k֮s_jtǏg¸61)džض`"㜜&Lz_.+ Gײǧsn\}ǶG xӣ+3kr@7&l]kU+U,YwzLURT͙?a,́A=6ek|N8VYCC>(wQ*ÚUg%P*ૢ v __+Er6B!=j}2SQ؊rٰ3,tdg$UV1d\|tA3y`72=u7@1I h VbGS; #/8Q-70&B!΅ZfB [a.Y .!sgǶ1dqNre+:]kvזԛІ7vs}fl>|͛[y&deeZ)dB!8w$E&Lzi|Va 0|hؼ+&s(Aa :RN˲FHBNK0B[ŐqZa ``2U)S!fth'ߋBAQP,ʘ` -ހ2^;B!G9 QN MsV #NGw-';rIt?0L\TcاъË뇶%}$/Ԟ4C g(&3̰(G _{ _#W!Y?֭;ʬӤI# T!ܐdBu#i_ kϸ{<_>fd:)1J7wa a$|rƩWk:u{YR&$eRW+ڕ޾K]Nv_Cn#21<虈Չyn$2*„Bq^4'!Dپ}'<;:ץK'O|5kJߕ^!L!jԎٱcwfϫhBQ22!B!I&B!U"ɄB!Jj UU# C@nn7/Uew o(F ϗ?Q!BTHN&ڵ#9%mʯ,"##ر#ׯGU՚MQj}g݆-|^J!ܫӜHMMt)RHMM% '֢D4VV?쥈B!ΏZLPEmP>fyZꥨB!ΏZLԲFQ ԶDmI; Q~RRdB!,:6S *Q bI9  6jW~|}ĴnA~~#B!8$40/L,B"Wn&:.~B!$BTQq$'n`څѾz^?9 fxB!\4l!/j^LT#VA=0FT]nfۚ*WAA! ;vc9G !B<v\N.q\"#y/{ܾF kj/F%BqndlZjW'_dfdҰaÚKT@ظis4z}pB!*vOs:G>̼ :SPPX]عkGoNPP`}<ԓ|+N3Ié:vhϐjց }d$B!G$z@V-;~=K}Oʹ*7m⃩SO$;vhǐSٸiY !BڠOs8  %5zſ:?3ƌϧ`Xsq/F>9v3O6nfԩ }AL 7n<&I(B!jZL-//psJ_|˖_#<]}Mzj֬a_CtO$O {7}DB!B&;8Ï$%~o7҄WؽgO d`B!֨Nc,"##ptMѣz{tcrԢ*D ĹuKwj:!BCdlXscq[햛PUt>hG2|g_PſTTt,^޶{:~3Ǐ"W]+Į UeE\V$4l\pAC6oN 1bkTBseuH IDATV'j'e4R>vYEvfRMUaQ.gPTKߞJ}4Pv2tލH%LҔ*UOp 6 S:|[׷pvvԔx/ ػK7Y 333jT@RRT\Bk}!B!#8v$'MOxݞ(Ja,^G3etFIJN3,)k/F~8xf͠G \zQ#(YƒTN:M-^øch4 1*B!B7FL9{3ge[ԯqߞ~6~æ5 -^kwذq^;~cOd[w]عK!YB!0'CPd "o_g֕DiWSzPgzRCϘ=CGzhZ^>&..Y̽hJvLV%l:3kŒo:!^ZF3!R*+]#QFU|u"9v<6jXNs"џ?àdž%bbRI_:..5Œ=̴-*2]~7‰cLζ,~,VU9{G{_ʜAj / 2ÊM!6&ؘ9/$aLB&R*z5yq# pGdyc|ךg355wٳOꬫe'>. ,uڷ܆FS^iN(N+/cGXyNu/(mZ@ٛӡSN&LMM(aM<' )q El*&2CF ! cID:9::e4ժU̝SbyΙ3M4[׎\ɳ2Q ӦA];]9?GL,3gLۻ6Le;}pttѣ'`9g]Í)_~N*ıpJ:l>҉cP說Ǧ~ g֛q/;g*)lܴ~ߚW; dIOܻ^m&MÇٳO}p?sHM2m5z;f\A*,6e%YQŷsjI&͓#:Lj8,iCPP>ϝ[qubVh0yi&|YrEv7glZb/T* X:۶{UrD0)Uچ?]㯃QcbލDQuhݶ4 CY*gϤY|E=L ~O>^Ti[=;Og %_}y6cۊm-}@7PM,LtQͬ/d$y0w,[6agxHN+oǖw-MO&XZq[GO9bsfo4[_qz&w;e#F,6Funb;ccS9~4}(]jԃatx;캗f6"fi?+kS؜ᄍÏhּ5W}iQ&{-^qO1t1]΀Lm/gj͉OS'3PӞs/rfO-9s*T,~A3>v?_5]Vҳ^4ZE캗d +أ4}v{yNBJQKvuJX}{lUkLHMfEŊ*I׬Ĉu/1de?,ϒ|>^+X*W8oO&زnc{zvݛe߼b4=d@LMMذ ȸM#0a)76vŒl BCTIB6[W9w0nnVm_;;37(c*7^`f*ۛci,;{s>*ԩKyRS\>QTH7:'::9)w7뻢PKHѡGZ&97}'pN c{סLJ{v>t[p_p!<< SSJٰbةG?bc t,c8/i|c R@TR;j>'G˖Mb Dz&xUw( ϙ FCز5 YLЁ$$&2m\LrJ &`DDF1#..DNCl\|F:} |5sNv>d擛dF9& i̘v$%i>c{HLLcֻ}*)WX{;V=VqHI2g/nBTT2Yzڔ>7Iit\i4"&& cO%1nI&~Y;DFPZφԢl9; z%gfr V K%flۙsgB1\ `omqtՒ_7"9YÏg}&Lif^H|7RYNg5 4oY{{sthߡlVJLHX&\fzvfn›*έ(~wkOexoVΟ %>>U)&:T7 "lFN6Mq5ZV*<==j\ojͬRSSKNgc4=x:^?J///l %66_TޠA}.e]loA=KuƣJU,iA6;,bLiס {5o nݚ,iwx/ċ:c'q߾w}Y7 JFk4BhaajT*&%%Eꪽ{NꪫY`ڴiƠ3꞉:u U҈+ޜ?>RB! ;u N 11$ qg!^$B<'N&lmm6tHRbOBOQQ~óx15 jRD}С畿:!^ FL䰐/kBАDV.n0ĿlrWBQ$B!0FL!B!$B!BdBQ(;OrEv< ssV-1BqO" &xx [{WP(":С7|h;Ϻܽ{"Vހ"9B! ! \fhҒxbN#ej:Bո7*5t9Za!|t͚Uҹ]hWzL!2dxB caDׄPZ O0(>okwtT;StI*V,϶-hٲ ԋm[V1sƄLר^|8ecx 'W1̜1}{~CRֱckmY[mR/lٹc-'mgO{vtn_ۺ%̚91Ƿ[RR2= T(_&Ky||ɓFbg>uބBcaÜronxV(O޳Gw*Uds^x|Q.Ah5U}6xTNekIOаa=cs]p5k7fԔyb ߰ iѢqc`mmU188Fc! 27R" [t5Kf9~3jT,,,8t`իU<˝;˗eֽX+))9z.2xl3gϟy:oB!0<(J}a|Wzu \n,#HLĥD{w!!6ԔCPjвE8sƗ8U*v6lܴWnUi޲+'Nɶ&Ҷ}O""2m޽[͸`}$''^}u:lM)Qug*OHHK2l"ەq_ -:oB!0꞉w>>ߋ֩Z2|rƲ}nغ NGhҸ! -[ߋ~btg+UbA.UPEKqբ/Ag92mW7h} {ԜʵQv[.7thz-DDFNN|9yaHMMs_g'G"jygiZlwws9l(V0rpPQÝ0uxnn.8::YvބBcQ z&t9| &&>3jVV@-g`t}_LDy}ی_mƱ':b~zڬ ƚٳfe650crK>y}|/^dǻ^D ,]NΫ66E grF3m߱c?owDjZ"UV|/:ujeϔ,NٺmoFO%o~ߵB_;f;.BT9ߜy X鳄E黺yxBHWgO<##3Oh4>ߕeJ~ݚr++KT5s|&7p7E\-) 1u#ӟ҄LQFclٺ'Slb78t`# L=|/¸ 3=j Q=|L`,Lj'!!lc!6.CN>>̚9 g'1mڼ)ǏdeбC{jתŃ}=seUQJJm$GQB,%|M*M*GFtx-S lS%(a*ItJ"?͡'3W5B=}{>љ:N8ċumٹYS+klKb'~FYA#P((ؖ(M4ԙ8U6-61=~1Tv!& JQ7HNI;=X6{!%3gLۻ6h>c8:شy' ~\ ]!}ٵ 滝;ql;^D^ݕ8i:ݳ;]9?GL\Z^& W6ʶ~g%$$rE^kՌu8*=_z::ve;J%uzѻO_uFOlIF~]?.]s:w<n/@{Q4iҘ_,Z!!|ħRH>}P<~,6ӳ|ؗ%K}IKM&1>*rk['"(Y.%sF|Ê&03QDH5U r.6-Me5̬>em\2\`6UwbR:%%Js\1'&"5>ؠ=NUk`e9qq(?Dlã{^@TT4]ww)lBYQmrdj!w/Pl+U`ҥ= ,/D*V,ϨS(^m֐*g* +qttlR9.]gg,sPr'őL|YM۴Ic< #f^acu<}x)Zjg_k }ꄄ{OD҈.]B9~,\8Ň}ghZ=Fg|(MѤr.CRB0Q:, em\z NܼiZcii(siՕџ`!@z?ǏK"aĴ4ܸ>1حTu{JkHnV*RHѦel KJ ò$..:bj5y#6UJǑ=nD޺c\_Z CQhh"M$t(ᆙY֡MvF~ hӮhK7~F~6Nlڼ3fccClbB蓉""2g;"2L#Hնέ?Ńddμ8B;LQ"u".:ƉO5FhTfV(IӦ{sJdLyU*{湒So%656ȩZ bI~vm⊹=с aED:5)[;w(6rz=zglڰpŌȋmZ7gELr < !(>ȏ>ˈaChڤ1NMҥiZ+.]D;zF c=Y&T8;;HtTZ{DppvvrntGruRոun^qa> Y}yQE}o/=BJ&rt{7Ockcm?qe9XZZp]?I׵+y'@ysptp 66u.Ʉq+݀lDphJ0.ai»tZ^8K #ϭ:kĥ&2W?yYl=Ճn|c/شq9^^5|9s^!GC4̌ |)_|6֩j 8]oH<<)]esPO}jyO jR5X[ak@*ti}l׹s~8qp?n(-[4e˖ݘ9;=Ӧm"[ y?z肿6{F>Mw&/O&ӦMS\vMV OOOZ6177WǛhZ3kkkTsFt:$ޏ.qOa23-̙Cv%z9VmiР~I-'w)DnjժƬo&0ld{9llnaeH}IoZn:,ڛzj3|dA! 댝}Uf݀(Vh EErBBBVMSTݻ:;;;f͚:iӦsZYX=]IBk?Kݮ5kBA-(_,׮{g!D^g܄oh${[d~=((^m0AC:l%$$2C! K&&OB}$ACGB!(^aNB!B!ɄB!@$?\,V<С!yL!gO9wkl4t(B!(fgB\(Mъ>K5_F} ]ᰲ$C!BbH !r`rnIKKFM{| qm!a:: !BCL(ƃٖD>ҩUđ5.ΒL!"z΄R ;;[C"@ll(~dRs,O|1hVԨ^:!BCFLԩEpHW^3t(Q*{WW;c~C#BbȨ9t٠omM=zB B!!N&{ForMD]С!2dBſ5Q] /+R !0z΄deHWDp*JUl&(LYҠU?b"pi!7w7ԒL!"$"?2G7}t#z1)_ ǎmPBQ0'!ċ4n\?7t(B!(fgBFȋk{! B!!B!Bq'Z\B!Fè9uXӓ>˫VVuNزHEOr !BaDnWٳضc+V&"7}_?0x0Ͼ o*VNպQ?&JSﻓH+R^gY&-bk%gDpqv!::&K'9~$׭!2Ə3g8zDD-iB1jP/\G"Q~~Q SVƭ3~Ceױ'>6C-vLLm4GabBhh_~7αiN&Fllba`kk-7nܢF*>}Q_} 1;AŦ;Y,uW̲frzVPB!q'9<'(ڶݢI*__?R#RIKM֫-($%fMnEV-7U&t}TPSR##4[v\ڵefV,dܜի$\-Y%KW3vXXckkJeWB!q'Y)'āC :GgԻuiilx 11Eȁ^I+[ .'=pvv7۳Qk'1iiXYZݿbiiJeϟ7q=>8Z23?~ &WF]O(6BC0d"ObҔ^/JuXKȔL|9mzm][!F+1gD:X8pCRl\vg իv!!!"9~NqwwuKhӮGr$B!^FL=wa05p-Yk綢f&w ?k(Jf|=1d츯 VLXӽ{'?ày BbLaHejR mMԠAt:WP(h4LLTNN4j͡?j !!,P4=-[6ዱCU'zB!^$#O&qP0&lJ7 ^{jpt&&J믱_ٲeOFsW-y 1 !ȓ ! '1>GVf[j8lD.]ƀX~=zYe]s׷f]/!|"nQuʕ+MrJ ;v(Bø߀-/^'QQцE!x.3!E畿:!Puτ<&ׄB!(=r(B!12d"..WWy0n˅B!Q'.]Wm<=:aB0t(/KK 6m\Ε7n"%QB!Du2p: u EKJJkL4>`B!ȉQ' Ri0ԜrUQ6!91&̵d5Jy6ԜdNg$:!Z IDATB#3!D!HN%6 JY[Yq振$B!7I&(S3KVnz*2D>2pdB!D1$Üȁ#5_īqOZ "--VW^Ľ'h/,,WC!BbH !r#9Z#9+ڠ RtDDjB!?'9M?O?k00*l߶++K~Y!2꞉zYO@JJ o'8$jUƝw RRR21tB!(ƌ6Y3X' k++jժIXx8zH2!B!m2䄥EBB 9z ТEsOr>5!Frmlپuvʕ9beJ&4T͂EK|J~?!V|ɨq B!PCΙx7rʔμv|{7ط uN;diղu+Ӿ666̝3lKwyf͘}|/!B!^FLhu:F˭۷Y<8scnڵm9۵a}Yڬ j:|S&2*zu_B!ee@RR+W{ص{/3g|WZֽOpH-7ŅwQUm3$H)*{A@HWT,(XPtM޻tC I`3 dBkYk0r`u)SXQ͙ix{ ѡDDDD3q+PvM*UCaR[l9M7`l۾7nΩSRK!r;OO^ԗЪMw._·dؼegD("""s'bERr% xyB'dr;vHJ.``ѸQT8l޺"Eвy31 .] ww$(W,NdR&TV={DDDD&7g&+-bCٱ9Z5a4j6nϏvott4EF Xp>+-bWquqoMr .ʀojw:vhŪ눋8]tI%ÇBמ){kZc'NJV3 6+7LܸaJřv϶K)pjժ9c""""9ag&\'xFu-^ӡHФq=Ξ(\8ڵtH""""Ld7?L$ODXxxN$yϷ_~5d"*:϶aHFG2tH ;azѕDDD$ox ->>unܨڵs0*KɄHy(Ӿyh4ӏD]s82ǠdB$ g^IΙ}=HDDDıX=g&9>'])^gIa/ |%KRb؉1E 6mygXjذqOݹ!+prNɔȍܸ@ttӅ+QNuM;TYb2%bF"Z("`p rHŚ]07"4{6̰?Dzʔ(Q,ø'Z4oW;ߏU~MWj3={v߿`N"t _21`p0]ir,⛩hi;{Q)fBaJJ$e7/јzFQ=L(^r:{כ)UYrS&Gч裏x ֭Aϳx 0&Y'/üX\&clٴ*SacXr)4oހ ga"fjOUԉv~Nݼq %)jxmӌ gP/Lz gvSp MyW_ELtlʕ3wTd=g')ʸ;HH˂ {p5Xlq3O'MI_S?Ogfz}^Qi3зY}ٿ/5Yno0hls|qvvRyZ[O_o'3|8q,sf}MU߂Hn˜Dr9)sRBu{Rz']9΅S;Stwo.ҼEUD˸,϶pӼdm<]~a.s.&ԩr '/||ʟbC}*1j^0#GOP̣XT2XPT )'O…K%KWdj֬ðrȉ ޻w@ny>lx3tH?Z?ʆYKFM$6mjK={o+qxTL`ܛ;X%3:άw~ڑ,]{wpJ+#K7cx,'ص?%fвUwjԨB&ضmNF "" l=CPbnA5]տs:Lr%ukPN m͎{3'ߓypQ\ MQo9̛T8 \OvZh*yibcw6'Oc>4gg=dחS'Gnx^^Y{.~2U[75XISjĤ 't1$+/Ɛd/_殌V?s5Kv,::͖gMdSOUd7aȨ<#wpeIfAR|e "[9x2]r;N$%ƒk7 >kYEZءO> II %<<՚aNVkD 0vOA_7ߚk"/N\Σ'E2aXNPP==z2pb _|zM9sK1Znܾ^ aEtb(\8d)ȝ-d yiτ]b4:xn~ʕڛЗ5Ү]duli$o""SOO4ˌFc_p\ #(?6(?z} T<%zCf̘2jd/66_x>9ЩS{ f ͉E= cvKV9rXч?[V)K kRfL8Ώ5ua<;PɪÇA;f%ZlldjٰYج?W)UOO\]8z$V; GpcݙPө/y,ҥѾ]K{e>Jٲ77?Bg(Y8՞Ț5##(LEp}KB8|x?4zKz62~,[…K4˵L$+VA)QV#bo~~s~9{>DE&kgDVرѰQmRo}Fo!3ߧڽN[sة,qdɌ7paCXXd2J,i 3:VKRR+n4=m6f5[dvٽ{Ojdԯٳo?J)]%..a#$0j넅3븹QJػ/5W!K>VZ;~ :+!ܑvAtjN""=}{{Vuk0bccVےh>}e+W0nܸ[۵92La3%A͚2fpV-[LpvvfaG͟g'Qp/??_zs4 bEV.]H2ʖ)ʥ S'1^Ϟ4ܪrҿ_D$"rT\_~I""Y.H&liƎE||<=S,Z$/ތ돽մi$+W+մiݷ/wYCDsd†FS 'Wulp!-^CBB"6l۾V;v&(0 \_M)X\ Z 緽Nk =n>ϗӦJTTJ*J|9m{O] p Hd/\L!ϗn]:hɛWq&2]d KLL7ҾczcP 4O{BDDDDc'Y:ߟ*+3q'uq[cFK 9LV-{,ED遇G>bc_l`47RCۻw?'Of@""""9e/js诿ؼek:u} bK&e!!W8z8/{|#npT `ݺel!)8y2s8G>$%%qE\ͯ{gۯ}\p_-MwϠ01,^ShܰsI.:d&&DDDDC'9flun]{ҵgdXߝsCxk{);v Lvl⥩{89R3-Ϟ?f~%)V\Α=KY=NrRbՈL+s:dң/Kl9>Ŵi#"""@,s{RfTgD< Sz߿=fp|Fquk9sO,eM>gks;+<^am]3(Ϗ_jƱ9)ZGUs%#Kcr˜'A??ckS+1oxKxE0 )ْHTL~Gr%}K$則G>yR"""ǞĄ΁. ,ɱٷ'])Z+,I|L|rd9ps&fcL=k 9Drwu|Я$XĘKV^G?P|]=3էK>bqsvG!Ч(I1$OϘCϲyDDDLdŒȹIJyOGyS9U?@9-(^fz^ٍ 'M!D$D7g+bņoy8\$׮ SR<f-q2q2iX_`Whެ}MDDADtt4sUx'd~Kz}ZꝨRDR^o*I􍫄S?ъŞ}Wo'뚼ߦ~`9<ܒՙqj=ܼ=Ayb\b̮=U{gI$YFy'# ܼ*ݾ (T{-兺#~&$}ر# T.Oɒt(ٿ CߩHv9=r9}x}n|d9pF9>"cxqש}txIwCGbphQqӭS9z#GOdoC''%w2 =&D嗅9HɄ`)+Ft"""~lQ2!"""""٢dBDDDDDEɄHrwwcҟr:,Q2!x]oޭcN#"""%}5'J2T<{6HB {Y .u\z0gn/}L!w e+6',8ā^LTlUPA.^ V[eN"iŜ?-ú|JdlU/aaj+"""S~fՕ:w"00 K\/`XQd3'%`NJT"T"leZJlذl#"""r?9|2BNܵÇa42rB'~yCۉd75cƌ9Lf,Ձcرc]PDDDpeNYN$:|… cYQd"7.^KGXNj/vaHjIm'ѶM{:Ƽ93Z=Csrv% 9wȗ;j*鎥|=U)gN SUޭ eJɉ1B~[}E2/D]쒱~-Bw)*O&2Ә3w>hӦNg{Cڵx|7>$$&Pb6~5g}EӗrO`0\V=f *xkq?""""SO&udbAA9so^$!!sx2~!6%K={0#fσ[b/2{|[`?ύ$&&odrbbb7g&s-nϟO|Ρ'j*wxZwzv=oQ?[9w<?\;KDDD~{&O:?ߑ\x ǾADD$ua#ݫU*W 2"sЭ'O< 35xN&۶gie(T ?Lym۶ē垰W#GA_be :8E={Cgj؏5i܈5S"`Xs 2n """@|2R[S!< %))Twbp9$M6Sv-bbcٳw:L ׫okrY6[åKS߫)ʬ6QQ(P~l'ܼ={)^Xv6eVҲE3ܨS&+WNQWrV||Zwg#*zN#"""} IDAT%y~7~Ϝi׶ >ۚkf}mʞ=7/ceys*TFs9$8vxqS ??__O~2i4Iv<"0''T]z5{uߟ OrEN}:SHfd_K}{ ~]DXX6=....L#>qoi/dm k׸p"̙jԨbLgŭe65O\[ډdV_/—_OOxs54}3hxzxH`@n˗+WPtd{"6lLMxxq ujiо 啟:k1bf111zOK.Qehf۶ԯ/N̸3՗s54?¡72br!-Xh_ri+'&Mۚiqƾ.ݺ@~}prrٳ|wN]F?;vdv?"""""ytV 9&űׇ?q'NJ휹3w~Cll~evܱs;vJNݒr*u7Nh4 m{9]r'˕rq9 Ftn9Ϧqg&~5a 1M28,H(lQ2!"""""٢dBDDDDDEɄd %"""""-J&DDDDD$[LH(lq2W 8R3s)L3Fa$ޣDDDDD6O&zN vh4dKpzNP ̷qeNNAH$JcYQd"""""yLDe~ksņсRO޻olN9q{$ >/g~WS?Ov]6|͗*:;v`Sݳ;֮~soϟ$""""?HîݻRu)S4Ŋ~JJڵdzsnx1g?VFuL7nՒs1yL"""""ɻĮ=Sm;vu6jլ@ҥpuq᯿Sˋ'MdeiFM4og@?we1 Ϝm 2k{Rl35ooHhb`vcoR=vv:qff3o[޴mבk"޽~qquՁCޫ/RHg ]PreF#ժ=֭ٺm;+UÃ*+w~fj֬K}z6CB;oZ6'S>KP")]$H(xvL&lŋA([ G9p -!::ěض} Xm6vEd,Yzs#ba_W@EDDD$OWsWvC(n8OᩪU\"۶ߟd^ %? ٱ .ڟ,Gtt 1cq={2,Gʕ< lFgj}Z[G.z$6LJduL[DFF퍓%DDDDDng&vKbEySlٺ~|mTX'=a_Rt-@BBl""~;x"iڶiͅ  `mBpyv޲Ǝ``谑 :]bBEDBDDDD,O'&S4'Oulݶ~|˖m4_St}bӖҬiF#)B;j4|9gзwO)P۵M7]wӶMda|yٵ;+KbחfMӣ[W(Pݻue )""""M\\\7n`1i݂ ,]+VٷfqSl-^_Lam;Ǭ6;vtDHȕt4Zl% ,mlÇ7y/^bwSDDDD$5jĭw4[M]8v ^8$~\JSp" ؚҌg}3I){xkdٙ+WlyIHF~fr YnZK'0:q <{c 0WxvK'>}8FK"""""'K"bYZlm`t2`4+-Z%""""Le9FM28 H(lQ2!"""""٢dBDDDDDEɄd %"""""-J&DDDDD$[LH(lq2W 8R3s)L3Fa$ޣDDDDD6O&zN vh4dKpzNP ̷qeNNAH$JcYQd"""""yLDe~ksņS&ԼYZlACr:q@iv&&4^*ĘP|F6]:57VX~MMߝW96.~2WWW4GDD$ժ=uԦV'w^æk߉\y)W,sԫˉ'sFڶi;eN}0g|5ڐa)RL*ٰaS???^ +Vje6zqqqM9s,%J<t5A@`V 1k\=b`խ͇&?hܨ!=w@;~'O!44@~) /.PQQ/T~jefM4h0a&&9V IFs'*2O|ξ}qrr>hذ>lڴ_}Cbb"KbsǾaw 4r uy¨1cxy`:uFXX+syڵD>Q:kHw iؠ>=zH6ۜ:u b`{{S#Ӷ]G:<ߕYeCDDDD/{ʊlDDDp!+ xWCCOŋLhޔ`2Eǒ˩]&_~>o4 LԩS~,&&??_{L2łs_kג6pMz9s׆ {.ѝ֬嫯d6ϰ3899aX싩{ 1|/9xP1HȳɄM7dkC Ԩ^-[c6q=_|_7kxzzALl,AX6¯%?)ȓ1bP^~uΝ`K~n?4,OwSm_4g4ܜMy/TwǍ[.'™4y wIl63BGh9ҌCDDDDrF]ԠA=Μ=DZclj?V6[7.odsMGDd$%J <+ O^~EX,C|\!mvӲ߶;طsgLLt VƦ[ms|}e+W0nܸ[~9. εR#̗N`t]EDDDD$s'{ӌQxgی|$קhp|IDDDD$Wrd`IPl6+V-EYɀ`Fb:O&故 'dq:=lQ2!"""""٢dBDDDDDEɄd %"""""-J&DDDDD$[LH(lQ2!"""""dp *fSf`IGmLx@%$Zht;x o'"""""˜Je9H:fޣDDDDD6쉄[2U?V ]L7{&5bܽy&jقh""""7d⎤11yHT˞}y"""]t~}OH r.ZeJ"""""9O&е{o^U3lh=5˧m1cqwwR ;-Ο?ȳɄdjړgggFx+ʹ?#.d6ӡC{:uxWWWvͧS>'&661ٶ}gΜd?p'''^Ӌ ̦M[7$&&ȗEPxp1&X՟F^= j`"f͙ 3{Qp)6FF ٽ+ |k\f3qqq̞3zukժnJ֮^A>r OE̜5)8,]N5_s9ֹs9s,>Mx5h֤1?3._&l 4oޔտsXm6_Hp'&""""yJ]???ztBGKb|}|LV'ukx{{~;w2jXJ,S?'5{Y?^ڇmev ףy&cϥ qjh6U:ujُ[ޣLb옑\xFd6ӶM+6/!!W(_n>} [W_ͷΤSؽ{O qe "2**XO+LjCyA;w #"" ߧ |tc9חа0 4k$En]^O<ߑ?7lT~?U*SjV\E^=ˑSddmzt늛 {_!E>@M񱗯]=w% '''J.eu+xL43/ưѥp.mV'OqI~-^^پcL.S}GFF 4^}`00e$|}|09k}OlÇ7(,¶;طsgLLt VƦ[?3.|5s8v8 ơ) :"HJJbm䊈@*u7nÆ0d2,Yftuuu1ZV$Wh4zl6/k,+n;Zg[9.3gn6Mq)[I]ժU2G #`gK; j^X,!-!666j-ӧm^^^6[rlƍҝ9CN \+5|F4n{s=G?ٛf«D<R;\>%\ %wC٬X-TeF'F1WUoa `p¨Is%"""""-J&DDDDD$[LH(lQ2!"""""٢dBDDDDDEɄdCߴh4RlY<==r:q1;~՚ӡL-[q՜E@P`eʖc9˜<==HݕWa?:ǥdBDDDDDEɄd %{1{챜CDDDDȡ/ +Q#Gڵ;#R2!9橧2t`&~C ))%IrĿĿî]tg 2ቈH&<DXr9^ӡH&ܞHK H@$G$*zN!Yr q|~DӦM(T [m5:e˖aԈ<\a۶୷ߡH|ݷ_Z5kGG[cߠj*q9y=.]@PV+/ag+/D&Mpvvf2ILLL3$=3!"""; B |Uƍ{)z5khҴ9-[姟~Nև }^GNA0ͬ]:>Of-N޽m>qqtЉ0w<zAʕڭ;uHGo"""""ds9$$zgϝQ<$$$pԩd.\ba94l^yZlݶ" ((ʕ+1yg0!$ mZDll .~EDDDD$ȵ˜:vx$.]aIOS}bbbۿ^~ k䄏}{tl6| 00hSȘQ1lNNX̖L"""""[dSnoc0L w蔬lf9̞3͛ShԤ<00 .CEb޸w8w<DRRϵoO&F 666x߄ر3EiW?GQ8\饗_Cμе;/tΊ+Yz5_~5E݊+fѣ8;;_7،FIDATwoOw|| l6GV-m.]_3Axx͍%KxR^ߏ" PˋRT,yEZ""""rYˍ)6nԈ>j%::^^f<ͲI¤?Iٙ%Khe;v%;fZW2|Ĩ, Ogd)P"!"""<0ĝ0 9BoB1zH&~ \DɄ]vط8vXG#""""Y!!TV=DNjN"""""LH(l{&DDDDD`[W3u虉r: qA {%Eu{g cD:昂KFlQow)aNJ)|PdžDDDDDDŋaa79˲'@3LQ&b4u2ԆaMDDDDDt`ea+ """""꒜D]]BGuuu:tzlDaiΏFPLjND8֩TJδ{KnGgy #nNC;"k'""""*9y ȼ"oUok2QSSkjjP[[h4_AVtQ,7l3yL=3>pSow ZԴ;wk|OQ蚫 Fá1i.u =6{X ]j8*㧞:%%~䱞mۘ6m*v㤓׹N9'u-L|};nf .SH?O8Q9kW_XoNOuL?ͩMz*l7lĜ3od_o+G[ո0tP\!`Y7Dl.+qA)M^ŽW Lvڗ<&N@ccFxpג{tses$T7[W;4\r?_~pfQ_Ő!%X_0q(_;D,րSNe?.[7~3xp>~'ǒw"2p /R`Ə;3g ?CDDDD[9g]m1cDr:ufZn=?K꫽{<\t0`@,vArdl .7DL< 0i\Ĭ9wq'f;[X*|˯sO>-7KH$~0?޽{1 ._[?.] y֭ۀy_9眇X]t!٪bFx/}_4jH =lzUR)[3> 2Ǎ+hJ$|8}tضS;: J1@ϿO>Jk@k7z#}0:R4x!C Y""""*}zӜY3G Ԅ?>P `HMMM4}e= C``e%ع>޽նTYY?]G"8z$L29 }jپu? \ Цg=7QqwnA= YCt޳N> ^y l\P(dWص+R) <Jir`YCCF*[+/> lނ2>vn|}]w29giϢb@NQÜMO>݆?܌Ϛb>ߎcdsתݻ1j( C|s'}}\yp%%⧗una81r!09bD̚q6@19{nuhOk?`QxRb8ӳǦR)$I}ԑp*=YQabXY=~_ !~,ߡn۶瞇~ ^ _. '=={%paþ;7{^:/ O>xU8d}_-~{ݸnByiZf͚gПɓ&bO`iw ̜q}fnxbe+pϯSO\כ`BXJm۶R*df:3^o{cjuW떳`h>gqx:<kSDDDD$rj4qnǗ99v !*I'aT*%ᰊF*H$;X[}e1c}}tx;0[՚rS_ށ9:zzaÄ./ JfG)`〉DDDDDTE&' a`haBȈ.=;+DDDDD% LRʂ"""""*,!Bh0 ruIdZk<="""""բ:ѭ +DDDDD%]ij2ᏽ """"Ça:Lj> ݡ|$ T.H$:=Ng\N8􈈈OT^Lض?JSlMչGWaȑFԮD"㚖^^7{)„d20溂i~eB+PJa˖{ i """CV'r uYYvG۶x:>s&~&ѡP({Ι` """"*^a uwD8uuum˲i!yZJ0ADDDDT JNOrG `0nW& ОFu="""""J)%TBmY+eѰ555ZG" 4ϛB:x<D:a2MS)&iU 4u<?h9k]L4Md2Z)%MӔ]izRJ}EH$4bmD"ڦӜLdR[ղ*BdxJ)yKXm֡PH!H$;J]L8KKKվ *) D ?Lx,RRJ8ڷ0u^lŸ7NLFie۶RJL&1 t"""""*6BkxAO)%J&ʶm8NGU O畉#D"u]YZZJKK%O,ZӉF(ERDDDDDk4"hD H)t:sGKue$QT%t:()zMMX~ŠA={,V&A˲Jue!4 0B)e)֭b(K] """Cy$Qʮ`Rj0RJ/n H !RJ2mfNa֭[u8SNU-:PTUUh4jضmu]Dz,[)3i iE/""""*b]mÄ_k)$i?Oµ,D&TJ4H׫v0qqwFEG q,uM˲ )aYZ )ᇅ@ 6A)śv""""6!0dr_)۶%+02mg}Og+Wln\a TWWZ@}}۷o8¾Ҋ4 CLPJ ۶ږ=Dkń 7_#a֮ SR@ ,HTWW+W՟|o<ܩVPכ` i뺆mۆRH)RJ8#ZQ1h۟Naڶm庮?T6dQvB(DN,dQ: m$Dz%LQ8,ġj:W3zQ"""""c """"""""""C+N~IENDB`QCodeEditor/example/include/0000755000175000017500000000000014277233147014716 5ustar dimadimaQCodeEditor/example/include/MainWindow.hpp0000644000175000017500000000261714277233147017511 0ustar dimadima#pragma once // Qt #include // Required for inheritance #include #include #include class QVBoxLayout; class QSyntaxStyle; class QComboBox; class QCheckBox; class QSpinBox; class QCompleter; class QStyleSyntaxHighlighter; class QCodeEditor; /** * @brief Class, that describes demo main window. */ class MainWindow : public QMainWindow { Q_OBJECT public: /** * @brief Constructor. * @param parent Pointer to parent widget. */ explicit MainWindow(QWidget* parent=nullptr); private: void loadStyle(QString path); QString loadCode(QString path); void initData(); void createWidgets(); void setupWidgets(); void performConnections(); QVBoxLayout* m_setupLayout; QComboBox* m_codeSampleCombobox; QComboBox* m_highlighterCombobox; QComboBox* m_completerCombobox; QComboBox* m_styleCombobox; QCheckBox* m_readOnlyCheckBox; QCheckBox* m_wordWrapCheckBox; QCheckBox* m_parenthesesEnabledCheckbox; QCheckBox* m_tabReplaceEnabledCheckbox; QSpinBox* m_tabReplaceNumberSpinbox; QCheckBox* m_autoIndentationCheckbox; QCodeEditor* m_codeEditor; QVector> m_codeSamples; QVector> m_completers; QVector> m_highlighters; QVector> m_styles; }; QCodeEditor/example/resources/0000755000175000017500000000000014277233147015305 5ustar dimadimaQCodeEditor/example/resources/code_samples/0000755000175000017500000000000014277233147017743 5ustar dimadimaQCodeEditor/example/resources/code_samples/xml.xml0000644000175000017500000000375014277233147021272 0ustar dimadima Joe Bob Trenton Literary Review Honorable Mention 12 Mary Bob Selected Short Stories of Mary Bob Britney Bob 55 2.50 Toni Bob B.A. Ph.D. Pulitzer Still in Trenton Trenton Forever 6.50

It was a dark and stormy night.

But then all nights in Trenton seem dark and stormy to someone who has gone through what I have.

Trenton misery
Who's Who in Trenton Robert Bob
QCodeEditor/example/resources/code_samples/json.json0000644000175000017500000000026114277233147021606 0ustar dimadima{ "root": { "some array": [1, 2, 3], "some string": "Hello world", "some dbl": 2.121323, "some bool": true, "some null": null } }QCodeEditor/example/resources/code_samples/lua.lua0000644000175000017500000002744114277233147021237 0ustar dimadima-- Two dashes start a one-line comment. --[[ Adding two ['s and ]'s makes it a multi-line comment. --]] ---------------------------------------------------- -- 1. Variables and flow control. ---------------------------------------------------- num = 42 -- All numbers are doubles. -- Don't freak out, 64-bit doubles have 52 bits for -- storing exact int values; machine precision is -- not a problem for ints that need < 52 bits. s = 'walternate' -- Immutable strings like Python. t = "double-quotes are also fine" u = [[ Double brackets start and end multi-line strings.]] t = nil -- Undefines t; Lua has garbage collection. -- Blocks are denoted with keywords like do/end: while num < 50 do num = num + 1 -- No ++ or += type operators. end -- If clauses: if num > 40 then print('over 40') elseif s ~= 'walternate' then -- ~= is not equals. -- Equality check is == like Python; ok for strs. io.write('not over 40\n') -- Defaults to stdout. else -- Variables are global by default. thisIsGlobal = 5 -- Camel case is common. -- How to make a variable local: local line = io.read() -- Reads next stdin line. -- String concatenation uses the .. operator: print('Winter is coming, ' .. line) end -- Undefined variables return nil. -- This is not an error: foo = anUnknownVariable -- Now foo = nil. aBoolValue = false -- Only nil and false are falsy; 0 and '' are true! if not aBoolValue then print('twas false') end -- 'or' and 'and' are short-circuited. -- This is similar to the a?b:c operator in C/js: ans = aBoolValue and 'yes' or 'no' --> 'no' karlSum = 0 for i = 1, 100 do -- The range includes both ends. karlSum = karlSum + i end -- Use "100, 1, -1" as the range to count down: fredSum = 0 for j = 100, 1, -1 do fredSum = fredSum + j end -- In general, the range is begin, end[, step]. -- Another loop construct: repeat print('the way of the future') num = num - 1 until num == 0 ---------------------------------------------------- -- 2. Functions. ---------------------------------------------------- function fib(n) if n < 2 then return 1 end return fib(n - 2) + fib(n - 1) end -- Closures and anonymous functions are ok: function adder(x) -- The returned function is created when adder is -- called, and remembers the value of x: return function (y) return x + y end end a1 = adder(9) a2 = adder(36) print(a1(16)) --> 25 print(a2(64)) --> 100 -- Returns, func calls, and assignments all work -- with lists that may be mismatched in length. -- Unmatched receivers are nil; -- unmatched senders are discarded. x, y, z = 1, 2, 3, 4 -- Now x = 1, y = 2, z = 3, and 4 is thrown away. function bar(a, b, c) print(a, b, c) return 4, 8, 15, 16, 23, 42 end x, y = bar('zaphod') --> print zaphod nil nil -- Now x = 4, y = 8, values 15..42 are discarded. -- Functions are first-class, may be local/global. -- These are the same: function f(x) return x * x end f = function (x) return x * x end -- And so are these: local function g(x) return math.sin(x) end local g; g = function (x) return math.sin(x) end -- the 'local g' decl makes g-self-references ok. -- Trig funcs work in radians, by the way. -- Calls with one string param don't need parens: print 'hello' -- Works fine. ---------------------------------------------------- -- 3. Tables. ---------------------------------------------------- -- Tables = Lua's only compound data structure; -- they are associative arrays. -- Similar to php arrays or js objects, they are -- hash-lookup dicts that can also be used as lists. -- Using tables as dictionaries / maps: -- Dict literals have string keys by default: t = {key1 = 'value1', key2 = false} -- String keys can use js-like dot notation: print(t.key1) -- Prints 'value1'. t.newKey = {} -- Adds a new key/value pair. t.key2 = nil -- Removes key2 from the table. -- Literal notation for any (non-nil) value as key: u = {['@!#'] = 'qbert', [{}] = 1729, [6.28] = 'tau'} print(u[6.28]) -- prints tau -- Key matching is basically by value for numbers -- and strings, but by identity for tables. a = u['@!#'] -- Now a = 'qbert'. b = u[{}] -- We might expect 1729, but it's nil: -- b = nil since the lookup fails. It fails -- because the key we used is not the same object -- as the one used to store the original value. So -- strings & numbers are more portable keys. -- A one-table-param function call needs no parens: function h(x) print(x.key1) end h{key1 = 'Sonmi~451'} -- Prints 'Sonmi~451'. for key, val in pairs(u) do -- Table iteration. print(key, val) end -- _G is a special table of all globals. print(_G['_G'] == _G) -- Prints 'true'. -- Using tables as lists / arrays: -- List literals implicitly set up int keys: v = {'value1', 'value2', 1.21, 'gigawatts'} for i = 1, #v do -- #v is the size of v for lists. print(v[i]) -- Indices start at 1 !! SO CRAZY! end -- A 'list' is not a real type. v is just a table -- with consecutive integer keys, treated as a list. ---------------------------------------------------- -- 3.1 Metatables and metamethods. ---------------------------------------------------- -- A table can have a metatable that gives the table -- operator-overloadish behavior. Later we'll see -- how metatables support js-prototypey behavior. f1 = {a = 1, b = 2} -- Represents the fraction a/b. f2 = {a = 2, b = 3} -- This would fail: -- s = f1 + f2 metafraction = {} function metafraction.__add(f1, f2) sum = {} sum.b = f1.b * f2.b sum.a = f1.a * f2.b + f2.a * f1.b return sum end setmetatable(f1, metafraction) setmetatable(f2, metafraction) s = f1 + f2 -- call __add(f1, f2) on f1's metatable -- f1, f2 have no key for their metatable, unlike -- prototypes in js, so you must retrieve it as in -- getmetatable(f1). The metatable is a normal table -- with keys that Lua knows about, like __add. -- But the next line fails since s has no metatable: -- t = s + s -- Class-like patterns given below would fix this. -- An __index on a metatable overloads dot lookups: defaultFavs = {animal = 'gru', food = 'donuts'} myFavs = {food = 'pizza'} setmetatable(myFavs, {__index = defaultFavs}) eatenBy = myFavs.animal -- works! thanks, metatable -- Direct table lookups that fail will retry using -- the metatable's __index value, and this recurses. -- An __index value can also be a function(tbl, key) -- for more customized lookups. -- Values of __index,add, .. are called metamethods. -- Full list. Here a is a table with the metamethod. -- __add(a, b) for a + b -- __sub(a, b) for a - b -- __mul(a, b) for a * b -- __div(a, b) for a / b -- __mod(a, b) for a % b -- __pow(a, b) for a ^ b -- __unm(a) for -a -- __concat(a, b) for a .. b -- __len(a) for #a -- __eq(a, b) for a == b -- __lt(a, b) for a < b -- __le(a, b) for a <= b -- __index(a, b) for a.b -- __newindex(a, b, c) for a.b = c -- __call(a, ...) for a(...) ---------------------------------------------------- -- 3.2 Class-like tables and inheritance. ---------------------------------------------------- -- Classes aren't built in; there are different ways -- to make them using tables and metatables. -- Explanation for this example is below it. Dog = {} -- 1. function Dog:new() -- 2. newObj = {sound = 'woof'} -- 3. self.__index = self -- 4. return setmetatable(newObj, self) -- 5. end function Dog:makeSound() -- 6. print('I say ' .. self.sound) end mrDog = Dog:new() -- 7. mrDog:makeSound() -- 'I say woof' -- 8. -- 1. Dog acts like a class; it's really a table. -- 2. function tablename:fn(...) is the same as -- function tablename.fn(self, ...) -- The : just adds a first arg called self. -- Read 7 & 8 below for how self gets its value. -- 3. newObj will be an instance of class Dog. -- 4. self = the class being instantiated. Often -- self = Dog, but inheritance can change it. -- newObj gets self's functions when we set both -- newObj's metatable and self's __index to self. -- 5. Reminder: setmetatable returns its first arg. -- 6. The : works as in 2, but this time we expect -- self to be an instance instead of a class. -- 7. Same as Dog.new(Dog), so self = Dog in new(). -- 8. Same as mrDog.makeSound(mrDog); self = mrDog. ---------------------------------------------------- -- Inheritance example: LoudDog = Dog:new() -- 1. function LoudDog:makeSound() s = self.sound .. ' ' -- 2. print(s .. s .. s) end seymour = LoudDog:new() -- 3. seymour:makeSound() -- 'woof woof woof' -- 4. -- 1. LoudDog gets Dog's methods and variables. -- 2. self has a 'sound' key from new(), see 3. -- 3. Same as LoudDog.new(LoudDog), and converted to -- Dog.new(LoudDog) as LoudDog has no 'new' key, -- but does have __index = Dog on its metatable. -- Result: seymour's metatable is LoudDog, and -- LoudDog.__index = LoudDog. So seymour.key will -- = seymour.key, LoudDog.key, Dog.key, whichever -- table is the first with the given key. -- 4. The 'makeSound' key is found in LoudDog; this -- is the same as LoudDog.makeSound(seymour). -- If needed, a subclass's new() is like the base's: function LoudDog:new() newObj = {} -- set up newObj self.__index = self return setmetatable(newObj, self) end ---------------------------------------------------- -- 4. Modules. ---------------------------------------------------- --[[ I'm commenting out this section so the rest of -- this script remains runnable. -- Suppose the file mod.lua looks like this: local M = {} local function sayMyName() print('Hrunkner') end function M.sayHello() print('Why hello there') sayMyName() end return M -- Another file can use mod.lua's functionality: local mod = require('mod') -- Run the file mod.lua. -- require is the standard way to include modules. -- require acts like: (if not cached; see below) local mod = (function () end)() -- It's like mod.lua is a function body, so that -- locals inside mod.lua are invisible outside it. -- This works because mod here = M in mod.lua: mod.sayHello() -- Says hello to Hrunkner. -- This is wrong; sayMyName only exists in mod.lua: mod.sayMyName() -- error -- require's return values are cached so a file is -- run at most once, even when require'd many times. -- Suppose mod2.lua contains print('Hi!'). local a = require('mod2') -- Prints Hi! local b = require('mod2') -- Doesn't print; a=b. -- dofile is like require without caching: dofile('mod2.lua') --> Hi! dofile('mod2.lua') --> Hi! (runs it again) -- loadfile loads a lua file but doesn't run it yet. f = loadfile('mod2.lua') -- Call f() to run it. -- loadstring is loadfile for strings. g = loadstring('print(343)') -- Returns a function. g() -- Prints out 343; nothing printed before now. --]] ---------------------------------------------------- -- 5. References. ---------------------------------------------------- --[[ I was excited to learn Lua so I could make games with the Löve 2D game engine. That's the why. I started with BlackBulletIV's Lua for programmers. Next I read the official Programming in Lua book. That's the how. It might be helpful to check out the Lua short reference on lua-users.org. The main topics not covered are standard libraries: * string library * table library * math library * io library * os library By the way, this entire file is valid Lua; save it as learn.lua and run it with "lua learn.lua" ! This was first written for tylerneylon.com. It's also available as a github gist. Tutorials for other languages, in the same style as this one, are here: http://learnxinyminutes.com/ Have fun with Lua! --]]QCodeEditor/example/resources/code_samples/shader.glsl0000644000175000017500000000275614277233147022106 0ustar dimadimaprecision mediump float; uniform vec2 resolution; uniform float time; vec3 trans(vec3 p) { return mod(p, 8.0)-4.0; } float distanceFunction(vec3 pos) { return length(trans(pos)) - 1.5; } vec3 getNormal(vec3 p) { const float d = 0.0001; return normalize ( vec3 ( distanceFunction(p+vec3(d, 0.0, 0))-distanceFunction(p+vec3(-d,0.0,0.0)), distanceFunction(p+vec3(0.0, d, 0.0))-distanceFunction(p+vec3(0.0,-d,0.0)), distanceFunction(p+vec3(0.0, 0.0, d))-distanceFunction(p+vec3(0.0,0.0,-d)) ) ); } void main() { vec2 pos = (gl_FragCoord.xy*2.0 -resolution) / resolution.y; vec3 camPos = vec3(0.0, 0.0, 3.0); vec3 camDir = vec3(0.0, 0.0, -1.0); vec3 camUp = vec3(0.0, 1.0, 0.0); vec3 camSide = cross(camDir, camUp); float focus = sin(time)*1.5+4.0; mat3 lense = mat3(1.,0.,0., 0.,888989898989898989,0., 0.,0.,1.); vec3 pos3 = vec3(pos,camDir.z*10.); camDir = vec3( camDir.x, camDir.y, camDir.z); camDir*=normalize(dot(camDir,pos3)); vec3 rayDir = normalize(camSide*pos.x + camUp*pos.y + camDir*focus); float t = 0.0, d; vec3 posOnRay = camPos; for(int i=0; i<64; ++i) { d = distanceFunction(posOnRay); t += d; posOnRay = camPos + t*rayDir; } vec3 normal = getNormal(posOnRay); if(abs(d) < 0.001) { gl_FragColor = vec4(normal, 1.0); }else { gl_FragColor = vec4(0.0); } }QCodeEditor/example/resources/code_samples/python.py0000644000175000017500000000030614277233147021635 0ustar dimadimaimport numpy def sqr_array(x): ''' Documentation for sqr_array. A multi line string!' ''' return np.array(x)**2 s = 'this is a string' d = 10 x = np.arange(0,d,d/10) y = sqr_array(x) QCodeEditor/example/resources/code_samples/cxx.cpp0000644000175000017500000000035314277233147021252 0ustar dimadima#include int main() { int n, sum = 0; std::cout << "Enter a positive integer: "; std::cin >> n; for (int i = 1; i <= n; ++i) { sum += i; } std::cout << "Sum = " << sum; return 0; }QCodeEditor/example/resources/demo_resources.qrc0000644000175000017500000000054514277233147021036 0ustar dimadima styles/drakula.xml code_samples/cxx.cpp code_samples/shader.glsl code_samples/xml.xml code_samples/json.json code_samples/lua.lua code_samples/python.py QCodeEditor/example/resources/styles/0000755000175000017500000000000014277233147016630 5ustar dimadimaQCodeEditor/example/resources/styles/drakula.xml0000644000175000017500000000760114277233147021001 0ustar dimadima