From 233d732604528284e4dfb57bcbb09280db5526ec Mon Sep 17 00:00:00 2001 From: liyepan Date: Thu, 22 Oct 2026 18:14:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20v0.8.0=20=E2=80=94=E2=80=94=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=9B=B4=E6=A0=8F=E7=A9=BA=E8=A1=8C=E6=96=AD=E7=8A=B6?= =?UTF-8?q?=E6=80=81=EF=BC=8C=E4=BB=A3=E7=A0=81=E5=9D=97=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E7=9C=9F=E6=AD=A3=E7=9A=84=E8=AF=AD=E6=B3=95=E9=AB=98=E4=BA=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复 - highlightBlock 遇到空行直接 return,把围栏状态重置了:代码块中间只要有一条 空行,后面的行就不再按代码处理(这正是 #include 之后代码变回普通文本的原因) - 空行现在会延续围栏状态;闭合围栏行也不再被误判成新的开围栏 语法高亮 - 新增 CodeHighlight:自己写的轻量 tokenizer,不依赖第三方库 - 支持 C / C++ / Python / JavaScript / TypeScript / Java / Rust / Go / JSON / Bash / SQL / YAML,按 info string 识别 - 关键字、类型、字符串、数字、行/块注释(支持跨行)、C/C++ 预处理指令分色 - 围栏行在源码模式下改成灰色标记色,不再是代码红 - 编辑模式与源代码模式共用同一套 token 着色 其它 - 主题新增 5 个代码 token 颜色(浅色 / 深色各一套) - 版本 0.8.0,README 补充支持语言 --- README.md | 5 +- VoiletMark.pro | 4 +- docs/screenshot-dark.png | Bin 101341 -> 101329 bytes docs/screenshot-light.png | Bin 101524 -> 101559 bytes docs/screenshot-source.png | Bin 117368 -> 117280 bytes src/CodeHighlight.cpp | 334 ++++++++++++++++++++++++++++++++++++ src/CodeHighlight.h | 44 +++++ src/MarkdownHighlighter.cpp | 122 ++++++++++--- src/MarkdownHighlighter.h | 9 + src/ThemeManager.cpp | 10 ++ src/ThemeManager.h | 5 + 11 files changed, 505 insertions(+), 28 deletions(-) create mode 100644 src/CodeHighlight.cpp create mode 100644 src/CodeHighlight.h diff --git a/README.md b/README.md index efd121b..836e4a9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ 一个轻量的跨平台 Markdown 编辑器,基于 **Qt 5 / C++17** 构建。 -当前版本 **0.7.0**。 +当前版本 **0.8.0**。 ## 界面 @@ -26,6 +26,9 @@ - 行号栏、当前行高亮 - 围栏代码块显示成带圆角边框的面板,右上角有「复制」按钮 (源代码模式下不显示这些装饰) +- 代码块按语言做语法高亮:C / C++ / Python / JavaScript / TypeScript / + Java / Rust / Go / JSON / Bash / SQL / YAML,关键字、字符串、数字、 + 注释、预处理指令分色;不认识的标记语言就按等宽纯文本显示 - `Tab` / `Shift+Tab` 整行缩进,选中多行时批量缩进 - 自动换行(`Alt+Z`)、`Ctrl+滚轮` 或 `Ctrl++` / `Ctrl+-` 缩放字号 - 撤销 / 重做、剪切 / 复制 / 粘贴,菜单项会跟随可用状态自动灰显 diff --git a/VoiletMark.pro b/VoiletMark.pro index 65ec86f..c2bdc89 100644 --- a/VoiletMark.pro +++ b/VoiletMark.pro @@ -1,6 +1,6 @@ TEMPLATE = app TARGET = VoiletMark -VERSION = 0.7.0 +VERSION = 0.8.0 QT += core gui widgets printsupport @@ -23,6 +23,7 @@ SOURCES += \ src/MarkdownEditor.cpp \ src/MarkdownHighlighter.cpp \ src/MarkdownRenderer.cpp \ + src/CodeHighlight.cpp \ src/LanguageManager.cpp \ src/ThemeManager.cpp @@ -31,6 +32,7 @@ HEADERS += \ src/MarkdownEditor.h \ src/MarkdownHighlighter.h \ src/MarkdownRenderer.h \ + src/CodeHighlight.h \ src/LanguageManager.h \ src/ThemeManager.h diff --git a/docs/screenshot-dark.png b/docs/screenshot-dark.png index 514743f2a191a2c4838d5a3182e0c5d95af8f7fe..81fc04fae7906ce2811a719acecc3a47895536f6 100644 GIT binary patch delta 27132 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 G)qeosd1hAt diff --git a/docs/screenshot-light.png b/docs/screenshot-light.png index 80f330c6c96bd8467dfaddd5d13c77ba0dd40232..c8bafd0c277ab6c679d8c8c6bfd0badb4171020e 100644 GIT binary patch delta 26329 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

u}uA$gJ6_!0@uk)(fI90hLRh387^wl94{vrJrE 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 UE5`aP7Tm%fDQYN`z%5?>7afI)umAu6 diff --git a/docs/screenshot-source.png b/docs/screenshot-source.png index fde19019ffa60afc6561f246b381f7da037e4597..eea957da49669c8eed6031bb71d162ff9fbc87f6 100644 GIT binary patch delta 24655 zcma&O1zc6#wl=;kP$Wd8O9??*x=}<>5RmRp>26pkQX(MI-QAs=kdg-J?rt`n-`wxH z=iKw&@BHugU%xF|_Fi+XIp-Q<%x65~nVg29CWWDTmfeasf%tfHbc64lTDrdHj7|9Q z_3(%A?f0Jj*z&Jl)yU)G-ow84@Y_A-BzA0E2IY^~4^#fQTB3c$`}5#gT8Np;tQqsk zRdH2I5!JKL7|&+=_UmjN4R^XN5xq7$yED<%6}JT&((;69=O!hnW%<-FeYbZuENvP=3r#13a1ICdV=n@`U+pjmvI-f#0k51xu}XHs8_q2;pamqGr7v}@(C;tX%>#P zH8Y&~&ArXy?om-+fvHya*;Y41HBtO$KM#QjXYP7WzfO}ONaP7P2QgqO!p`!Gk+G02 zH%l>>D<%RJ27@)m3*UxW8S&mby?f?r%As2CnHU{PGl$4$q4jNECnJn-;HVWXSo_1{ z_mY*`09TXD;@Ru^3=}d8Ce+|WYa5#lGD3%I*>B?c>)6BN3keB^m=%|=v3JDtb^6Zu zt7S)_YY#jqV2nZWwYO~dDyG{i?8@~Dt}nL`Sv#nn_A7rEW8!kBu_x0es0BYxlKE=3 z&FNNTk8be?Q&`EjrLOA_to8+51YZ1Gy&k+@{Cc$*i4S*fRf~&>?0)b&HMV7K{_&$d zS&b8uBE?ycua9`rdGEs4gD>F|6aOO`zDJIW*zI$)Q1JFcvbJdm2JW8jXUnIfO$eInz1k11+;gct9q1vS0(ZAF z_KW;TsK3-<;CKjyl%Lu466^7v>~1+IDB^H9Mpg!36kOke!BlTQfO*~%rIgG47!#yG zCmE>zYz}evwjj1fS4U}OXpwT>)TMB_DCrzNr0eap@OY5GCp#zGpj5@${}YGJJ#2&3 z&Ky&dZL`)hZ))-I7{71go%D3M_PlVPe0Y=!|l8_IutYp~|S&B^M9s^s9g5y47&dGVcJ(-m>O+iQ^7A_Hzz?gATqrwO|~jwi4-Gw&(QXG|FvCqm@# z2o3d%^Qc}@4YTKvTS;i<^v}$cwOQB8BUB0sip7TNrtO{OO^okSmQ*QU^Ux?_$_|#) z7Mn8#?GVntgtA*@u7fHlGzaU+!FZ;=-i0;ZE`G;;IpBepTjOJ2V#6ZB4qXn^kCq?` z^p_5IX5P{+kqg-mRHlkK8GB}PHjZx26)R`Qo9~ioEQAgkcvHVYIbJ~Q&Mll)E~3?XClIq1nWz`tjL~r|P0&!q#bTU-ps40sia}g=1x_d+)=-Y&3rzxiAPR=z;`dg27 zc5zC!X}$tOa73FlhLvI9h7X%@b~S0r%BZ{%k+RpkrKlm7%SG^k8hr6sZJ$)*3P(mW zdLjOShRf7S4!pqJ$i`HmMvQ_lO3-7^RoFSuaGKuzD}PWdd~Fosy1*IeX6}pPL=@Bh z8huT%aAn8s<#((V2EQ77Yl$B#Mdn~X>2_hWOWEZkcyso`E5zAWof~_f+f2xDGOaxI zhAW*OdpYt&oram!5f%*AkM49E){nx1E+?a)XGx<|I=&pPAhNV(h4@xoR}$k#LYgKX zu9`k_YPZ#Ym>>zoB1BNR;T%kEkh&oDl?wwKXa17IcEgmrw;$R1#Am;X_>L%cw}=&XxRcj%w;}S+I7OB9Ez!eHH}>YRy_P=7$6H@{SKGbZ?!E zbc1LP+o9OH4O#%>4w?gjT_JjQ_#XJpig`?ec%0@A@*|G(SmYU1nJo8^lMYKFeSI7G z4w`7AJ@ULaYVg*%gu+|6b>1p2E-m@9$L*%TZR;>PNWo^JypxV6vG3vD(ZPO=*XRzi zT^TPw2);>KRo&CW)oS|6PRiQ$@Hq<%fqVOzi%;Gzz#hkuD2Csja@CCaDuY z6ZWTa7s24%;dQC_z!Sv&62e(EKS;-~)nxk>a>`+|t=ii2lKM9945sF0`sONT zE+U+(u0U{sncsg5gFPhh`N^cEKr1hh@~c`ss9N2GW?;h(E&b17afvun_*jMPcVwS? zK7)Y&C9Ldw$+w&zQXX{W8KMPQA@qkRcd&VQ-kG;7gq3v@LDdU2c|~P)ziKIGz=VK1 zJixnkNBN_?Y{B4WUn_O2go{IfmCcV5X`ztmv%nrfM**MDG5vb-6uiSc9qv9rzQbPeefi6V{$?835R0dRf`G`7J!g61t8C>rW2P$>5? zDLZh$SU!9B!qI%uYE0ztIt5FB*DgxHRCL;7$mD49;q_>P7J10Kp++l}aUOc5{FyrY zcCjuzSI4cfu=|eN(~fg zdk14(z2uMD#g~`qPiVwkU9&|jS=6gz02Dkw`p&9gps%rN!^2Vj?OSJzAr*|DX;n(P zn!cV_kpq&*UU!;#m7OU*;1~zvnqneVqr)_?dA|sJAQo_ z4V98JX*pZ?eSI5-~rx3r0xF%6lNH~V6^&sQ6HTwL|d-keH2J?*<0ZKbBBNdDcsv+@(&tEq8u zzvB8#O|G62JVN&!H@As=@0T*kUxDjEc&#G7vzOZX3qSwJ)0MxYqDpxRSyI$QxWiLQ zGRl9MR`im6c`3sQze7}$tQjftTa)FNjAHhz)e2_4*+=chmi@(u0_CH{n(~!jo6gRH zGnH_G*-Gg`@_LPnft~tp!4I*5kf6rYImPxY&h_`b(7=m`+}w7K=FT#y#>6Cvm*Ft-azFkD($F`qrCt&R0YjY7pF^|*k)z4oZLf5<_E z5!^mmeH6@h{snZ@eALTI@{ZLm0eagONp!FhD%tL>%i@;R%pgsnW^MKYqNACiH5q)w zPq7<-Vn)8Ja6hvVk#LEa7{^!}9kr{|?a<|n6|g;?`h4eHGM+!g54xTx**^7ekSsST zUzt9^udS~3xao=1EspXdBV^wTd40$KUFyJBv7@QONoj}251Lt2^DA~h#$nAJmsOx4 zc;)0g{c8t~5_Mi3uFQamv3}TYNxXrl+10ID<@8CSo&nhSbaP`c|b#_9N_KDf$S$k$?pWCP2O|62nmXS6e_pUf{3f*Gmqv!iLA+p*0_Rk#- z+c<4dxRILIGYF@e-XnLvuKb7=s3S^%>Zy-A*XvQ?v1PC(vs$? z4L1WGy^vPh;=X>#ZHky1T1IxN6diEY>I? zQRjzo=4wR5k! zi~*8M`h3S@ysBfWdt}6+HK*^8_iEt=zPYoqvIMQIEv;3pH5*7vMzdS(StY+}G%Ups zrNowuW9>Qo&}huQVRxR2>WDM&^~Ks2g(8p;#=ByW!yc|HY!WG@E0xIJM@%WGzfTqw{rbq+fujqk~-$`QM)k0QCSK8 z;2h(3RmA$r#>UEu%Vodj;M>bm=I(D>kLzvD9@`QlChH$R4rPkxqYfFHDX0Wf@%}~% z;}1y9Ei5u{+c3CsTrFDL6FFb1g0-pQA%sj+-%>C0!mriUORCe1D(};vzQES#=zc+4 zSDbvEZM!dm%$V{YFHIkaUGCUcKM;{m&Qo=8+Ws?-*wI}@Zzkb!Sm>$5ADVQfp*}h| z8>As2+3KObz#`k3%;dUqeRyLt5gr!SmFr+hNulyOIa3TZ$JQ~?k3jbTVPFZ>mnO~l ztq|WBk_rg42ND|a3fgS7OjwQ#=Wi1ZP9OHNVg+Na7$QxT1z0K`I+@cX@q9?U7bPF6 z8XG~W{ovGyWNlaBYF93ux}7!$HY2H^<$hBim-^U&@^4R%Yk?i{RVB6pQXUt6TH3u4 zxZ{^!6q_6~rH(h!LT;wlP}M=`@Gkr+BOt(5LE&gmX0hSS#y)XIV6(!AKr~x+xeHB- zR7jsG&vkLOyRUB)yzJCvWad{k&bKExGJ<2Tr!G%~G9}yV1!wvM5c0P5AgI5J)zzuQ zfEm+#|Gs}jNb6ve{wz|gTK`)2N(NAcZKJ!CNe^}f8gZCo( zH9gWIVnOkb?%!Q(3!|;C5x<7wUlCd!{Fzw?Q~nMgrl`) z5OWJhwWK5pD=$1WaB;(3Psr8bCf@6dhtZ{Svdmb7f)mp{j87Z;X8V{MXC2oUye;9i zd;ZpXyuRKWM=lh9*6o3{YvpMw6msP&x*jCTot@ni{@gF0BAbhY6Y97%VY{@pFRjS* z5Dh|S;llG55fAUQQ&(1AnxFT`oP7e|dk=u`{XtvrWx=bPc%exDL#U>^f_!SQa@gSa z&vEf_D|P%`c6q}lS8nbb=D*||F&dePxz_D!z&a>Np6I&rf_yg!tY8!&SvxOo;)1Sh z5fxbYj4TA`31p;x#r*7veOko_a;eb3>CPmVBHO0@c{;sd(E5P+Y(aiO0h2wk&``td ziI7Fq;Sw8qb6BL(0waKP{bWTSE(m6F((?XvEiy54-7WfZ`9)W0HDgDg`N;@Wy#;SG zO|L}LkJ$Kmz>%@2&E*k=+VH|C+pha_81aqB7}}Uub4w4wgf7CC0?6|_hY1u;oM@XgGKVy z+u`ji>!n)Mj(Xr&bDLpiCSRdA@oT0k-H0r0Ee-v8XW`ptDa#9x?Vffc(<^Wt7;O7K zxPY>PLU~>J8}O?qgc=Q(|6_Fr__pHknk7K@u(^c4LFXwoqQI5Lc;dJ)8 z8^d~;OeFjsD~Y9%`rg#}#741JFPWh0VXm1OsA!+$RsP83<)&!5>?fx8wLh;X>MDr^ z_LpWe>n}XqQ+t@yzsu1wX!X;FcP`Rga}ovGKZLIB7l{#;b*@ezo?h4NW7!VZkb9^e z&L4=1fiYKMA-ndUQn7yPQ|ZioQ4#lxLzkoQ$d!f*4_O=WW=6ffgbSN(M}9J9Hu{Uco=Lx~4AJYp zY_>qmrd0&dbf;Y5sL;&<{kl?NhyJ~@vyw|U6-`YKkNR$THFa5D+hg^W24?(4#2K_= z;pO$E{_J%YAhco-s&@KH6tZ**`~L6WTNfYh z(l>6v3q8A*ZEi?)yVu&G^W{p*kt-Hx#&ptgOVN~F`aAjHWy5_Cr8j|(L;d&TU-#)2 zSE)Y~!i#TuI#-_V`0gzd{Z@I|wMrr3_PSfedC+6ebv7fK%rqOGqZ?gcO!9m_bJ5IE zX;+iZsYs(}LAvnHH@?9Zr~7IYyjG{bzgp}0`L$9Ya-9Q3LC-S+t{*J6`#54EP7oZ! zJL9f%3+bnhGcI0!CXgv^$BP#-G9jFtoc3ZuHe08s)~PBCitjR|X5Gqt{7Onn+CN0O zFtVAB{kEpT+|?_!L@%>z&B39$F|_4AAgUJ6_t0Pa-QPb~IO2A&bLlJ=M5>fMOb*o; zcA!3dE37kkgXFYMuz-VMyd?NO&cjMxh{>;cMIMk>B$7D@ojFxkifcQ*b@SL*J7Pl@ zUCfc$l?)`af64587|iBp+!N)ELm|dqJE=g<$U*d7ovE^-!eMPu4{LXp8gJTZrO3R! zps?ZU`uFE)k+i|}uPL#k{j=^3f>dd8@2oNdA{T6J3kzrWHqS8{HV$2?)n{sNC`Hn^ z*7RKLv@XsvA(5e`Y4d~7zWU2Q-I1XnkEcWN*{5;bvoVcZjH`K3qb=;UJr}B7Svr>vDkLU;so#;z>}PEJ+cQG_3MV8q zHFdqQsY#H%O3vkc*cVkmpYDA_3^p0r%AB^=ZWxlb`I4wvVwC9`hp$4>$+2tmPKM+D{TC6D zk{9kXt#$fh#aHc=v+#f`EMiXm_5y(nJs+LkgxY=q-W<)?)30fftM%B}GtqvSq=GSF zKUs~A^F&<}PFt!3;jTT*C#d@7SVPdZzoo8lB9q+B}O=E3Brw-e>h!q^{fVW2#=fwcVSk9Ed z9s8obb#_j>Vtq*9enwX!fw)0K`XmnUNeC}3%^*xc{;dyc?hsM9>KhT=;vZe}zfHqe z7v=b;HK-rQ5>O zKf_gLbTp)bf)?AqpI>&B(?>FopI#&ahQiv>Hh0u;`GA@P({(U0)}OY-G}2!#6M`T0 zUSwQx+4E{BDA+f=e&gq-Lr^Y$HBzTUBluD=bznrYyZ-#V_Pc2`LNl@S(93&8I9_UX zexPZ*<5OP{BjzzzF4v6^1xYAguNm;J z_9uM|Zw$c5RUaZ*JW$lKcY&^|tMqN(1Kvyu^H0e)@p!4kP^BNCO4@XeHb0KH@CL+n zW=NryUBSrMS0cEbIR?I?Or(OlJI6N%5^TPKL?`Pp%+lAkCcC|im7G~z_ip+Eg<>;D zqDEkGydJ;RT{p{I;hKq2ajcic&o;R(YxKIFe}46`5RwL2MP$HBbZGs^rR{gonkWrQ zYLoG$w7514!RXcL;Gi5$tOH35o2%hlgYd#&M|kvG$@k!S!FJyKgYfG=2(%Kilm;() zRJ{s|n8}(?N0y0|A2k)`Q|{#Y8?Wy<2Vi;B&;N>O7e+Zm>{{ddTG`n}aV(xK(+fFo z1}gDYan*m4g_?0TE%UFID<#1KkeGkI27INV!MLNHK7zg9ODYopv3uU$kNNzEG|vHL z;}V~sL*O;P!sp3#Rb8D|x6tt-v|@KkQbabpZ0F)`3<1bK8r>fTc;1>|rqpwDZ}%-H zT25-z>}&nt#AJB8nWb=7ola?VCjS{&>H#Djh7utT<2ldWdM#*a%)fTHv?IE7b;PaM zVSV9*hvc|(nH(heT2)T(r*qF-P|(+Eb=McKeR`n6WG#TaCA_ zJ{YYZp?D=a5BsBmNOq8pBxQS zZ|{vy+9)x)2)oG?6{utzjyC9}$Y$f!pE%44Iyx`21A7qg1{EOE@zAuf(6lJ77M%`) z)r>OcoB=V0&T42-Chge4!lD2{=I%76=M^6xx1m^FTb&Q4u!+x-jL(BrKp-`BwC5hK z3tTgIczE+$t6?oS-!Q$My?sY#Z!`zuOy>>iY|T<+^L*Xa$R>bSh{3*wYxj-Az`L(9 zN7wBEd`cw_N2k}MxdpCsj|GyiG+B14(2?3cU2YS?uDE?X$FdLq z7W^)MgaF-zIM$UF0bIvh*g13X92d=7F}L;z-U{L`?4;rU&Ta5#;uEMBirYlTX9Aoo zsGp$u?I;Mg=@!QnXN|V4kSzlq7nc73co}$yO<*HyH90vZ&ZfS|-?3O-v(x5LK$ytO z8JI=J4DbYAyh48UkMzg$2rSDk_r~&FH%1`?b|PYP0JdR0UdVFAW=RUaN{Ddsf)%%v z)Sv!WLZ3aQL3YY}ByJd3r4uvX3Ddh^!RhZsa%=xcNX9kk28hv>3RWQXcki}G*}ehj zZ*5hCI67Xk=D{82h#V|ERkuKOj2sE7wALccjcG_9vYR@@|J;#t__>I zr#mP>aND#LQ3uQxDqW98n7f{kmN|VR4DMRCjy)@sn+QJy#vL65fM|P==3?9TnB$=* zWWi!0@CzYXMa|xMsAxO=I7FkC|7L11Bl1gh9p~;g{9?1cV!Lpb5-^4MAjxZVzmH_8 z{zo2S-jecaHYh_EOm3K<7McY_6?;S|xX_CPL-TkGAta(gl<8?E~_hwX`IX zSw%l*1CR9V*P)SwxVXcvz}`?Pnd%2R}O?4u!gC~|0dFR zAj@}b=yIAWpgMnOCdb?zw6_3yG<10EAbk72gh!88)7*ZEmm6e48)-_`hcYWpy_%Q$=TZ@BJ1@SCn=>uZDt1K`3}eAs9T` z7)P$@RUY^)DCoO@V|`W?cmGI(1y5{G!tu}$4wT62u&|WX?#oq+RQpuii#3By;X%zT z53<+!1-Ynx7g{)v_Qs#LiJ+jK8yc)eD#({BIx*re4?9cU82PV-E^f;69{qfy^=P2~ z$1TU@4J}<$dV1QAv`;`vm@QBDNN`26pb!6EUb&H{3&({h?!sV2&ygPdU5EDNQI2T7zkiT+sfvAW3&k`4 zcP2);vY%L4ZR1I|)#!gmxVkqU>Jb|KL@W64H-JnpAoS9ryLgf2f}ee??%_ubex{Rj zd@U9z>>U;0$2Pc({nk^3llwQ1R)R(JW6B2YRP&{>#+u{#G}pn`qX4#TsyW%=%Gy@UgM^a{1McRY^&o?REf|&jvxdW)MvmFIxeh}akJ_|wA5O3hJW;1L=Cd^<;VjS%d{WtsT{ zwBo(q7bWCza&^8m)TNbwmNuRW0RW6Dp%fK_ib1kBpK=c`HrnBNe%Hvz%4DG+7ZfJG z9YYENSL4+Kq<6mfL}-Ak5HjCHS1y`9@+d@^VabNO`pg@w8YVRJR@}G>!_Flsu!bPT zfDHttLPI>fn!s^W0wQasFjJi|{}EuBW;9kkbr)nD0Ix9a7Tt1oK1*$vmXhSws$@BF znGqw0&W|EVd}+SgDod5G$fK3;_Wawj@U>N{F=w7uh# zV$IuD!I#(#7wQ(bu@z`@BSfiHL5Ax2$ab_iKW>HZY7tz-z5KLU1 zE>0Cs2j;ztQgH3RwpERAcR4Y0K^L4MtrZjFnCND|5TdG*8*~MgVdG8Ug~}{WNz26Z z1x!H@_@{{3W;V@UX+OAgP>|}Z;2nUO_dF%Nd6iM{^vvg>8reg_{=Nn=iSurFLZwG@ zAxN844HZGvc$&++W4T;3bskW_&nUcJ@6ONfZ_qREJM&xU#a`~k^sh+0L`QVBNdl+@ z3R$}rePEe6VFN4Dc4WxQ`ufFY)j-Gw)D>2BpD!umxslhdAH_=q!^>nS%FG=qb&{VY z=BbN{WJxdqo=Zn#pHFh$0xY*_{{u8E`V8J+=UvnW@j3%53jzf z*t)s9lWoivevSZ44*;Vp!OOU~Cgn929Y=L;ZBC9OYV8{0e$r0OGny0S5-rS|qemO# zDea{HyxISQY5phCYXbuF)B0Qy6$hj|5x08HeMKHazRX;GY_D@OLF>@Je; zeS|~mf$$3Pmk^iB9-;{8mj@YM<0@i{iW4d?FB$PiN;{IOLBgMe&FhuWs%u@%RkEz= z%}TF?H`38ypNdpK7?XiH`!@=UED~r9pFg7(VE7%}*RWW*fjnsn3v_M@@4pw7KKY*^ z_8L@=YifBaEwsTIupS?df2(*xf0aDDQ<;({e=+L4l!SHzwG)Z(c} z;x2c5dxD1R+iY#~(+B1J!Cf~{fI0M)PRO4;2)TZlK}WwfEKrhFWp>rZXxS6pv~07X z_~729%3x-}`2uty;h#OA!8gh`km|KrDlNE=*j2l7t5c67&BtK`BbZ7=@<3lw7FZpX zRxLtw=5;;~4}W|3Alu$F_17Du804yb6_H0cwl*Kk%g1XrYr8f=Cx*J-ZA4=^Q{7OP zvN1BT*Pk^12IacUI-p6r>O=>0zVRwRfl^61j~057dw5_~YQqj=jMVzLwXxOT(k7go zG{D(Py$lpoUgr+@{$Dd_U{@}p}K)qM`HHZW*yXX2X<0Eo_D6E;XKaw%z1BBg*oxi z)9kjcW{7;XXAM8xnkl#Nf(a%1p0_=ck&i5bhRVKE(n!VPzZ&A#bRpTkDr5B)-pn4Kj zcnwr8Kn20oP*_-*c{bKQSz4ASoH{V0y1ArnX{r~h_0ehf4OoRe@c{R)eXIE+^k+F2 z%{xa-p8Mpu%VD`3EkxP4r*VhZTlN!8v3b(xk5;zvW$$R8QaEo1#^2#4!7S|kb3gf` zRjnja0XTR48R-N6k-}TT$1`Q;b>(|doRw6RRwHVWKsqD}q*bO%fM%Ry47k>6o3)H^l=6QFfZsAbC zz{VHsXJ+0yP03feeh(({gk+7}RZ#H7vUud)BRL>a5z$Y$7Z#E5p3;)N-iBjvyyLa< zYOB#FCAQR>uh;`em$$*zhvj*To;e8EauOjjSg|;1GY2deFiC-zBIZiMw;iJ6lV}7n zr#bPt6=caAyg_s(RE)0`y&vX`pLFmoCy~p17mqL@Bs%nG#7pPP#TDCevyl-ER1VdA z&%RmrxhOAqnVSAp_D35;gy;Q|z0Qxf3=0-)su#sDri)Lk>;tFzCQbiTVUu8L+JZ-D)d1ub{WA~l zUKR&qkzJf>2b5DJ&z)t`Ozli%G3jLdm2vkgYU4izllkv5yk9lb_0!Y_;b6anVi1Iq zw0!XJn?^io%-C3+clt2xlg>6`q=U0Z!sUfURu=~?^1u0`QRjgSfpze&0%cM;kaQw1 z`gchmQe`)=j(Ff3)J}GF;U;WSBbv&gM2PM)M6V)t!voEYMMJ%sIoaiP-&SUv%?7ex zO6cuEhj}eq8`Mx*w!M!lw(K2YiWKN{eRU=Nq5&%cY-VtQ|LPlYTjM0HLJRC$^`tyz5#f3W`_g>}+}U*% z|M6jo>$;Q?qTRReFz%zF+m%^v#B9}+lt3jn6D8)oU8Ni0LLdc?94sIabh)$;0WRK8 z_Mggsrc2)dPkRfVYTlx2l8y_X?F}lqPU@*}z0m66v%czU5dG?iiSeL7i78y%7t?vk z_lOuph&8Kq0L*Eb7%*v~WVSUG2E52F>XedBI!KM!TISPR3r)J%)}6VPCri6MhHC5Y zV~j5`y+WR)%ui1_*3H&hgg1w26n?)?n>%0;5NFt-Km-~v{Re}i^SSQD>4-M{lqrjgDP%g$-&TxAy><$*MiUyO^>+cIw{OmxhSH9>u z3y6fo#l_9d&CgG^*+7L5uzDFt#xW5qTGXD=7w68%M$gjN@E+m@Hj;Hm&hvjNXNOe7 zRY9$taGIJO$_usBe7#?u$DeyI^m_Zp_g$ak2i7IZwGNhw_(Gq4;RkyherSo&7_9(~ z);Zea-+OAYCf4^AM`minm#v;SW`DZBy{4MWpk=7*6LYVdV210-2|nZclP9M;mt5DU zrklgxO+~2aY4wZ8EW6#8Gj|)#_MnG=+DL@<4SaN<4>S%BcHI{C>T!Hethpm@Le3U) z3lkxSiGe$=D2JODyow0hMrF);!14F0PjpapHmip=ls?A>|tgkUgL z?L)A|N<=|H0ZyirMD0&9JR)HcH^JG#!PL(QnNkTLeI}=Hao_0zG99<$DevM`u^3aF z$D!OL4px~@16IGaLb~MSiCaM`sXTxgG1UBz#&ftgZ)EHaP64R9NcbD zI=*s(I(h#sQDDZA?qzU+hb*Gl*Q+Q?c=|vPSd!&+VIX5bYYBEhI2tZC$iG%s%wsDp z`XW0_OmQ<@Zw!`~CAY@;t7n^<61tWnpooa!e8v}y;qRzOFjpNi`FOd*!Xh{~`H=47 zh+F~wmhW>hzuBg$5KWay9l8JYHifLoklW{^qhFU;#d|A#(LILi=#Dzgeh?7-*>(Q-O4xm0vl1Bx{I>;&FhtI%fO$fF{+G=UUZx zBx{)iCbkGP_>_hk-`Gg8?a53CrB7c1NAn@Tjal=@jx95qbcG>Y{Yf=76HQImOhNZS zgzl^gP7v`@=vMId zJnc_E)k6e%f8lO|J8D}X;qv0N_3pJ-?a5A|nwq-0Zo;sf9Ajh$*qYYS(NX7?qVsY( z)t{D!#~x4;l_M)lnuP@goaNwQdh#Jzc=OZQwys(7ZcYf@W&bHQToB?lUM`)l6k5;l z#N^C1vQsHVOq^5lxZD{GJAtvAUDqku^G=tovvClapR8qtcL}=fFDvzwOG_t4$H(jO zUK>th&E{Qv_8W1(@@{>2u6A~D;qC21!e{+Q_d>5-TAZrl4$7hF`%C0Z;N^-I6e-L6 zZL0&^4{&S3~vONnfUrI z;H!BT1$L5YttZOE%X_&$8sV}Gq+vb19q#L`t7_DA$gC6wX1|Kux_T-&!rf_e8}b(3 zUvKZStmGyDmm>1!08}8zRHyrQB0feoAP)%Mp#0$j`g|X-4=dMW+4s#DNOYo*+VCE< z@N`83;S_mHU?Wp#aBSZP_*>aZLotkoUY1s#1hc*4JrU6w&7(bk+ACElLn)8x2;C54 z?OBVF?~HsjjsvJ&Kjq}k+^(zT+VgoJP#}Tv!;rW5D6hV>_~iGc8~Ya}kcUH`SNp40zDB3qBQ-WBfQ7fWss}8R2^aEKv_;+P4$m51beuH8``TVobBk1eD zTB|Y>;&s@GXn_2{aA&-}msD(e3M zxEi6G375+yAt072u>oy??(DyE=Sq0piVe>jl%onm7W-ml1~D;I=lr^Ip#K3jRe=d? zYJvzafFPsX3$*gA0LlI<;^sx0a$a{+F)(8=b6jL<+%`B!`SL||SzccG9i&Th0_O7- zF=FB2AP13T;;rCg=e2>6AmoxbLH3Wldn2M?7UTZ?u~NNU;pCysBgS3in8;ZEW!Dfe z?2hL)MU}PmSKymhu3mrPR-{=2&jAP6KLUEkP{l;w8H)Sj2_2^I;t~}G#v#uA(~O)y z2c5am)#Yf^!Cm&Y)@Tn77Oj4~Q#)?mF>TWPnJiO5kxpjt3xhhU%)XI|f&BtAf5bS5I>C5Y*HmV$dE++76*|0R| zEVgO={KWq-?Le;I^J7o?mt*7TeIerYbb89H8x3Q$jn0C_VYN(T_@in?`c1SZHx*$%oyO!No6N_T2au;ncJh;R3 za>TnrgVn4@mOBKFLmdM(iDDJfSi;*ipxmY4>0a{ME0^qpE`jKb#otQ7Bl!aHiWX$T ztk$asJ?ksM>#RJ`*70`nJDV58&S zn-}BS`b0OF=%J3+Mbf+TB=!CBb3(>$!$)?`G8WT{K(=H)S)U8m#A*l`Afbv|06hJD zXB9|k5(coXJCv9*jb5TJu5J^~Ee=n-oUx@Ijv>@)WsG}5v`zz8%*vA4@LN;W+4gjl zIW)5m=_E#gN5hoB z@A*PU7YNNcZo8P3(sof8+MdZX805XN6knS^{fS@yeUog7rC5vd2A{U`p}lxDT$%;@ z6E24vG2cZ{ykFMFxq^RfaP{~ubXo3r(^S}?zCF-%6(kJI|F25Z-&wen;q{+PMou-= zPIgu@x$GTE1rP4>-=GRWsK1%zNL41FS4Kt@Xo&j#>(8wXnZ@IFb6y_34sH}11064| zRzA;4uLxZDVI_7QTjSzjNA{H9SWC7$cJ^o%d021_THATTtLy%SDgOy6{}|s+%Fd>u zsLy9V>8^)c3eGt8(iG^t6iEwF;-q8&vtNM;A)V`Q`_D>0c!QmK@TNzPmrRXJ7dIBx zb{Cx)`3mh9%WfO-)vs?f6zILDev>*aiPX6oGT-0-*(^0n?)&5SfT<8AAN<#mnB^S4renf{t9BiYd zUIF6yJ@uM%3tM~IT30yOzUK49yb}lH!Rvb~V@WmM6~EeU-p^Z)iyZETdHf;#&I|YU zt}~PH;tUQfMU`gA?u1wOR?+R!VUN2y)~LM!-dpzU9T?{S#bv~kq(Pu!q{4GHK5C%O zG&(%~lB&P*=$DzKS51|AXC9hW<+6>1YdTZ;{BX|E5t_#KJrQ|%XT1$68>v9&&%5wn zy7u1*Ou&t9ve}HOhhojY? z@(!6J=7;*%U>BbfHT;~Ge@87BuN)+5ZWoLY{?Za;bsnyE*7I_ja!r6$`8beQ*!b4b zo;21j7AEqY_D{|_5S{D8InT~mIb%r&Q!n6{fGkO}FE&|13&8y+?eQ{CGWqXoGDU&0gnG4SWZ&m-rIDr zQ9q2X+_UfGloFiVNZLpQ^PJQrc>atdzJ1l_ z?pd_>R2=CYH@-F+4IKi}r*p1VwJR(5syuYX@2Dzw^dKac`wwjQZ}smizU@poPw5{G zm5Qm$4^N|coNo)xc7A^Aux+#UyZA+D;@-~KK<67Iv3CcCjG(8Gt0UP+%kVYEB~|nX zy!%uo)ShS-jA#_JOn$lwWhVLM4#iapQ#m6!+k?l}N>=7qpEea8bIr@4!mM&dQ?*S| z_X#=+`#b6~w{LxYbeoDQRDVWD_l0*6Wys!@`gKS*PjvOJx{LD;kCBvegnF%gZPq(- zyvOfk>R9thFvXredGzbO(sEUYIx%;}*jt3tlfv1?*;?qB1d~-0CJ236$z%)J{ z6UofR)x%a4_u|iwDDWP>fXIR$*>G`4Zcu<4HCA|z?i*{9NK)*uj_HRrbCfiM@Kud*$W34#Zaq3sa2jzuz-h%#HO@ zU2@v}4q(RgGnv~2q1RLIueS1uJGdP8DlJEUgoG)9{U$rm$Ri;E;Gi(f2Yuivvodtq zaL46bAYEqc%WYWFOC6O69fHlmpU6*!Zli%e%i(1(Uix75!}HL>!eF=__}sG%?F9Q4 zk#9>tWZU;deNMGswT_#UG=FC1L7P{4-rzE?KOH|YHUlTY zCd9=8PO?ImReHZn`VsUXi|$5J@mI5?VsHqu_25?{@CJ^UM_^k_U|S-7VZD&0v!a94 zS%$8c_1TU4zT_o#EP3}wgBzpkZx1621eRf-Pf6HwJ<)u9hHpX&#@;SWH4ear;wzHC z+~gRpemfqlJNf8Lxo&YV4WVKUva+9f%PJXN&kESPTrF>QaQ)m75bs;Esg{k5VO*cL zHr2AfaOpZ~^}#XfJ-YvJ{`!LdN$cjL{++!6oF4rGv}&VhEO9ES8ML#RQ_5$glS(&T z$l3D!N(h4y(~=ebpC+z69?I|gkCbR5$-aDKNwR0l-pEeY?E9YGFp=$1l#q2|3AyzX=Nd(OG%o_pRW!EU?a-2)E!n!D1>BG#=g zii4lLX481vQ#UGq1EUeGGKh7Tg<>{|N{6VUW*J0y&<=7-4{R7Q!^v`XvT0pg80KlO zGWms)L?kUnj(bIr{yia8#}^0-d>T(iBM2+2BmZV7!PAGwHqrK7dig@|NMUe<*R~Od zF*AD}IcVq!_KYiXW2(~Bq;3opj;%Fs3S2fg0X7a8FeEg2yvrP}5Qw0Yn1uG@bOV9k z_%NtuYn_S;eiWz7{cuqb=YDyW^*^wj%78ta0c4Vs;2~m*?fLZatHo4703EV}JDNFx zKU1HDWpOIk?AVI*U2?|V**x7(cJCS!SS>Gv%mi7wg0X)&=^1}K*EbwPtbGEAh&jge zjRu8x1}es3qwS_4*TAxoZr4B=J}JPdKg+x4hjdif(1zIPbCexZ`j3H2?yb7ZP-=ffqg-q!xbqikJU`$(xCo`HQInJMpppcMWCdBr zfH9`;4@|Zv$Or^ys%^d(Nd>o5a^QBfpKNwza^y<=+G)-Kliv2EG8iufi^9(RGfYx| zH0$DjKl}H!RY8xN@ehB=U6gWG0NaG@QiH<*69AFqCJR|G{iAU5haNTg00TSbKTk_R zDJh^A@f=ImVjvp)@HCTYiVF~xsM4+fdG;B<jc@%KOF*00-TJt`7n(&WGsX!t0w(}3Hf&I}I+9V36X{b;V|K8J`?qpv?rDxyh zo=H+UW(eH|rDmB@ZuhAo4}6%eE97!@3o%>4&KEX2chJ zNtE8>(}enFH)SYT$It7g52Yp4s@O@G@tbp9-AyAikZE_$F_C+nu%mRE6)Dd9VcoK1F`pt`RW3!q}Jl`|ysUV;0x*9X%&3r!z z-SubO|I7Y$!LK(^)6C`G75on~ALItPC6A(IZxsr5bH2&Q%zoGKs&@@P{nj6_BKxjh zrV+9^H~*w2*36gcq7q?Y`lGtpSLr;kj=h~Z7!iZ5b51M!E2j_eDLIh>)Cv+UjeorF z5p6gaEB{QG91h&E3v!L`Bo!U6!^}a@?A<=lA4Qn2{OV2eDk;Rv25||jlD*%+BuOVk zL0$lmrYg^qi42lQb2uiV5^}@LxL?MyfnR6*sy?e|T;C7tc$4ne#l7iD^6G0Nx{Tza zK;}mv9kRf3;DJp*4|1sAyUue%Ogf8QbYDA_EW#oSi9PiHVPjY9d46vVhqO*RJM|z` z7i|qck!yeds>s6Q5y#DC}z_W1Bmr@qxor98#j>+~WA# zPG8ke<~?`Eb@7G)LBlQo^zS?oKLptt3l19;;^g!_df1Jk(t9Oc?K0C_jAh1I3lCJYHci7%abFMj?cFJ2NRf z7;HN;d+DAlDL8Zpz3smg<<#|NYkRxws3!@G+tKQ~U-W)zbO}C&u`M0c0D%m!A+xT; zlVaT=KNu{e!X^t>puW3y(-5x%ma}d42{$tOWLZAl8189~9F(FxvolXe9}f;I58aM9 z0tU=DRR0pO#%ZGA&<3vGj^t3Alm+ox~k3G54+aG@#R; zRsFia3@{;&2;EWmB}1mi8wtWjrKjWwy~aOJ$z+aX44er0w-k+ zEH2%fHWqx$b?Rp7*Okc7*%r94^_()s!w>@UnaNqiItW8@wbmV=tmi%jK0mldunSE$ zfyFWkXAWg3t@fj;OK7=9`bNq+oFxp0@f^;N&~h%|%%hWIXt@%Co#ts{Xzwt*ZySRb6}_DhXWioHjpP+y{T~-2vG658hj|^wKGjEq}n+(J)}mO9Ve z`ns~yxBkzcRiND<-9Bbn3d?K-&TKW^3FFn%m?yX3ZW37ly{NUU|12_q5Mfojj89HB zSlNuOrir4W<&S2U3;aD9eza9%eoQ@$20VTmES4M%ahcfaSoZ zt69>yVCRUU&AoI{OW8JKKQZpFUecm=Rmbvd4Bz>4^o2v79%_oQC^IRbUQFAX_gfH=q$qYMsI>J=` z)nrfqX^do^c&bGLTfdvjJzqJ-GIp2&RV)rHH8Y3#~j2j5$-X~27U%sF{GNBw*LZPb@cDExA4~J3sON}jdZN+zt z3qzhgv#^SfyM&o(V5|>(5~5Bb!B?J!H%<->*@2jB&2R(Qt1>eYpz2u`JkEX^Xt{rQ zc(@|%^)|EzpQgPM{rMxRx`3pHmVM^9M?`@y+lGdeq}}!PxmEmU6nM;hHij+q+J&}G zJun=e<@5I(E4Qi*W8rrG@`CSWQ$9BIX>(JP*LYL-xBl^?wqI5Yu*6=z>?1pOO~0PM zGrb`*Hf6#Yk}e*BJ62gT-Ufw0k$#pEVyKA!+Z#;ZLTRka_)DGi{tTtZ{D_gcCj?>h z_qh4>iB`3D1`66bbFf@p(QH|N*k=0$t`_B$t+cj6JwT>KgBAdkt2-4O5AJ%JV)BEB z*D$R)_m84-6HotRprPS*8{{YctZNK#7vP?6?wGN|hU|6+#aLVOHZ}qtdJz$dRMtU? zp?e#Sxi(Gr*amm>Br#JKiLChmY?=Wu*ZxeJ!oK-H+RHAvN%wTm&Kj z+`uFy5(ZlF+fTN2AhF%M00N;ABnKwQ3OzcYgUYf$0_+XG6D`)cl){`xKaQhNr9Ft- zk5CeK#5bXo1oBy~-!VD&&3r6<=Nb3bx81DhWfwS>MFwX13g+Txq!WE5Yr( zRe5+zGQYmJO|9WHs+tB`<=*?AMp6&t_*}YsYrnsAz+0@PI=N&uHQ+;JXTkEZNuZIZw zZ&-XKP;1l8o~vA=e8Y02+tJ^{n(~ST?(@BLV3w(OEw?%xbLt-v5B#}dn-U(Xw#Ok8 z;dp48Vjy{(=1`@Bj0s$lo=r%hym;+3aik3B4H$KOjCgn}HWtNv;~uVCtnHN4*PGV2 zaB2PZYrr&Bad5Ek$wWs-2Whm6kZW;{EV%Z(?SR@Yk|}1a-sjghl4Zq#TdEGX8Sk$q zEo$7#PFB5_c1wo&$1%`-`j$-!zv$3J(fsk%JHoi zju_gJ#g)_&XTftA>ANKa$CwJyTebP2 zZTH6sY^MrxDI7nG_yv|ZZlVx z>|E#RFc|p>Vtw|!MMUVK)VZ@appHn9BxS#3x*vt`vh{1Oq+QO7+* z{aXyzkOg+JnpQc(Mop|%Gw=KWftFL!c_`;s(At!U4J0@?gf-z?dpp$4%?+x#bX5h* zu%&h5_HK1;y@_jK>3prA@xmYQU>~mv2wm=m^9qSt2N2rP&VYq6#3t(|AhG##u$gTJzhK9R0@B^~Q ztkbPj#_W`&gGTO?vV5;Y&D-gr{EtwqidzGqK3CTF1dGL5r0ePEc#eMp6)snKC_rdyiKKNXa89cY6jKpV-$XMjfEZ9Fi5+g zl7NJOu`S^%N;)7ua4Aqt?WIOySZ+!RCj+xdQ{08TCm|=b zGIc(anc3OSRpwWyI!4OOB!1v?d6UCd2w?m*5H(nz>ceri`7@8{;tlAf%Qcro8{s>^ z&R^O?Ry{q+iXfwsz=MtJS<>FqSb`^TW;$8t{p{J_!seyOZrCWm`@_ zn%JFE5YN=5{_vsw4lQ{1FwYQXRK0WdM(FP1(jW0W;H(hF}0Agr0$ahL*H(L#N!SExKS`Co}MUtx^@&@`iYM|3AvA%duR zd>X!aw7)vlnn1VJ6Spuo!)bNM2O3_#*o#>S33=XGGG4q)Jc8!_{LpvrF-iz@&e;*r zLz!wZTY5i-{_*BG;gUNJx4jV6ACDB_<15M-a7{7iP0{S7C6q3uIjAOqICB6MeLlQO z>8^a}cyF4pWzAoPsj8=LcdygahpkQwfEHaLMjdtaZ&h>3aQB(kUj30^T`hbK&ize- zRVq5Ib79M}#$DWZ?S+VggG-aJ1%0!}NN+}lKd2#vlXev0Tkm%d$}ov}PeMB5Tm&EU z>upn>n;6Ov$4~4)ooBwrGXbL&C(5^P7scM-e;KpS8~uijt6Eaz>G468W0f%|U2{t= zI$#yB`2`wk8cEtZp}h35G~6^aZlNb9=GZUpQ&r)i9v*_ozRj)FE@2yf`uH8Wa1^57 zuF|h>R2X0Q2*>Dg6V|E0HL$t2xr9>;`&x#vAn1caGY>b;1?24jLlK>4ZQ&z_Ce~B= z!d7(&xw2~Irp=l*?Q$`DtN0?_+=8x%>^8ruT{zO`PjoUKjFG#xmj2G@kaUo4w>C7l zDeZ0E=DD9!>p6A@j|V+7bAXD~zlH_W+#({WRoSt{^4=Xc4K5ZI7K4M2t}BK{96T5ab%NDgP>W6uW%cI}oiVRTU+!fu!AuD=_EkEFdQWYr z#V_kANJVb-fGT37YFvWV=zYoICJtVeh04wASIPVQ|)U#u9=CM%>|2Oa|Hyx`5r=NnC^P(BA2N24e?vO-}L-r`my=Wc(c0X8=(_>|*}eR3H#`wlVUP d9yzn)@NCAvxL+Z_?4R{VOYPCa3aI^y{{uh^cxnIu delta 24744 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 +#include + +namespace CodeHighlight { +namespace { + +struct LanguageDef +{ + QSet keywords; + QSet types; + QStringList lineComments; + QString blockStart; + QString blockEnd; + QString quotes = QStringLiteral("\"'"); + bool preprocessor = false; + bool caseInsensitive = false; +}; + +QSet words(const char *list) +{ + QSet set; + const QString text = QString::fromLatin1(list); + for (const QString &word : text.split(QLatin1Char(' '), Qt::SkipEmptyParts)) + set.insert(word); + return set; +} + +const QHash &definitions() +{ + static const QHash table = [] { + QHash defs; + + LanguageDef c; + c.keywords = words("auto break case const continue default do else enum extern for goto if " + "inline long register restrict return short signed sizeof static struct " + "switch typedef union unsigned void volatile while _Bool _Static_assert"); + c.types = words("char double float int size_t ssize_t ptrdiff_t FILE int8_t int16_t int32_t " + "int64_t uint8_t uint16_t uint32_t uint64_t bool"); + c.lineComments = QStringList{QStringLiteral("//")}; + c.blockStart = QStringLiteral("/*"); + c.blockEnd = QStringLiteral("*/"); + c.preprocessor = true; + defs.insert(int(Language::C), c); + + LanguageDef cpp = c; + cpp.keywords.unite(words("alignas alignof and asm bool catch class concept constexpr const_cast " + "co_await co_return co_yield decltype delete dynamic_cast explicit export " + "false friend mutable namespace new noexcept not nullptr operator or " + "override private protected public reinterpret_cast static_cast template " + "this throw true try typeid typename using virtual xor final requires")); + cpp.types.unite(words("std string vector map set unique_ptr shared_ptr size_t")); + defs.insert(int(Language::Cpp), cpp); + + LanguageDef py; + py.keywords = words("and as assert async await break class continue def del elif else except False " + "finally for from global if import in is lambda None nonlocal not or pass raise " + "return True try while with yield match case"); + py.types = words("int float str bytes list dict set tuple bool object"); + py.lineComments = QStringList{QStringLiteral("#")}; + py.quotes = QStringLiteral("\"'"); + defs.insert(int(Language::Python), py); + + LanguageDef js; + js.keywords = words("async await break case catch class const continue debugger default delete do " + "else export extends finally for function if import in instanceof let new of " + "return static super switch this throw try typeof var void while with yield " + "null true false undefined"); + js.types = words("String Number Boolean Object Array Promise Map Set JSON Math Date RegExp"); + js.lineComments = QStringList{QStringLiteral("//")}; + js.blockStart = QStringLiteral("/*"); + js.blockEnd = QStringLiteral("*/"); + js.quotes = QStringLiteral("\"'\x60"); + defs.insert(int(Language::JavaScript), js); + + LanguageDef ts = js; + ts.keywords.unite(words("abstract declare enum implements interface keyof namespace never readonly " + "satisfies type unknown infer is asserts override private protected public " + "any symbol bigint")); + ts.types.unite(words("string number boolean any unknown never void")); + defs.insert(int(Language::TypeScript), ts); + + LanguageDef java; + java.keywords = words("abstract assert break case catch class const continue default do else enum " + "extends final finally for goto if implements import instanceof interface " + "native new package private protected public return static strictfp super " + "switch synchronized this throw throws transient try volatile while var " + "true false null"); + java.types = words("byte short int long float double char boolean void String Object List Map Set"); + java.lineComments = QStringList{QStringLiteral("//")}; + java.blockStart = QStringLiteral("/*"); + java.blockEnd = QStringLiteral("*/"); + defs.insert(int(Language::Java), java); + + LanguageDef rust; + rust.keywords = words("as async await break const continue crate dyn else enum extern false fn for " + "if impl in let loop match mod move mut pub ref return self Self static " + "struct super trait true type unsafe use where while yield"); + rust.types = words("i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 bool char str String Vec Option " + "Result Box"); + rust.lineComments = QStringList{QStringLiteral("//")}; + rust.blockStart = QStringLiteral("/*"); + rust.blockEnd = QStringLiteral("*/"); + defs.insert(int(Language::Rust), rust); + + LanguageDef go; + go.keywords = words("break case chan const continue default defer else fallthrough for func go goto " + "if import interface map package range return select struct switch type var " + "true false nil iota"); + go.types = words("bool byte complex64 complex128 error float32 float64 int int8 int16 int32 int64 " + "rune string uint uint8 uint16 uint32 uint64 uintptr any"); + go.lineComments = QStringList{QStringLiteral("//")}; + go.blockStart = QStringLiteral("/*"); + go.blockEnd = QStringLiteral("*/"); + go.quotes = QStringLiteral("\"'\x60"); + defs.insert(int(Language::Go), go); + + LanguageDef json; + json.keywords = words("true false null"); + json.lineComments = QStringList(); + json.quotes = QStringLiteral("\""); + defs.insert(int(Language::Json), json); + + LanguageDef bash; + bash.keywords = words("if then else elif fi for while until do done case esac function in select " + "time return exit local export readonly declare unset echo printf cd source " + "alias set shift trap true false"); + bash.lineComments = QStringList{QStringLiteral("#")}; + bash.quotes = QStringLiteral("\"'\x60"); + defs.insert(int(Language::Bash), bash); + + LanguageDef sql; + sql.keywords = words("select from where insert into values update set delete create table drop alter " + "index view join left right inner outer full on group by order having limit " + "offset union all as and or not null is in like between distinct case when " + "then else end exists primary key foreign references default unique check"); + sql.types = words("int integer bigint smallint varchar char text date time timestamp boolean float " + "double decimal numeric"); + sql.lineComments = QStringList{QStringLiteral("--")}; + sql.blockStart = QStringLiteral("/*"); + sql.blockEnd = QStringLiteral("*/"); + sql.caseInsensitive = true; + defs.insert(int(Language::Sql), sql); + + LanguageDef yaml; + yaml.keywords = words("true false null yes no on off"); + yaml.lineComments = QStringList{QStringLiteral("#")}; + defs.insert(int(Language::Yaml), yaml); + + return defs; + }(); + + return table; +} + +const LanguageDef *definition(Language language) +{ + const auto &defs = definitions(); + const auto it = defs.constFind(int(language)); + return it == defs.constEnd() ? nullptr : &it.value(); +} + +} // namespace + +Language fromInfoString(const QString &info) +{ + QString name = info.trimmed().toLower(); + if (name.isEmpty()) + return Language::None; + name = name.section(QLatin1Char(' '), 0, 0); + + static const QHash aliases = { + {QStringLiteral("c"), Language::C}, + {QStringLiteral("h"), Language::C}, + {QStringLiteral("cpp"), Language::Cpp}, + {QStringLiteral("c++"), Language::Cpp}, + {QStringLiteral("cc"), Language::Cpp}, + {QStringLiteral("cxx"), Language::Cpp}, + {QStringLiteral("hpp"), Language::Cpp}, + {QStringLiteral("python"), Language::Python}, + {QStringLiteral("py"), Language::Python}, + {QStringLiteral("javascript"), Language::JavaScript}, + {QStringLiteral("js"), Language::JavaScript}, + {QStringLiteral("jsx"), Language::JavaScript}, + {QStringLiteral("mjs"), Language::JavaScript}, + {QStringLiteral("typescript"), Language::TypeScript}, + {QStringLiteral("ts"), Language::TypeScript}, + {QStringLiteral("tsx"), Language::TypeScript}, + {QStringLiteral("java"), Language::Java}, + {QStringLiteral("rust"), Language::Rust}, + {QStringLiteral("rs"), Language::Rust}, + {QStringLiteral("go"), Language::Go}, + {QStringLiteral("golang"), Language::Go}, + {QStringLiteral("json"), Language::Json}, + {QStringLiteral("bash"), Language::Bash}, + {QStringLiteral("sh"), Language::Bash}, + {QStringLiteral("shell"), Language::Bash}, + {QStringLiteral("zsh"), Language::Bash}, + {QStringLiteral("sql"), Language::Sql}, + {QStringLiteral("yaml"), Language::Yaml}, + {QStringLiteral("yml"), Language::Yaml}, + }; + + return aliases.value(name, Language::None); +} + +QVector tokenize(const QString &text, Language language, bool inBlockComment, + bool *newBlockComment) +{ + QVector spans; + if (newBlockComment) + *newBlockComment = inBlockComment; + + const LanguageDef *def = definition(language); + if (!def) + return spans; + + const int length = text.size(); + bool comment = inBlockComment; + int index = 0; + + if (def->preprocessor) { + int start = 0; + while (start < length && text.at(start).isSpace()) + ++start; + if (start < length && text.at(start) == QLatin1Char('#')) { + int end = start + 1; + while (end < length + && (text.at(end).isLetterOrNumber() || text.at(end) == QLatin1Char('_'))) + ++end; + spans.append({start, end - start, Token::Preprocessor}); + index = end; + } + } + + while (index < length) { + if (comment) { + const int end = text.indexOf(def->blockEnd, index); + if (end < 0) { + spans.append({index, length - index, Token::Comment}); + index = length; + break; + } + spans.append({index, end + def->blockEnd.size() - index, Token::Comment}); + index = end + def->blockEnd.size(); + comment = false; + continue; + } + + bool lineComment = false; + for (const QString &prefix : def->lineComments) { + if (text.mid(index, prefix.size()) == prefix) { + spans.append({index, length - index, Token::Comment}); + index = length; + lineComment = true; + break; + } + } + if (lineComment) + break; + + if (!def->blockStart.isEmpty() + && text.mid(index, def->blockStart.size()) == def->blockStart) { + const int end = text.indexOf(def->blockEnd, index + def->blockStart.size()); + if (end < 0) { + spans.append({index, length - index, Token::Comment}); + comment = true; + index = length; + } else { + spans.append({index, end + def->blockEnd.size() - index, Token::Comment}); + index = end + def->blockEnd.size(); + } + continue; + } + + const QChar current = text.at(index); + if (def->quotes.contains(current)) { + int end = index + 1; + while (end < length) { + if (text.at(end) == QLatin1Char('\\')) { + end += 2; + continue; + } + if (text.at(end) == current) { + ++end; + break; + } + ++end; + } + end = qMin(end, length); + spans.append({index, end - index, Token::String}); + index = end; + continue; + } + + if (current.isDigit()) { + int end = index + 1; + while (end < length) { + const QChar ch = text.at(end); + if (ch.isLetterOrNumber() || ch == QLatin1Char('.') || ch == QLatin1Char('_')) + ++end; + else + break; + } + spans.append({index, end - index, Token::Number}); + index = end; + continue; + } + + if (current.isLetter() || current == QLatin1Char('_')) { + int end = index + 1; + while (end < length + && (text.at(end).isLetterOrNumber() || text.at(end) == QLatin1Char('_'))) + ++end; + const QString word = text.mid(index, end - index); + const QString probe = def->caseInsensitive ? word.toLower() : word; + if (def->types.contains(probe)) + spans.append({index, end - index, Token::Type}); + else if (def->keywords.contains(probe)) + spans.append({index, end - index, Token::Keyword}); + index = end; + continue; + } + + ++index; + } + + if (newBlockComment) + *newBlockComment = comment; + return spans; +} + +} // namespace CodeHighlight diff --git a/src/CodeHighlight.h b/src/CodeHighlight.h new file mode 100644 index 0000000..c7f0272 --- /dev/null +++ b/src/CodeHighlight.h @@ -0,0 +1,44 @@ +#pragma once + +#include +#include + +/// 围栏代码块里的轻量语法高亮。 +/// +/// 不依赖任何第三方库,按语言给出一组关键字 + 注释 / 字符串规则, +/// 逐行扫描出 token,由 MarkdownHighlighter 上色。 +namespace CodeHighlight { + +enum class Language { + None = 0, + C, + Cpp, + Python, + JavaScript, + TypeScript, + Java, + Rust, + Go, + Json, + Bash, + Sql, + Yaml, + Count +}; + +enum class Token { Keyword, Type, String, Number, Comment, Preprocessor }; + +struct Span { + int start = 0; + int length = 0; + Token token = Token::Keyword; +}; + +/// 从 ```cpp 这类 info string 里识别语言(大小写不敏感)。 +Language fromInfoString(const QString &info); + +/// 扫描一行,返回需要着色的区间;inBlockComment 传入 / 传出跨行注释状态。 +QVector tokenize(const QString &text, Language language, bool inBlockComment, + bool *newBlockComment); + +} // namespace CodeHighlight diff --git a/src/MarkdownHighlighter.cpp b/src/MarkdownHighlighter.cpp index d24f511..ddb2b9c 100644 --- a/src/MarkdownHighlighter.cpp +++ b/src/MarkdownHighlighter.cpp @@ -8,7 +8,22 @@ namespace { constexpr int StateNormal = 0; -constexpr int StateInFence = 1; + +// 围栏状态:1 + 语言编号 * 2 + 是否在块注释里。 +int fenceState(int language, bool inComment) +{ + return 1 + language * 2 + (inComment ? 1 : 0); +} + +int stateLanguage(int state) +{ + return (state - 1) / 2; +} + +bool stateInComment(int state) +{ + return (state - 1) % 2 != 0; +} QStringList monospaceFamilies() { @@ -103,6 +118,22 @@ void MarkdownHighlighter::rebuildFormats() m_fenceFormat.setFontFixedPitch(true); m_fenceFormat.setForeground(c.editorText); + m_fenceMarkerFormat = QTextCharFormat(); + m_fenceMarkerFormat.setFontFamilies(monospaceFamilies()); + m_fenceMarkerFormat.setFontFixedPitch(true); + m_fenceMarkerFormat.setForeground(c.placeholder); + + auto tokenColor = [](const QColor &color) { + QTextCharFormat format; + format.setForeground(color); + return format; + }; + m_codeKeywordFormat = tokenColor(c.codeKeyword); + m_codeStringFormat = tokenColor(c.codeString); + m_codeNumberFormat = tokenColor(c.codeNumber); + m_codeCommentFormat = tokenColor(c.codeComment); + m_codePreprocessorFormat = tokenColor(c.codePreprocessor); + m_linkFormat = QTextCharFormat(); m_linkFormat.setForeground(c.link); m_linkFormat.setFontUnderline(true); @@ -141,6 +172,24 @@ QTextCharFormat MarkdownHighlighter::compose(const QTextCharFormat &specific) co return result; } +const QTextCharFormat &MarkdownHighlighter::tokenFormat(CodeHighlight::Token token) const +{ + switch (token) { + case CodeHighlight::Token::Keyword: + case CodeHighlight::Token::Type: + return m_codeKeywordFormat; + case CodeHighlight::Token::String: + return m_codeStringFormat; + case CodeHighlight::Token::Number: + return m_codeNumberFormat; + case CodeHighlight::Token::Comment: + return m_codeCommentFormat; + case CodeHighlight::Token::Preprocessor: + return m_codePreprocessorFormat; + } + return m_codeKeywordFormat; +} + QTextCharFormat MarkdownHighlighter::hiddenFormat(const QColor &background) const { // 用“和背景同色 + 极小字号”把标记藏起来:文字仍然留在文档里, @@ -187,46 +236,67 @@ void MarkdownHighlighter::applyDelimited(const QRegularExpression &pattern, cons void MarkdownHighlighter::highlightBlock(const QString &text) { + const int previousState = previousBlockState(); setCurrentBlockState(StateNormal); m_blockBase = QTextCharFormat(); - if (text.isEmpty()) + + const bool wasInFence = previousState > 0; + const int fenceLanguageId = wasInFence ? stateLanguage(previousState) : 0; + const auto fenceLanguage = static_cast(fenceLanguageId); + const bool fenceComment = wasInFence && stateInComment(previousState); + + if (text.isEmpty()) { + // 空行也要把围栏状态传下去,否则代码块会被一条空行截断。 + if (wasInFence) + setCurrentBlockState(fenceState(fenceLanguageId, fenceComment)); return; + } const ThemeColors &c = ThemeManager::instance()->colors(); const bool rendered = m_rendered; const bool active = isActiveLine(); static const QRegularExpression fencePattern(QStringLiteral("^\\s{0,3}(?:```|~~~)")); - const bool inFence = previousBlockState() == StateInFence; const bool fenceLine = fencePattern.match(text).hasMatch(); // ---- 围栏代码块 ----------------------------------------------------- - if (inFence) { - if (!fenceLine) - setCurrentBlockState(StateInFence); - if (rendered) { - if (fenceLine && !active) { - apply(0, text.length(), hiddenFormat(c.editorBase)); - } else { - m_blockBase = m_fenceFormat; - apply(0, text.length(), m_fenceFormat); - } - } else { - m_blockBase = m_codeFormat; - apply(0, text.length(), m_codeFormat); - } - return; - } - if (fenceLine) { - setCurrentBlockState(StateInFence); - if (rendered) { - if (!active) + if (wasInFence) { + if (fenceLine) { + // 闭合围栏行 + if (rendered && !active) apply(0, text.length(), hiddenFormat(c.editorBase)); else - apply(0, text.length(), m_fenceFormat); - } else { - apply(0, text.length(), m_codeFormat); + apply(0, text.length(), m_fenceMarkerFormat); + return; } + + bool inComment = fenceComment; + bool endsInComment = inComment; + m_blockBase = m_fenceFormat; + apply(0, text.length(), m_fenceFormat); + + if (fenceLanguage != CodeHighlight::Language::None) { + const QVector spans = + CodeHighlight::tokenize(text, fenceLanguage, inComment, &endsInComment); + for (const CodeHighlight::Span &span : spans) + apply(span.start, span.length, compose(tokenFormat(span.token))); + } + + setCurrentBlockState(fenceState(fenceLanguageId, endsInComment)); + return; + } + + if (fenceLine) { + // 开围栏行:从 info string 里认语言 + QString info = text.trimmed(); + info.remove(QRegularExpression(QStringLiteral("^(?:```|~~~)"))); + const CodeHighlight::Language language = CodeHighlight::fromInfoString(info); + setCurrentBlockState(fenceState(int(language), false)); + + if (rendered && !active) + apply(0, text.length(), hiddenFormat(c.editorBase)); + else + apply(0, text.length(), m_fenceMarkerFormat); return; } diff --git a/src/MarkdownHighlighter.h b/src/MarkdownHighlighter.h index 4585147..e6d8b24 100644 --- a/src/MarkdownHighlighter.h +++ b/src/MarkdownHighlighter.h @@ -1,5 +1,7 @@ #pragma once +#include "CodeHighlight.h" + #include #include #include @@ -42,6 +44,7 @@ private: const QTextCharFormat &contentFormat, int contentGroup, const QColor &hideAgainst); QTextCharFormat compose(const QTextCharFormat &specific) const; + const QTextCharFormat &tokenFormat(CodeHighlight::Token token) const; QTextCharFormat hiddenFormat(const QColor &background) const; bool isActiveLine() const; @@ -56,6 +59,12 @@ private: QTextCharFormat m_emphasisFormat; QTextCharFormat m_codeFormat; QTextCharFormat m_fenceFormat; + QTextCharFormat m_fenceMarkerFormat; + QTextCharFormat m_codeKeywordFormat; + QTextCharFormat m_codeStringFormat; + QTextCharFormat m_codeNumberFormat; + QTextCharFormat m_codeCommentFormat; + QTextCharFormat m_codePreprocessorFormat; QTextCharFormat m_linkFormat; QTextCharFormat m_urlFormat; QTextCharFormat m_quoteFormat; diff --git a/src/ThemeManager.cpp b/src/ThemeManager.cpp index e752855..df96e0e 100644 --- a/src/ThemeManager.cpp +++ b/src/ThemeManager.cpp @@ -93,6 +93,11 @@ ThemeColors lightColors() c.emphasis = hex("#4b535c"); c.code = hex("#b4295a"); c.codeBackground = hex("#f2f4f7"); + c.codeKeyword = hex("#0550ae"); + c.codeString = hex("#0a7d3a"); + c.codeNumber = hex("#953800"); + c.codeComment = hex("#6e7781"); + c.codePreprocessor = hex("#8250df"); c.link = hex("#0969da"); c.linkUrl = hex("#6b7480"); c.quote = hex("#6b7480"); @@ -138,6 +143,11 @@ ThemeColors darkColors() c.emphasis = hex("#c3c9d1"); c.code = hex("#ff8fbf"); c.codeBackground = hex("#292c33"); + c.codeKeyword = hex("#79b8ff"); + c.codeString = hex("#7ee787"); + c.codeNumber = hex("#ffab70"); + c.codeComment = hex("#8b949e"); + c.codePreprocessor = hex("#d2a8ff"); c.link = hex("#62a8ff"); c.linkUrl = hex("#7f8791"); c.quote = hex("#8b939d"); diff --git a/src/ThemeManager.h b/src/ThemeManager.h index b72a34a..288fe47 100644 --- a/src/ThemeManager.h +++ b/src/ThemeManager.h @@ -44,6 +44,11 @@ struct ThemeColors QColor emphasis; QColor code; QColor codeBackground; + QColor codeKeyword; + QColor codeString; + QColor codeNumber; + QColor codeComment; + QColor codePreprocessor; QColor link; QColor linkUrl; QColor quote;