From 06247f3fb291519eadcd9ce5360b31d44288e369 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Wed, 27 Jan 2016 11:19:44 +0300 Subject: [PATCH] Syntax highlight for DML and JSON in editor --- src/dlangide/ui/dsourceedit.d | 19 ++++++++++++++++++- src/dlangide/ui/wspanel.d | 9 ++++++++- src/dlangide/workspace/project.d | 24 ++++++++++++++++++++++++ views/res/hdpi/hdpi_text-dml.png | Bin 0 -> 991 bytes views/res/hdpi/hdpi_text-json.png | Bin 0 -> 896 bytes views/res/hdpi/hdpi_text-other.png | Bin 0 -> 807 bytes views/res/mdpi/text-dml.png | Bin 0 -> 637 bytes views/res/mdpi/text-json.png | Bin 0 -> 642 bytes views/res/mdpi/text-other.png | Bin 0 -> 598 bytes views/resources.list | 6 ++++++ 10 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 views/res/hdpi/hdpi_text-dml.png create mode 100644 views/res/hdpi/hdpi_text-json.png create mode 100644 views/res/hdpi/hdpi_text-other.png create mode 100644 views/res/mdpi/text-dml.png create mode 100644 views/res/mdpi/text-json.png create mode 100644 views/res/mdpi/text-other.png diff --git a/src/dlangide/ui/dsourceedit.d b/src/dlangide/ui/dsourceedit.d index c23a469..a1c4ff4 100644 --- a/src/dlangide/ui/dsourceedit.d +++ b/src/dlangide/ui/dsourceedit.d @@ -9,6 +9,7 @@ import dlangui.widgets.menu; import dlangui.widgets.popup; import dlangui.widgets.controls; import dlangui.widgets.scroll; +import dlangui.dml.dmlhighlight; import ddc.lexer.textsource; import ddc.lexer.exceptions; @@ -106,7 +107,19 @@ class DSourceEdit : SourceEdit, EditableContentMarksChangeListener { } @property bool isDSourceFile() { - return filename.endsWith(".d") || filename.endsWith(".dd") || filename.endsWith(".dh") || filename.endsWith(".ddoc"); + return filename.endsWith(".d") || filename.endsWith(".dd") || filename.endsWith(".dd") || filename.endsWith(".di") || filename.endsWith(".dh") || filename.endsWith(".ddoc"); + } + + @property bool isJsonFile() { + return filename.endsWith(".json") || filename.endsWith(".JSON"); + } + + @property bool isDMLFile() { + return filename.endsWith(".dml") || filename.endsWith(".DML"); + } + + @property bool isXMLFile() { + return filename.endsWith(".xml") || filename.endsWith(".XML"); } override protected MenuItem getLeftPaneIconsPopupMenu(int line) { @@ -151,6 +164,10 @@ class DSourceEdit : SourceEdit, EditableContentMarksChangeListener { void setSyntaxSupport() { if (isDSourceFile) { content.syntaxSupport = new SimpleDSyntaxSupport(filename); + } else if (isJsonFile) { + content.syntaxSupport = new DMLSyntaxSupport(filename); + } else if (isDMLFile) { + content.syntaxSupport = new DMLSyntaxSupport(filename); } else { content.syntaxSupport = null; } diff --git a/src/dlangide/ui/wspanel.d b/src/dlangide/ui/wspanel.d index df18880..1b7b529 100644 --- a/src/dlangide/ui/wspanel.d +++ b/src/dlangide/ui/wspanel.d @@ -163,7 +163,14 @@ class WorkspacePanel : DockWindow { p.objectParam = child; addProjectItems(p, child); } else { - TreeItem p = root.newChild(child.filename, child.name, "text-d"); + string icon = "text-other"; + if (child.isDSourceFile) + icon = "text-d"; + if (child.isJsonFile) + icon = "text-json"; + if (child.isDMLFile) + icon = "text-dml"; + TreeItem p = root.newChild(child.filename, child.name, icon); p.intParam = ProjectItemType.SourceFile; p.objectParam = child; } diff --git a/src/dlangide/workspace/project.d b/src/dlangide/workspace/project.d index 5fc31ef..d20e254 100644 --- a/src/dlangide/workspace/project.d +++ b/src/dlangide/workspace/project.d @@ -90,6 +90,30 @@ class ProjectItem { return cast(ProjectSourceFile)this; return null; } + + @property bool isDSourceFile() { + if (isFolder) + return false; + return filename.endsWith(".d") || filename.endsWith(".dd") || filename.endsWith(".dd") || filename.endsWith(".di") || filename.endsWith(".dh") || filename.endsWith(".ddoc"); + } + + @property bool isJsonFile() { + if (isFolder) + return false; + return filename.endsWith(".json") || filename.endsWith(".JSON"); + } + + @property bool isDMLFile() { + if (isFolder) + return false; + return filename.endsWith(".dml") || filename.endsWith(".DML"); + } + + @property bool isXMLFile() { + if (isFolder) + return false; + return filename.endsWith(".xml") || filename.endsWith(".XML"); + } } /// Project folder diff --git a/views/res/hdpi/hdpi_text-dml.png b/views/res/hdpi/hdpi_text-dml.png new file mode 100644 index 0000000000000000000000000000000000000000..a1e72d14caea09678683422dd031b1dc94552b4b GIT binary patch literal 991 zcmV<510ei~P)f0GuH+Sn$v>0JZ1R6^TTFU+OV8>Lbdv4y?aKcF{dg>hglcw-k9 zY_Hn-M<@g@1fx~aN}+*@Vr;u+i$wyZn53U3G1EzM_F~S&%<5`W`}M*wbKZH+*YiH- zd5?m$hK2?=z{<+XFVa=b?phwe>2%Hm=(@fE;NXBwDf>PHAcT0arxPklkNkXaC=e*m zb5;3|;aj%==kmopz- z7rL%n!wTS{d^mJEV6$<_fu0^yxc+|k4zJf+`ae563&5Lbl;h0PXGVR9Alq@9ga49&qx+30uF@!60Fv?f7v38XFr; z4XLTw9R!B_es09$dyl~A=qLbveSHA@)zVVZ11sNF&Yeyt?xRNmn2{V9mIwfxzk8Qs zvj4UhP;T8)c-(F`>2$i}FBc?$-zFzXrBZZ$Zb}kXTnj8K77Avd!=5c6wSHxF z6@cmKX`8m9S(;97#tk@ z?+^kYlTIrDkx1mpHC27u(b4e=U~X=1e|6xRsy?jg3OHK$h7=B4OTaYHMvsEH5wHa=yO0 zssJp!e?O&Z+Egl;{1YIVN)`6C7HFC_^;363%dA@9P|Q$6o`y^&1Hi(XZU7 zF)=Z%X<8(eO#UG`vGu(LIQC%Yk)7&*jh%~&ivYAp4KG-VD3Pd=_kN$xrvN;9_%Nbr zS|pK3T$gvjt?ewpaZo$|3IUJD^IGokY=w*aB>TUWJ2xs>z=79-e*tbNlZ0sOW;p-= N002ovPDHLkV1n*Nz$X9z literal 0 HcmV?d00001 diff --git a/views/res/hdpi/hdpi_text-json.png b/views/res/hdpi/hdpi_text-json.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce45dac0bf98555100b79cf6d23facbd08e53f3 GIT binary patch literal 896 zcmV-`1AqL9P) zLR}TA)kP z8^Heley13^LwPL&V6j*>08~|t0+_gEla9SV1kg0?$F(jfNqyq=b44IT^#_iSPZehB$LTgz5q_A^UQTBiUW@Y2fhKQM@Il0 zCX-mKRsgDNYKjVam`sw(=1^jNm|DUmwZCLjW8O2LRD%R7WJ2BX_)7;OFXUK@;o_ zN5QwPt?fTUAkTqxI*lau@oj7Cxve%Yo)26uGMNmSOa_3)#ztL3s;kR~z)3wQMjuL6 z!l|h#0EUN$+1c3vz-F`YvA6f!V9%D9357xhUx1k4z&(Lpb91vn2}?%c$?WX8in4X>nU}$hqzt9O* zX9Obo{+^qg17Koe;$#R7AQ6vC03MI$>$og0b#!$60$5*PzgZm^m*u6B5EvaDHSDRD z=Y;rHh5C8DUcM0KiQU~@!=4|6!xF&e*4B!mC@Z00@C`sP6w2P{S)eG&N?CLuolfhSit`{Xx*?HB z0I<2asR7*Y?v?-+78cx!qIg2V;0wWt)I|xHuAy?zWp%*7PM^;QK&#O3Y+exs5>?{f z?{qpPfG_j&9z{_+fk5D;xVEK=Nx*blm7hYuZnysy6+S94xj$n5ny5ToN&>fj7W@T! Ws6hSrZEC^*0000I0<=j) zK~z}7)s{<38&MR1zloBG8Z|-Uz6MuP>L$yU?gJv~k8tB^9B5s4r8~91q)@F?T17|} zr3H)G1cL}7=4sN&#K~iB7js7(4Xw65lCznaGiUBSkMEu{3Q|T!MuGr^LgBeo^>V+` z1W;8q1z=fL8NkOAi*n`uC4dlO_dz#Ql(@Y8*by1HTIZgtFIJY90hphkCzVP$#yyV7 za41CS{G8#TApk0s3bMYKrg_5_AQFkR-KV1%cr6+D0$^QS08lec)Ib1$zW)AOEm|{8 zY}@we27*DCfhno_&~XfS@}M-B|}08r-$_Qbr}PztE&La&CPLgasogw7{oA) zw)GAU4g!$R=PzvmDw2U`V`E*)fZb|2hCZ*aLiYMXu?RpSk?`nS@)`&P1VAhnQvgOs zM`Ln{Z=KD++S(cbvokZ7WCJv1M%?qgv9STb($doPB?Lg#Fcg4fGWmH?)3zrjCcXn4 z92`6@1B;rreWwg8EG&3xDqJSyvn6}|{{Ft_yHcqn0CHz%3P9%Q=&Pn_JBDGb03075 z+mCt*G)>$2KL%!J0mx>v&Y#V|fF~2Dr>CBppBIY?K>F}-PuKOmd@lD6AeYa#9<>kX zy1sXBvjD&+=RrfBhHAA6Ksuck052vd6@aa+t%R=Y$$T#NMlw8wUUY0t!h) zK~y-)m6P8~Q*ju^KSx(n3_C;gZU-->7fO=E$eW}a3xp{256R0eLleTFVA{Rcf*1Y; zUCyu+3X*U`1BW!Xv*|`>b35Osi`-$yR@8Iz{k|`}&-?3nEr5Z6fg8nQ@fHx_-_VRk zqhIRv`dQ0yPyY#EmbQ%D0Iyb7csMhISFaQ4?&hX#b5<^MEfNX&1_uX&m=^9!QqA+U z7>{c)9uG3L{)_Rrs+CG$1CIc@+F9PNtpPB*xyh2_@P2z6fF;KPAeYMlP%4*$m=M9! zg#`faB$EK#otg?wZg_YYfS7G}CRn?y;M3k70GWdW03L5`0q{Ma2f*{ZzgI9ZISD{w zWF%x?4v*g6-p&N6R4VBC!Nvw3cXj|cJUk4&t(gE=ZCiK;V0<5|>ld$#q3F7#(`jT3 zzA^Ol^eCB3T0=uaN#H|hjj2>hx#MGfJ33M}o7L{_u9laV+x26rm5OdpOgtMOAMg52 z2a;rbU%v0F(P*ezt!jOJU6SOwuKBvZud%VQ=Z@n9A_{4Lb#;~b`FZmBJbitA7-Kj& zIRQ}Fb*(3Jb1w_0r!P(m1^?=C1QlFdT&US-$n!iE3I(OpY4gMLG%`B+Iu?sv|I>9% zOHwwQl_WKrP1R~Ol}aULG8rWji8uZI{n1W=5dhn^_bkhrzPi>+RBYS+e13l3=tS@n XB63?r{dPvZ00000NkvXXu0mjfT`3i^ literal 0 HcmV?d00001 diff --git a/views/res/mdpi/text-json.png b/views/res/mdpi/text-json.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5f1f104c1cba3d5462caab6628c8b2c32eb298 GIT binary patch literal 642 zcmV-|0)737P)Bq`ME_3i@j;or*k`~BZc z(^RI72mH?hu#anuUI2J~a)L*Dd(cf2KCc%mq6lR;#4Vq1t{06)XBgqnf?blIOv8Xb z5WvfL{D$UdmzVgZX#jv=CZeNzyb7nx;9;;4%JAU6y5JvssKa4Z3MUk|Zd@ApoFWuOkwPKv5JV z5{bnMmeo{&uIn6+$IBHIi$&z~dA#4=#>3OoS?T~#tyU2Vg`g@5?yRrRFmqP`0M~IK zcsw{>Tbm8tlV#9#;kYgWfdDg^j1Y^(G5|i$Stu5Z{CRc79~T#FHk+)~YAh5A*WI|< zXvF(lTTeGPH$4k8a2F4oy+&cx%Wl$=Wkjv%J zZnqH(2I0CcTCElUaM0{zb)DUAmz7Gz9qT$%8yjyT zk;v_3-?c-M&1RD%Y1=jp!{A^rV58AsGMRiE4u}1VfIa{aMe&Ou2s;2g3uZ>5D1KE{ c)mpURH!(Mt%w?&@&j0`b07*qoM6N<$g0}h?4*&oF literal 0 HcmV?d00001 diff --git a/views/res/mdpi/text-other.png b/views/res/mdpi/text-other.png new file mode 100644 index 0000000000000000000000000000000000000000..8f8f13343cba26f1aebc5e5654c32afec6c13428 GIT binary patch literal 598 zcmV-c0;&CpP)FkN<0p`_5lX!m}TE@xBB zqR>!KNFha{B^&v^~qqJMaF^z3)i?psH$mGMPLEAmiV(Oe7NDf*`O~ zg{S;a0eFs$j&T5Ze|d>#XJ_z&0CGHz14V%~o8f^hZ`E?S+}g9!DM|XCcW+nMap*eE zir@u)&-|&=!OQdWon5E184fZT*tU&gx%|gaPDyeZhW8Q#zRw^C_7ikE9n|Y}%v~2= z5I|McH4Wl%WV2aVmW5)mxSQZ_@;s08`FuZtrfFz4n=tO~w(`ei8HQmXole8HEIc|q zTzjMqg3kaTq6ktf1^}QCn3yJXT?d6gBm|PlBx|*rl+WjD0KRNR&@_!dZ*TeI=7xj8 zfW2OityXI@g>W5*PmYgYSF6?7&KZa(ViZLT!;r4)vfJ&FBu->j}D05~&E>D9%>J7YY4J2s4H?-mw|1(#t+&+}*)26bH* zbI)V>=;%W>n|-+Ncb$;rU@#y_E|*LCzR&4&%6`AkQmOPYlgT7@8D#)a6y-{iq!R$K k9cLUxQNG%?9qzi|7tTM$#)L&>kpKVy07*qoM6N<$f|t7m3;+NC literal 0 HcmV?d00001 diff --git a/views/resources.list b/views/resources.list index 06fe582..ffb67ad 100644 --- a/views/resources.list +++ b/views/resources.list @@ -29,6 +29,9 @@ res/hdpi/hdpi_run-build-clean.png res/hdpi/hdpi_run-build-configure.png res/hdpi/hdpi_run-build.png res/hdpi/hdpi_text-d.png +res/hdpi/hdpi_text-dml.png +res/hdpi/hdpi_text-json.png +res/hdpi/hdpi_text-other.png res/mdpi/cr3_logo.png res/mdpi/debug-run.png res/mdpi/debug-pause.png @@ -60,4 +63,7 @@ res/mdpi/run-build.png res/mdpi/run-build-clean.png res/mdpi/run-build-configure.png res/mdpi/text-d.png +res/mdpi/text-dml.png +res/mdpi/text-json.png +res/mdpi/text-other.png res/mdpi/tx_fabric.jpg