From 46edc3c8878fce7b27a9275280d6f70a125c1697 Mon Sep 17 00:00:00 2001 From: Arkerthan <arkerthan@gmail.com> Date: Thu, 14 Mar 2019 21:32:57 +0100 Subject: [PATCH] java final --- SanityCheck.jar | Bin 20729 -> 20913 bytes devTools/javaSanityCheck/src/Main.java | 17 ++++-- .../src/element/AngleBracketElement.java | 49 ++++++++++++------ 3 files changed, 46 insertions(+), 20 deletions(-) diff --git a/SanityCheck.jar b/SanityCheck.jar index 36c886155cf61858bb6e54466cb88efc05f615cd..478417de473b6dd0de5575eef4d474e2ef3d7073 100644 GIT binary patch delta 9066 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 H|7Q3fse66t delta 8878 zcmYkCRa6{I)2)%<Fu1z}cNuJOcXtaK+}#FuNf?~q4nYUE;O-LKg1ZC_lJkDKIe*_g zd-v+DRabSfS2YyFJ{Q7bs4KyLz=J_XMurJAa{7u94gWu6g!~T>5?IQA1i>=>qb)4o z{|GIB-Nl5rL3e^gV5@=yJhkr0{|0(MHgb5y<^8l#GjG4}BJ^wFNus6dHQ>`Bu*%#4 zRn}8^EA3FV$#>ubi=0J?&>LvN6w51St72k2xXlF0RYguERs}uspl`cm&Tx<*@Z(n5 zN%(vN^dZnC`0??jCwTiY=%qZv41p6Rf0c`ni}bKSclaLlmp53x0!kg~-_X7`oy^Dm zbIn{TJdAYkD)E;a#P?OXPbjq0w7?0ggg<_X4b>Tcu@&W8A}TO8V;z5^a7WcGI3ujn zdc$%A%dut8bfbJHm^3)aY}8l$Rn&Hb6GRt7K`>&3_o~^ad(*>)@uT0HIC<r3I5{^( zvn4u(=4{0d7XnxqA5{A(Ba8v>oFFv-4^+9sgrLT<QeB|XS7!|>-Z4OU!2^}=_#tpG zuDFcA@=n-(y`kwNh}DS-AF{V5?=#S^snrd-k98f?BdS$W-rEyz<F2AV-J|Z00gME{ zi4@7Q1cge2$ZEc&Ptc`zL}Y*RWTwi*y}{yuqFLT3=7UMh@Z%V&7Axvh6Qgi3o^=X$ zm?`4{5sSX{Rhb%Dff8zNZ=1CC9r|zPTa(tMAOwU}C4<6OeL<GRa!xV~69Y3Xf;hrz zYwRsI{NXTrt4b2gcpuA!ZxyIelQK_QCOnj-h$58jNn2|=UY1%!y+|C7JCSskq<XS2 zZBk31H@J)~IpVf@Q6S&<7P=}vSYF&=PH7uMzu4^Y>qh_Es>T=U{8^SSpCn}LYswg+ zxq0%TK%y#@2uqFhMZJusdLW*4-6RJ)v-0JEoQ2nzh@NoQFTU)?TJM-)8-Hs??25P{ zT&R>+pRYcy^zqTyB^msO_V1!(Oqe%p9H*WjC9qibuz{@lYhTPR)fnxDCFbDiUf=9S zeSNSjA&{KqNw6MSPtX<N36(a$N;v64kgquw(MNo+>{BX3W*6O_H4@;LB2wI7G5Q1w z{7hjZRSXt4hC_Swb9B2yzgNF}@g{!5AKUizP(4?9kg3-WC-bVtP(x;?Y$6c(yaCWf z4=zcyY~S%34E^$jzrVgIK;Id4fJg}?trOS2)JUaGiCjNQvhUd|DWno$%yy}|j1`ri zpB)>%Hq;^Rm7)5HzQ=>qO~F%#w}rlHm5ta!@@;$6cOZ28mr6@b=stnQ$B1!()84CV z0`vZ7o+DHVAu$bHF5~mwbzeDo-{sIpSMX%$<4u5WLovD!>m|V3%V!gxj5xGDCLb8~ zM+g{em{IbJhAYhki22((aHp5@n%dj~^PUY)ho|zICUDV1ldTwCQ+48JfZe*JTK~tW z!?BuL9R}mAytex$h*t-9@(D@smwdwDVEN!5Goi^clWVW<U0opl@Rlhx=(~j)1vn<m z{x$nm6cCccH1M*E%KoEJ-b9{t(xUIm%b`E^6aEh*og4OyXy(N~@{+@p<WC>+ap=v| zOAi1Z!5ws$Flt9drF_waM>d)zQSDnyI%H-3bxl>x-z*OzxJ+EnjPZ>oD9kwt-<^}v zq`xmkv_xE2u{(d#6XGCL#C*W>90AXq&(#8}qE*tmjk7F%vd;J!@+%R|vxT{K5KNId z8i&)d^_rM?C89geO?1|ObWp2C-t(W0XnwUn>jCzlA}MN1Z`hhY<f&12uO|zgXM9TN zRM7Waey{A&*ViRSr7yGQSmu~D08c4!J2c9xXg8O|4g1=FYJs+e+T{~OCt#+FFprT! zbOR8{^nsslKb1z8IO7gKE&->j+TzcR>690=!s~1!dNIP^(-vi^Ps_VgWE*g|ib$XQ zRR_?op{?FPRNa-Yh?sHDQ#E^*DCux(ah=#6xGa~_$_k8q?(f#`=>n{9W^2DTF&7p{ zLYr>RSD_4if%4Yq-%C?JK7hSAgC^8rXEV@SxfZ!6%>&<u3{3TSzT5cb-+<7C*KGMd z1<11+Rn2Tvqp+IS+h>P2BL<?&pyLv!b3GB4aVhgpdl1|BO*x`?EJ(<IWQUd_qz{-L zi8ZsK{SC<VHVw#+zK5}Lu|Z2Mqe+z9p^T_0LGacy<RQzNI$lcHvH|x|Eu6SWyChmt zTGF;+pO{ul9C4F&_Q<Yu)2n1I7fra4xc>p#Ne7{KXZ8-oy)9BObt}j%Er<1{?s~l& zSyp^CVtqXe#%obN@}!=~?sBNUeAD;wHu!6U?uxOvOl%Q^UH2@Su6rL_ny+B)=rp5$ zIq0j7NlZI+1`6u4j|G#O66M~5n-ciamJsH=t}iez;Mt%GnEXMThf~CfnTv-ei9<Vp zWsB6FU+hwf(%dbdj?F7$A@@W*{mX{LJE`SqhKdP?YU>Rv(QdDP0u*fDnCmRL)!Z^} zLEeH}2cCk%cDLBK*Mc^j_sZXTSp&lZQ#g|yGu7VI#l!1E*ulg2`v<UIWO26KwIxjY z(!s_u&-%&;jAfDflBN2x%(Z3Asp@zvjG<|s@U_Jl>UOx}#{liwZcx%jGV@vzr%05& z|F@$nOzh$rb)}K#;v<K}1%7>%Z3~Rt{i|3l+X9}pIbM=8W!(BLPhwzZ*)IYuK47+e z!x-KOd0B4T1o)2b^031*xso_X5ao)Gy#KB2$1d!`qwlOI4yF=qgU)y#&<?dlY2hY@ zmsGd}!8Vn^yu1movjpE)(lB;YQ}96^-`6niQyrcRWHID($-S>`2k}eE`pq{_h6g3g zLO}ybHP;jNAyjsVF_}?3Q(bMJ;=@?;D>uTPDlONPJvbwlV4{tEVs(42wQj=V<YT!( z(4PT@m%+Mo+?Phyb!$NkX55^t*ulvOLl!PQ6$9h}2D0r$WZzsnn)(MR=iwo_#K!%f zs9ze|DGk=YT!_S&)0qB=_vK?qj%xih2%B&xL~a;H^p(GkR!m7Qc%bv>Gk&v<qx)u; zv^0n#85PWBM{a*s0cc*@DB+WsYf3K?6EizZ0b~7Qv4a6L)L?pmehgonAd~KSJ@k_% zJkqcKWn>nptvhNnjrOU}wG2QS@un3O#|0yFg<#&`j69EkzM{@x%&KHM2IrSNO&|(7 zz+sT6K-T=IGVekbu6x<1beE1AmUMkJInL*lqQK@gsf|n11)873z3rwUBK$`m=E?=9 zYM$U!17nrRjuduSE(;jyQNfZJ?+J*iZx~N#z+I#BK{GAoW){0D6Q;7p{%?ZszaG4q z)z(f#HdT4G;}^XQF;qz=`bD@t=IM&gP-l1jR=Uov$ERJP7gWe;B3EJ~ngXtdv&s@J zc!BYf@HN=V5$_SZv2&He9sY8V2-FOJpIZ%zn@dfhs5)H5d`hbM<C8bvb95~h8~Q{j zyCcW`vwWrYb3K9B?q`rl4MYEwafu594-kT2B;TjoXvtr?OC@-Xa6ioCew(?Op`5B} zL(=O4|NNJRL|JMLq$Fh|GEohjd5~G_T>xkD4JxiBE5ok~3Z{Cx$9_d0;Um4e{DR(d z2{GSjPucx(6WQ)yCZ8MRrbsy?<Yyu6?&+Z8_}c!Pkud0K&7gjsQ@~Du+l~(8iP9>A z+1lo~p(yB^F#HKKaY&1o0?8K6v@lkn|9)S|Imb!R3zVfbqQzR*n=Kf8i{)n#*9VS` zH!2l9Sx8o9c}@R(Y?!&nYOT^qqCkJ`pT$+LMVa?gjTH9|B`OHLlh^`Xk67zBC`vQR zh#1JzHFPbN<WRH&MY`H=qd%#p6|5cmQzf&#;1pEZ^Vk-==6uydwu~3l%r)X=(5bb2 z@JE7fgipsT%}X+?j1up-!?TP$V-I}mgD3c8JgN!k^fH?-bVIlK{Zu&XnNVb$r($yr z;>LB$b0V<?Iv2H{FZ!(vdQ1}-hB#@*bZbX^_B|97kH4m28|FgYfj10Ovttr1uf8Ea z8WO8WJ#Py0pHn1JT-GG0<c%D+W!5PvG0VgLfEq1}-!F@GCsoH&k)q)QT{WCva3XF= zNVr1>B<jQvQ3gT<cn2x<GNm$2Y1-Z4KicS-77YH%#%65jut8L`TK+B``)eGtD`u60 z$|w+!;%!;|ko9@*bK*lR(Ho|^5)v}2C!BdJ8VrmIG2{}F45~vxfdxOI?*#E?2Z9Yy z0=1Wx#Ezz{wybU&Rd7D_1J9|cBV^Q5VkB2+{u`^GXxKz;D8@3!COOeyYjlj(*X(Ny zozM(r9CFsy5NsJ>zuOXatjaiCn6|RpH+$C=rCfoxa<Y_D6b6%D4>x^gL>@Pwn}0<f zZw7cqDCvtlQf1gX!kySVaxZR2A>inNv8r)Z!Xs#P2%5fD`|Owu`}mOsF~`_QaZ|{q zv2O2yF?BKuv)bg5!nvCUlU|1}w;J|)<!vT?@`>t0$7ml<36Iv`G>!qZR9KF}LnrU3 z=*0M=#bLGaMNyWchkIfZn$?)0pV4u@Ywo1k{;#1f=`wbFg(Kt%?zD_fTQK!{iAU}D zQM)ZyoqGG0j8ePAfh-~0-tWku(s+&?G#%4}BK)qkA(eT9y&~CK_gg~)yIjaJ+7V(} zj!9EC2Tm5Lj<ee>J%da776F5c&a(-72eRmXeEX8h;03})Uq*YZUwN0wC4J=Et&M<R zYg@s>n8`e%c2B>|db`m<0XTkbXoZ4*)wg_*?wnruCAUjXJ0=cl*=VsbhQe@_cG4}m zQLdQ}d5qVpojj_3>gINDhHNuj@ZGlQqIav7beVk!6yNaZ28mYOMjPWDVJeL}V?`w+ zKNm}O&dDratEj$bHt`ET@AZ4ckGCrR1u}s9$6AG-0Sw^zvHTPiFhANrx%FKLvS7t+ zF8d$G?b6%N#-6y_9|wFU_9*<waF(vTZi5<6KkM|E9n5eEcK#CS19tNa^ZxiqcJY0o zcvF^lt2Fx5!k-aqdwbFPspG77&i+`#OwVYMlO*%j2tJouBrk?UnK1XFYxstkR5xzN z*M-VT9~J)zXRZP}4qS)!p&_C305z!2lyFfh*Q@5nmTGa8b8tRPL3v|R`&*GC#t7Vv zxWHg4Vf<N-bD5@+I1L4|B#eCK4|h5z5P4$39Q>G<L(R{{WpnA`UB*<lv6Mxem?5qf ziw}07)tVP6x1eo9Y@2Z}l9#}~i0x~hG?VlRcR5QKs2=xf75LD_vXMXX?OMD+z`~>G za|X84f{%eS+RNPzP=w@5aGY(j4?+Rdhb$6!5{i}H@K|7-t)3=@Vvs@Yv}Le{VCSz5 zcXo;)*GX-zLN%`Ki~>OD_v*wx?x^waLi-+RBLF<X*0N3$t8=G>Fk~Y)17ckO5)r%c z(Zw%WhuQ}zV5>Rt6jpAX7CCV_=(=)s(JuP0RB9=HhOoYxU2#Td>E+Ac#Mlaq^((KT z72{?w((qzmBMcCER3<B<SkG6|R=U??Y}^sh2}wJ)v1SB{4oM+2m$jpuywNnV0<TWT zA{Yb5MveIHB-Carn91BafSSv*`C=|w(`BpXkY7mJ;CGrGy#o$dpIu9J+^-nKA1bD~ zgLHVSu3P}mi9tp<H*B4H(YVxL$CYeuxp|URF3`w>+`M1Q6Zts|8mx9OmThu<W>qsr zXedvf!89@YS#Z2iC$pSk(pIc0O2i<n9P7dwG}9BPe~=JkHfL#=t+oF|Q}6dFl!m~r ztl6Ok%!cU?Q^E_Q51gSW-LAM-enKB?L6UrTb(#DS1t?KwpAy$g2$GjRKENbNq3Xa? zNHVb2p@l4L9E!eXUrR-Ga2vop{KCemudB+Qw32&>6f#dJ4lto&re_sGv)v>@eT<ra ziaT&sRvSb?HaiRc5lb^VUj-c`)hMQ^cs#!apFyGIpa2v=IG#wZB9sslc2xavf4ED- zgHYm!tQjZ5Xzfo|np2+dS}bO+o`o@U$7pvUvf$Ja+}kHUkzPiV3afn@X0X9t-L)R9 zKM6Pyla{!V3za=dCdli{h#aqw><Hf<)?Hq(`d;y?S8vJib^#%us=Jt@5Q|<VsNe?7 zC0cuf5-fk<V*ko%^;;oWdQVQ~XX_I+-D1CQ-SBo<2Jbt7^5;`$pklGhf)DR|-gRI; zxR=){@Otqnnll$XI0BnWdtsW3{6Pi%+ajLohqppMx4MF&<^19Q{wLog^L0Qj=bso} zzYL2V<lDUp{Dqk<yTN_+NX-9`C5j0qKjHD@zx5b=uAQUq;P3VxFEk)xQGG*5$|AdV zxIi@bMUBa@(RY&U*quq3XCdiUu7k1QdoPu4a~z#)skLp>`=YUDc2gHRbTYRa0=Of+ zgyDMOSLS&g-fD3bAgYEa7>s-}>4;f4ZoLyG8~tqXC6?>Q(lO+YsjLbb8C(WFnCdH- zt3>L~GP%Nt=yIthTbShX<JQTSMUu(!*j~jkkg@c8AOLt7JyqUb@xF`vh0SsD5+F++ zD)zU6U|*rWSPlV#J0kL#ruRN8Jqae}ABk1HG9><;1T*ata{jT1rF&I+)k`!x)Kh$N zDd;w&S>L;Q#Z3G=_7_f-&-NAU@{Var;P7e|9BOykMvXP{mxDY|OK;(bU@@8e@a`)N zhUvnSm#E1%wcg<l?Dd0-GKagc^JV@gl~tySsy4t;UlKXVkD<@J6xuL~_5v-OC67ee z{jcAu7_%+3&a+d>1vq~?kaJ}hF{`SKMT7A&kY5<yl!^n6omH56;o|7QFuZ@ipV_G} zX~*%F>eJ<x@$;5OyzrH3yE!NlcgJv7GZ7^b2Xmmp)|I8A(Wv}>K*So7-dHcaLJ0G{ zpAB{qu!x9YYQb{WWzHn%fqKYk(KF(Pwi{8&S&jQEYjwTXWB-oocXLUmc=YlMnzgab zB(#uS;M7FW1QJ}6sxy;;uOtz}jj!-?>Fwg=$h601IN1UME_5S>!iVk8!<}jKba5=` z_mqQP##DAG?0AM%Bu<&NLUYD>{gg8t4-7~|q-OdH_so!^$aRgpO<?thF)TgXbLg`x zHxo9iM-KMcdmODAMC`s>@R1Tna}tdTbO|Wna?5%9Z*h8+5S`+IvoHkX3XKVKHuO@8 ze0`T{^#w9xNYlUKRt@h=8h94EyCQP;j82jt(oX7h-mTbJQZ_Y5PnLnEvJUQ}cC82A z^*2I199K|QGa_pAeUEQ<BG5EHF1mir61Fx-idAQ%>81+Hr;LdH=<aH3xAdwp=lQ`x zH&ipBG^!JoA5TmXtmWr5I6yFk&llzos^@ntHP`iOuT^P(Gs23oHhFE-gZ|`DSm!S> zavN+!$*I5)Mo|VDZx$v}^ofq}b$Xv0^&OMQY!G7_(R~<SA^hU2!<Uoh0&=v|*yr~? zi~R(G%xg9Nw%)%$Pl_T>|EyRYRn1|Mfj-yB5ow8*s^Av})>JRWI`D9y!HFel$PCoV zOm%WBW92GG|1HJ5KKxs1wW7+PBw;18vSdsuk=1F_w-1Ogq<nU&DcgZp#~p5Wxn7Y@ z(>_`_N!BM~BW^B1p-B}3$`*B0x>St_)Vx}(QR?O`nHZi!rOEQYLtgOH*+V5-@5TP| zwWVf2rj-Q>-VaEmo;{qZ+0k9hhs~$pZ>8F>Gab;~*S3ziCqHXc@yuc)9cD<|QOAP9 z<vWbgZ{XsJ*i=<?4$L)o)G4tNXDlgi>eDfH+MCvL9=_AroGTpnWqvw4-UUpA2oeB* z2=|$Ot5d4T5Js~~3woN}_YKD|Z93#GeSCDl5Wf-l+JHVQZa~T&q`fxKQ(C&26OQ-| zS30JsAa?k%9DCcnHPAIQ>2z)C%qZK4-%2#uCUN}Lx9#JGgLIB3Y-qbqv7h_t>0P87 zANuH9uzSl;7;BAdBla!vq1*>O)>^qeCgWD6``9*O5$w626kG|;_2@xV^*tE9<<B^w zi$}0vBRaAMDo`gPZX4;<%NWr%+AVy8Hb&Hnq?Lo70EwC9VBnni>17HFpYkF*#vo9^ z1W8ghx^yqdZnQE?z}lkrqmUIwMFunTkVq`iw{*QFNA^0nh8iuYt?x6d2)?9$5}e>8 zs>h90vdR~2$Kl!!0pom+Y(m9zId?d<dQuZ$M9F}GO<9xp=R!Ds@}Sl{Ayzd1DF3Rk zs--y`fDZ!}e2pNUWYs7=RzfiAdO|AbY`Up0!Pc>bk81>x$e}2Z`1LP_p;D5V&-?Kl zy$F#bMrN;Vw7p1GSkCk}D7V8(d4h2uZ@6>0aLlN}vwP%l>B+(|lPAnu_`o0bXNyp< zPevewb3H)w;=k!X;6wQ*zx0LYZKg2!jCgCaASjfg_jmm9QlWK|-_qM)w8~G8-4o7O zXMZfUDT@M*1-;qB1-%o8%CY1Wa<H@!qC7FxI?U>(UyDnMWyqrCzLkBYpv3cqvz{0} z`WNpA)MO3pg))SZicE8bkEV*56ovEPDY;RToRUVmv_}k44*L~lzC#PaBD-UiXhqXI zn_0SS6_1KI-MPRu`K6{Tdu6`v9YX{b%mwT&2__-?HR0Il(z*ry0(YEl8qKYuNap)$ zURM%LliR5Y?r1{uJk&e~hZOAwyS@Pyr-=*vhswt}88qf|rPJRaKZR`9kVAQ}aKqNF zTN}g2F^>?%>PSt$1bP-;ajicU#(%Uhzt{kj!!MTC+g&(U<$eR%<WnAzrvxN;)?e(> z1H4lX$qL(j>Fp>cqbaKaIe;Ij?BT)bl&6LKbAG&EbwhM9fAG%I*q5X|Ih3ItTO^n$ zo^e|8T@=uFeET`8)0AFYcwgoMo|bqz?8jyJA_$PTD~LYMDYz&wxLzJW7WxkCmOflp zNHBcQmOLe9RzJZ$<hP4eOlB^x+~*rNs+n)K=?mB{yVBo+ibQEMh7vyNP!>POyus+W zgwZ-6+V)8R_b(Wynkh@yaGS8omdQ(H7;N1FRK(a;C+{C{o0_`4CB$;UTKOaQNw`hl zHzCVv6K6WLKK_faLd(T@MM|J)E#A3e`jalvHTC=}H~(9R_O@Ii)0$wxfu-d8n16<H z=2wxzt{xa%)JYUo$e~;A-F~cowCh3XU=>AlLbk<kO$(jmxR`2&GrlZN+5kzvAZmKN zvO(0T;@s~dGDac~TD-7eyUkfShc6=D#PBnI1a=K{+9ELwXYsuvBJrKydx$oM=v$fT z)aJ%Svm1!(jy@kuD_UW^`iG_oM(+mYdTYT5x^p>|S8H8FV-2l`P$A9z$ady@fseVO zJ+A9Z59VHar??|Lak<01%P%P}osl^|M7_)KpwKH_8!F(xjogq1v$Vx!DCSrBk+#xO z);MlPDns7NE#Bbli%~m1_%&e&dkQ}|AhF5i)k=0oZDG^`T)UBIg$qrPn$}~NgzNvP zeqVt-5%wd!2)oPOkjVHQAb(_fn`6)o%i;+8*XIOpOP3n=M|3O5a2$I4atGgNKCHd} zh>3vdOWA04Yjhw2wt3jQ`$h2wTO{gSt_&)h7Vc`=6N`~tb!V9tTr{ty^T*&&AwjOs z9|YXtm$z=@89tnztjDy#;A3E!>y#a5B@5T^q@?F^`9K@UZh6Mts95QXr*vv2o1#Lu z%Izq<vYM<mG#yOiA-jR`7e#W?(@a3T8kkqGbRoc&oiv{f7G<`RknC8trp|z$NQVzN zw_#W2!EPp9<UHm|kp6-hfR({m4{{!MgDcV7$rMx;<3Cc9K-|Fm!=V|SEaQhNB2j{) ziAaq&{#TRY$9%zA9Z$zr>YUe`s|kOJm(z4%HJj3MwRkt;9p<Nf!(%UU&mb|+?qGBi zu;r;xy3LPL@V0rB?E|asSC7hz4<->8oeeV6vd4&^Dzbv~y{1@K0w-NpGN-StHK<Eu z<vwF)L#V2al{vDGZ>N)m8nj4_kn~+VTjl2<`ajZ?1HbnK*j)PT+*pQPkVc$VM)G^} zI%z%ZYpIgkl?Gj$R{VUjyyWBUh(8y7(#TWHMYFaz1N)U!+(oChCkJSj4li)N5NA3d z><6jKf8eO{Zl$lRDLpiQdDAwqH2c*<r?3uCzd>2sGPN|aI4f8Bk?!9*5m1Kgn!`6t z{o%+IW+F)7{c0ux&izDC%N+lp_qQvgG!NoxJf&NS+wsbkOV$OyL)CaGByr(tIU)-M zwX=Rk2YZ)TsBh+#__&AxVib`ic@}ILUPZ+-C<}B1t~?P71d`_2jV$l4Nk(#N-N-83 zyj6Pg+J9bnyg;m)9x&c1)Xmrs7P!`GLdtP*06DeJy?uFr1A9ST^9Ech5yGWq_eC=d zMrU0bTf%}B1I&1S4Y6kUpB&+bC@`Byux|X~;Br#8wr!NLUv>7QoiLhoi|DmD3m(A9 z%2F|N$V5l$LVmQ9Nc?Svc9<IV2vxcY!_(e$YX#0l?-{QgQ&hQGFRX=3P!BO_k*3cw z3_{W@zQU<D5@eA!&Q&+oZ~VKGnW9Rkrn<_h=o4y|dymt>BGcp7a+}i>|A6L^ypma1 z@HkY=w;N+=5v>JDu4Hs?bey3+o>DFjl%;?j!uy6FwKnBHuSigh)0B(dbY;aZCjl>F zTBfHNz(<oA(*hU3y0KNUAr%R65eARL$oxSxBWG4)$Q(C(HjPQ(h<tLlGWWN{x0w4e zS6#-zJUO5+$zJv&XG=BPpn9i6XIQ`sj53)}(76v5Wd$>uwc@0^2uTK<XHb@kq<yTF z(hiKUFV%~;x1Yf_Of5N<$aCl!q$u>YPQghG(q=3@+!{uJUle|J)@3*%FM@-7-hLQ> zkVhY@=_28#G@1F<fy9#y=K=Cxb=UF`bE;u@iNG8rk4pr{soze@A0^x=HyvxhFN`K0 zA;2;jQ)oK@Zmo#?1oXf-y1ki6@M<RIIrJ;{8T7MB{?M}o)KGObs|2%@0gh8NA?s7; zZiwB-Em1h0B`NL9#`fg%XqJz*4$5Cra*{)k`u3#rXf+dpo5+(Q%U@1pv$o`LRc=*? zZ%33XW2RUQ6S6ya(-0qbfs&(O3WnQqWZ3+WFM2dl(BmIF!Wh$kVFS#hHs6K3XN*>6 z!<+K5fKW*zf#kLNXwT_#cJDa~_5xvz_&Yah@<SS-;h{UcjM;cwGaLTyaqEilaX*5! zcF<P`KOBxdMbl}mw$Soh!@TJ;PItj&*KdTb92|$F&tyCw^=O_6q>jMgoRe1cR;G3q zCSTwzxS$&2evhNz3@lL{4IrRwoKd!LSe`8THSV2e8UVR%-&a|ym_KuYq0b=99Zu?> z;VDEX4$R(?zc>bHP6l1p09^$6izQG4$)@t?Hp5t`uWxlDTQE&Trc{O!D;B1aQff<3 zdqT>7M;hp9)K&7Qwe5qIWbAYKD!t;WH(O!p0V(!!gHWpeu$(%ZSf**XaF8Y{hn0L_ z{B#MODROKIgCSonXFgG7>Bq~T-^1mVbl`63!(`TWgqN<;-R>d6US;!HX<;j2+9GbL zsF=wx%L<I4r8@c=RSKfm^_r!N%)iG5oUBaIo^h@n_bvh}pIfNHx2LYSwmr9odhpm% z3uRUw!T(Ea8$%U|ZSi4X{8=HJAIP8@(z1yE)-|#frT%e8G2$OTD{=f|mXhE<E-A_U zk5F=DAROSobq>}46aAX2`oU$8L$FnuAR!bukYE*b2(20g91q>UD@Qe9xK@V$BpGB# zO$1Jb^`E3t$EW%)DOUae{lLJ`!TjGd#P;u@n>sHXSn8j2k;aBBsx!lF%l@-7a%2zz U4Q4n6`F}P<g9ULx;eQqWA78N6ga7~l diff --git a/devTools/javaSanityCheck/src/Main.java b/devTools/javaSanityCheck/src/Main.java index 87b18682d23..9c2d72a8ebe 100644 --- a/devTools/javaSanityCheck/src/Main.java +++ b/devTools/javaSanityCheck/src/Main.java @@ -261,26 +261,33 @@ public class Main { if (change == 3) { //remove the topmost element from stack since it is complete KnownElement k = stack.pop().getKnownElement(); - //if KnownElement k is closing another tag check if there is one and remove it + //if KnownElement k is closing another element, check if there is one and remove it if (k.isClosing()) { - if (stack.empty()) { //there are no open tags at all - addError(new SyntaxError("Closed tag " + k.getShortDescription() + " without having any open tags.", -2)); + if (stack.empty()) { //there are no open elements at all + addError(new SyntaxError("Closed tag " + k.getShortDescription() + " without " + + "having any open tags.", -2)); } else if (stack.peek() instanceof KnownElement) { + //get opening tag KnownElement kFirst = (KnownElement) stack.pop(); + //check if closing element matches the opening element if (!kFirst.isMatchingElement(k)) { addError(new SyntaxError("Opening tag " + kFirst.getShortDescription() + " does not match closing tag " + k.getShortDescription() + ".", -2)); } } else { + //There closing tag inside another not Known element: <div </html> addError(new SyntaxError("Closing tag " + k.getShortDescription() + " inside " + - "another tag: " + stack.peek().getShortDescription(), -2, true)); + "another tag " + stack.peek().getShortDescription() + " without opening first.", + -2, true)); } } + //check if the element needs to be closed by another if (k.isOpening()) { stack.push(k); } return; } + //means the element couldn't do anything with it and is finished if (change == 4) { stack.pop(); } else { @@ -293,7 +300,7 @@ public class Main { //innermost element was uninterested, trying to find matching element switch (c) { //case '@': - // stack.push(new AtElement(currentLine, currentPosition)); + //stack.push(new AtElement(currentLine, currentPosition)); //break; case '<': stack.push(new AngleBracketElement(currentLine, currentPosition)); diff --git a/devTools/javaSanityCheck/src/element/AngleBracketElement.java b/devTools/javaSanityCheck/src/element/AngleBracketElement.java index 233c4f30320..43538bd6986 100644 --- a/devTools/javaSanityCheck/src/element/AngleBracketElement.java +++ b/devTools/javaSanityCheck/src/element/AngleBracketElement.java @@ -218,7 +218,7 @@ public class AngleBracketElement extends Element { private int handleClosingHTML(char c) throws SyntaxError { if (c == '>') { if (tree.getElement() == null) { - throw new SyntaxError("Unknown HTML tag", 2); + throw new SyntaxError("Unknown HTML tag: " + tree.getPath(), 2); } if (tree.getElement().single) { throw new SyntaxError("Single HTML tag used as closing Tag: " + tree.getElement().tag, 2); @@ -243,7 +243,6 @@ public class AngleBracketElement extends Element { if (tree.getElement() == null) { //assuming not listed means widget until better solution return 1; - //throw new SyntaxError("Unknown Twine tag or closing \">>\" missing, found " + tree.getPath(), 1); } if (!tree.getElement().single) { if (logicTags.contains(tree.getElement().tag)) { @@ -260,7 +259,6 @@ public class AngleBracketElement extends Element { state = -5; if (tree.getElement() == null) { //assuming not listed means widget until better solution - //throw new SyntaxError("Unknown Twine tag or closing \">>\" missing, found " + tree.getPath(), 1); return 1; } if (!tree.getElement().single) { @@ -279,7 +277,6 @@ public class AngleBracketElement extends Element { if (tree == null) { //assuming not listed means widget until better solution state = 3; - //throw new SyntaxError("Unknown Twine tag or closing \">>\" missing, found " + c, 1); } return 1; @@ -288,7 +285,7 @@ public class AngleBracketElement extends Element { private int handleClosingTwine(char c) throws SyntaxError { if (c == '>') { if (tree.getElement() == null) { - throw new SyntaxError("Unknown Twine tag", 2); + throw new SyntaxError("Unknown Twine tag: " + tree.getPath(), 2); } if (tree.getElement().single) { throw new SyntaxError("Single Twine tag used as closing Tag: " + tree.getElement().tag, 2); @@ -319,6 +316,7 @@ public class AngleBracketElement extends Element { case 0: builder.append("<"); break; + //TWINE case 1: builder.append("<<"); break; @@ -332,28 +330,49 @@ public class AngleBracketElement extends Element { builder.append("<</").append(tree.getPath()); break; case 3: - builder.append("<<??? ???"); - break; - case 4: - builder.append("<<?").append(tree.getPath()).append(" ???"); + builder.append("<<???"); break; case -3: - builder.append("<<??? ???>"); + builder.append("<<???>"); + break; + case 4: + builder.append("<<").append(tree.getPath()).append(" ???"); break; case -4: - builder.append("<<?").append(tree.getPath()).append(" ???>"); + builder.append("<<").append(tree.getPath()).append(" ???>"); break; case 5: - builder.append("<").append(tree.getPath()).append(" ???"); + builder.append("<<???"); break; case -5: - builder.append("</").append(tree.getPath()); + builder.append("<<").append(tree == null ? "???" : tree.getPath()).append(">"); break; case 6: - builder.append("<").append(tree.getPath()).append(" ???"); + builder.append("<<").append(tree.getPath()).append(" ???>"); + break; + case -6: + builder.append("<</").append(tree.getPath()).append(">"); + break; + //HTML + case -9: + builder.append("</"); break; + case 10: + builder.append("<").append(tree.getPath()); + break; + case -10: + builder.append("</").append(tree.getPath()); + break; + case 11: + builder.append("<?").append(tree == null ? "???" : tree.getPath()); + break; + case -11: + builder.append("</").append(tree == null ? "???" : tree.getPath()); + break; + case 12: + builder.append("<").append(tree.getPath()).append(" ???"); default: - //throw new UnknownStateException(state); + throw new UnknownStateException(state); } return builder.toString(); } -- GitLab