From 4d1a599263d536ec2e934dbef2b1b6078b9a898b Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 25 Nov 2021 17:03:11 +0900 Subject: [PATCH] typewriter accepting new tagging system --- CONTRIBUTING.md | 5 +- assets/typewriter/typewriter_ko_3set-390.tga | Bin 327698 -> 327698 bytes .../gdx/TerrarumSansBitmap.kt | 71 +----------------- .../gdx/TerrarumTypewriterBitmap.kt | 21 +++--- .../typewriter_ko_3set-390.psd | Bin 172836 -> 173018 bytes 5 files changed, 17 insertions(+), 80 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 84cba10..090c5b2 100755 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -87,8 +87,9 @@ MSB for each word must be set to indicate the value is being used. -= NOTE =- -This encoding involves one HACK: using 0th diacritics' X-anchor pos as a type selector -This hack applies only when write-on-top bit is set. +The code has remnants of one old HACK: using 0th diacritics' X-anchor pos as a type selector +This hack applied only when write-on-top bit is set. Relevant codes are currently commented out instead of +being completely removed for future debugging. Interpretation: DIA_OVERLAY = 1 DIA_JOINER = 2 diff --git a/assets/typewriter/typewriter_ko_3set-390.tga b/assets/typewriter/typewriter_ko_3set-390.tga index f03c2515d2542a600ea97ad12d23d63c69b44c9a..81f4729b8017feab5964b045bcd6c6f0fce9cb5f 100644 GIT binary patch delta 915 zcmZ8gUr19?826mB#JJ)%cGZ-j| zM>_S856+h||BRcRjEE2l340hA(Zhx>Jp}1fZ#}HT3fC6C2hk#kUS{{3iuBLlE)qU- z3^~L?KUu*k>O(BTsXj6JrdcV-f0%_{8WKZ>uw5%aUJL`Jf3kNSN?ZNO&J7FeTz|y& zw^V{=2m2UnOwsF@&3fx4lX8uQ^_I=DlaL-->SZ64I#XNT<`|L&4q+Z}qN}2>13e}3 z8qP~(YcXGn_7EvVbXTKK9S8~g4P-+ssx(N;f?p92^dVIqPc&))X^P0)L9Ix4#Vt@- zV%AAq$b(Vz7)$|l1dZ%X(M==KX@Fw@ieMDm>i_4MaPsYQs8N>XneU{S`McdbGl*_%Hi>V6T6^Ll0TKywOfox|qRoUw+EwnU zC8I#Q*_fByBn#WNA2guF^TaDM3ek_tg?RCbz;Zb`4Er|Ej$@VYloN$**Hl4qo0vUC zb`Zk(9Wq7nw1+swp&l||0kSf&OO_Y~5>{UGoY>j8QVCKW{AZf9LX=8GRGlS5NTY6Z z$zZf~a-#qVlO;Le{JVjBXi?=0PIOK3EICSgMJ9>&V2%2ct~e5rXGFf0Y4(18SZbF~ S#IWEU8gtDN;hMAjzVsKwzA5hj delta 856 zcmZ8gUr19?9QK^wu!U=X*j$Bf^_EUIPt4RtTO%bbtQpK+%CSNp_EJJU^w4NvA%&>( zN1S>{OvU~Vx?R@E%*Ze*iOA3(VM7S%q3o##LBY5-s?p9TpusKh))k}S-#X}W|X)>^ft`d3h4 z!+=@OZf?Ioc5#0zxv8-Clt+r7Nb9D)x$+V4cwjrma~<~JGw)7WSy-0ob;(rEo##mu zXNMagKAESUxMTs|x1U%=ss++iVU+}(hnU*c{k#Sbf9@2oqR>y1jHv@EBlvZqPGOxC z2i~PH^thdWaj$m$U!$xWr;>#ohrDI7J6eo>=}fumo3_{S#$wXM9o2CAE(0FW5xWQ% zlO@2=^1&q2ZAkgQ=vt8=8s`$Kaqc2jXNRNGpi1r>f?Cmhgp6%tJ6$N~uiFkzR1DJ@A)-i+T zo3QlIX~O+6QpiJY$nOZoi3rB2*_~uv>!`iCm&`XX;J%|JJQE{k5qm`E^Ec&0%si!| z_1L3qBPBdLNE2%IM?3IT6ymD$stlD>E1fip*+Ht818O6hK_*`6g1AOVmmAt zPC|{y6o7hw_fOKT+>r*GNY%r4im%h9e8dY;bok7ov;kUmT4am4rwY6x(+CQc6ie2U zquHKIv?vV2Xq|Qf0*jZi??q7NURxBlOzuf0L`3euzf+)vP@8fr2S&wrY<2TX(jn(1 KoI|=lr~U#~j5coo diff --git a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt index 2b0f727..43af856 100755 --- a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt @@ -906,7 +906,7 @@ class TerrarumSansBitmap( extraWidth = thisProp.nudgeX // NOTE: sign is flipped! } // FIXME HACK: using 0th diacritics' X-anchor pos as a type selector - else if (thisProp.writeOnTop && thisProp.diacriticsAnchors[0].x == GlyphProps.DIA_JOINER) { + /*else if (thisProp.writeOnTop && thisProp.diacriticsAnchors[0].x == GlyphProps.DIA_JOINER) { posXbuffer[charIndex] = when (itsProp.alignWhere) { GlyphProps.ALIGN_RIGHT -> posXbuffer[nonDiacriticCounter] + W_VAR_INIT + alignmentOffset @@ -916,7 +916,7 @@ class TerrarumSansBitmap( posXbuffer[nonDiacriticCounter] + itsProp.width + alignmentOffset } - } + }*/ else { // set X pos according to alignment information posXbuffer[charIndex] = when (thisProp.alignWhere) { @@ -1372,7 +1372,7 @@ class TerrarumSansBitmap( if (it.first.matches(maskL!!) && it.second.matches(maskR!!)) { val contraction = if (glyphProps[prevChar]?.isKernYtype == true || glyphProps[thisChar]?.isKernYtype == true) it.yy else it.bb - dbgprn("Kerning rule match #${index+1}: ${prevChar.toChar()}${thisChar.toChar()}, Rule:${it.first.s} ${it.second.s}; Contraction: $contraction") +// dbgprn("Kerning rule match #${index+1}: ${prevChar.toChar()}${thisChar.toChar()}, Rule:${it.first.s} ${it.second.s}; Contraction: $contraction") return -contraction } @@ -1380,71 +1380,6 @@ class TerrarumSansBitmap( return 0 } else 0 - /*else if (prevChar in lowHeightLetters) { - return if (thisChar in kernTees) kernTee // lh - T - else if (thisChar in kernYees) kernYee // lh - Y - else 0 - } - else if (prevChar in kernElls) { - return if (thisChar in kernTees) kernTee // L - T - else if (thisChar in kernVees) kernYee // L - V - else if (thisChar in kernYees) kernYee // L - Y - else 0 - } - else if (prevChar in kernTees) { - return if (thisChar in lowHeightLetters) kernTee // T - lh - else if (thisChar in kernJays) kernTee // T - J - else if (thisChar in kernAyes) kernYee // T - A - else if (thisChar in kernDees) kernTee // T - d - else 0 - } - else if (prevChar in kernYees) { - return if (thisChar in lowHeightLetters) kernYee // Y - lh - else if (thisChar in kernAyes) kernYee // Y - A - else if (thisChar in kernJays) kernYee // Y - J - else if (thisChar in kernDees) kernYee // Y - d - else 0 - } - else if (prevChar in kernAyes) { - return if (thisChar in kernVees) kernAV // A - V - else if (thisChar in kernTees) kernAV // A - T - else if (thisChar in kernYees) kernYee // A - Y - else 0 - } - else if (prevChar in kernVees) { - return if (thisChar in kernAyes) kernAV // V - A - else if (thisChar in kernJays) kernAV // V - J - else if (thisChar in kernDees) kernAV // V - d - else 0 - } - else if (prevChar in kernGammas) { - return if (thisChar in kernAyes) kernYee // Γ - Α - else if (thisChar in lowHeightLetters) kernTee // Γ - lh - else if (thisChar in kernJays) kernTee // Γ - J - else if (thisChar in kernDees) kernTee // Γ - d - else 0 - } - else if (prevChar in kernBees) { - return if (thisChar in kernTees) kernTee // b - T - else if (thisChar in kernYees) kernYee // b - Y - else 0 - } - else if (prevChar in kernLowVees) { - return if (thisChar in kernTees) kernTee - else if (thisChar in kernLowLambdas) kernAVlow - else 0 - } - else if (prevChar in kernLowLambdas) { - return if (thisChar in kernTees) kernTee - else if (thisChar in kernLowVees) kernAVlow - else 0 - } - else if (prevChar in slashes) { - return if (thisChar in kernDees || thisChar in lowHeightLetters) kernSlash // / - d - else if (thisChar in slashes) kernDoubleSlash - else 0 - } - else 0*/ } companion object { diff --git a/src/net/torvald/terrarumtypewriterbitmap/gdx/TerrarumTypewriterBitmap.kt b/src/net/torvald/terrarumtypewriterbitmap/gdx/TerrarumTypewriterBitmap.kt index 3ae328a..56f0de9 100644 --- a/src/net/torvald/terrarumtypewriterbitmap/gdx/TerrarumTypewriterBitmap.kt +++ b/src/net/torvald/terrarumtypewriterbitmap/gdx/TerrarumTypewriterBitmap.kt @@ -223,12 +223,12 @@ class TerrarumTypewriterBitmap( } val nudgingBits = pixmap.getPixel(codeStartX, codeStartY + 10).tagify() - val nudgeX = nudgingBits.ushr(16).toByte().toInt() // signed 8-bit int - val nudgeY = nudgingBits.ushr(8).toByte().toInt() // signed 8-bit int + val nudgeX = nudgingBits.ushr(24).toByte().toInt() // signed 8-bit int + val nudgeY = nudgingBits.ushr(16).toByte().toInt() // signed 8-bit int val diacriticsAnchors = (0..5).map { - val yPos = 11 + (it / 3) - val shift = (2 - (it % 3)) * 8 + val yPos = 11 + (it / 3) * 2 + val shift = (3 - (it % 3)) * 8 val yPixel = pixmap.getPixel(codeStartX, codeStartY + yPos).tagify() val xPixel = pixmap.getPixel(codeStartX, codeStartY + yPos + 1).tagify() val y = (yPixel ushr shift) and 127 @@ -239,14 +239,15 @@ class TerrarumTypewriterBitmap( DiacriticsAnchor(it, x, y, xUsed, yUsed) }.toTypedArray() - val alignWhere = (11..12).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y).and(255) != 0).toInt() shl y) } + val alignWhere = (0..1).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y + 15).and(255) != 0).toInt() shl y) } - val writeOnTop = pixmap.getPixel(codeStartX, codeStartY + 13).and(255) != 0 + val writeOnTop = pixmap.getPixel(codeStartX, codeStartY + 17).and(255) != 0 - val stackWhere = (14..15).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y).and(255) != 0).toInt() shl y) } + val stackWhere = (0..1).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y + 18).and(255) != 0).toInt() shl y) } glyphProps[code] = GlyphProps(width, isLowHeight, nudgeX, nudgeY, diacriticsAnchors, alignWhere, writeOnTop, stackWhere, GlyphProps.DEFAULT_EXTINFO, hasKernData, isKernYtype, kerningMask) -// if (code < 256) dbgprn("${code.charInfo()} width: $width, tags: ${glyphProps[code]}") + +// if (nudgingBits != 0) println("${code.charInfo()} nudgeX=$nudgeX, nudgeY=$nudgeY, nudgingBits=0x${nudgingBits.toString(16)}") // extra info val extCount = glyphProps[code]?.requiredExtInfoCount() ?: 0 @@ -439,7 +440,7 @@ class TerrarumTypewriterBitmap( if (!thisProp.writeOnTop) { - posXbuffer[charIndex] = thisProp.nudgeX + + posXbuffer[charIndex] = -thisProp.nudgeX + when (itsProp.alignWhere) { GlyphProps.ALIGN_RIGHT -> posXbuffer[nonDiacriticCounter] + TerrarumSansBitmap.W_VAR_INIT + alignmentOffset + interchar + kerning + extraWidth @@ -453,7 +454,7 @@ class TerrarumTypewriterBitmap( stackUpwardCounter = 0 stackDownwardCounter = 0 - extraWidth = -thisProp.nudgeX // NOTE: sign is flipped! + extraWidth = thisProp.nudgeX // NOTE: sign is flipped! } else if (thisProp.writeOnTop && thisProp.diacriticsAnchors[0].x == GlyphProps.DIA_JOINER) { posXbuffer[charIndex] = when (itsProp.alignWhere) { diff --git a/work_files/typewriter_input/typewriter_ko_3set-390.psd b/work_files/typewriter_input/typewriter_ko_3set-390.psd index 19eb62cea79022cdf0a005d65b25e49a23b2ce6e..56dc9bc8f90fd4ee14c867ffa1fe4fb878b79105 100644 GIT binary patch delta 3984 zcmd^=d2EzL6u{q`-EX@+SxP0Pr3V&m1xAY@N>aCe}J-7XuC^yee>N}QVE|ml zvR=_zg$p>I7>@w!8fV|wU!?XIVQ?&|`RGyR0vwKN z^fJ5^$-NMrG<`WX(#4IKO4%>rb9Av9)9Bdq_z9gT#{0cZXUkQ>Qk0myk=;}Rui;9y z<7Lc2_4IQ50oB+gxVb+LBv%y+LO>hV>A2PmxuGihcG&U3OG(F$QfM{97&E!V17!Z&>C_pN7FPp!x4i6DOAjY`<9 z_OHhWgrP6{RcHfFN}=XTEaxs1IUL}ughMoI3;s&(Etuju1e^iJGq6+fHgwbBt(ZZh z-pAiku5-3;8@Gs;@6%WzEq*=CJLGH*9rU1set(rK$(>9h?o=-2ZRfoq+wt?{p4xGp z#FUsFa+P47k)eOm%pEwGMl_<+*T_S_!rip3fqU_F0~azT-A_$*{4>;}I*{ZhFyED^)99E7eS$s+BHeFdOl)*iA#~aJIoc5-mgxIK!z$-DaBEh)?!w ziRwlg@28Emn4{b~aSf*SHgoOW6g?`R$E+Q1dtsdKjpP{$- z4!cVK5LemA&Gi?6bbL2T-SGsqvmQN2!#>7bwQvtQ?6hbv-e$~$*)WYZ@5KUH24i6y zltBrMhhi88MUc;bxAE>YSPF}w3aVi}6Yx5$gLmm1Uoj>@IXp%#g$0Ro;BlA;6JQkG zr;v=LumEPzk9=a3!DuM;?PIAKK7c(`q{aC#9p+H^KK$Z;AA%}BfN7429TG&l3G%85 zA}B*E?mn$ZPGNwCDv&(jf!9${|HE@Dc@_K(7suUpc$57(_Y~Zn|$5d za_n|mGetb%buUS}2P<0J!q6HrL(=hHhgN6XSIq=AC?%WHu2NYnZJEetyj#&42qPVu zA_mf!C&gY>{3ZH@J!pc{JL}-!e3a%@jzhZ)alHI-C}Gp6w?g6J&zmOZ4hqUnQ&a>u zcd|;S*)ENUdEjYG7Y})To3hC9jF_Nmj$)m?z$o#Dr4#{<(J*y-qD>klK@NxgbXql` z;!H6vGgci(#9Pp&YgQ7q;o1()@e2PAao(3$_OlCp#vRjI-j*e|(4)CxNoglKUdt*;1l9F;X~DwVlH z6s@5465=WbP4)8{QHE;T6-=<-#n;)Oji*c3&Z=L)6w>5~oI*;SxHLPs_F>*}aC95Q zR&U#k0WQA8hkO)CFF{oV@z4Gm5{QNbQAnT%B*2hB3=-%D30wmS^f4sq{e)j&kjAYP z*_-wx;qvO~WZ TeGA1zL%$V$io-~cXifhcZ@iqX delta 3586 zcmeHIX>3$g6h7z9o5wgTElt^x);2&zUT8u@l7^**2a>8R5~Bo%vIv$PMV4TFfV6Cd zRz`c+#ik8Q6pe)4mi5*ua&O*oZ4_ds&w7wUOS#9kEda91TA|J&->Fa z>O?vC10~NxO)i>)DM&nOl>IUur1AOKiIUgxGJP@5QaWDpZNPT)#XPK*Y~TZpo|unA z)O31hI#P(esi=_Ehwa4UArwD{XEk}) zM-7vlWuJUZprQFVQF-B^ihP!C%*TEaAJb_3Jiae}DeLjjL8h<6uEIIYKI=4agX4WS zIlU0~B6Zn>gB)?fChST}HsNe%8QjDsc$n;5l~lmeyaMz&%MT0KOvlaWk*>`+(78Zn z6yoR(GYpZ1^tw&giaMN;4;2`&2IdK_U^z0&uM^~h(y;RcQu@*Klfla z>iHI)QaU|#*2x8=lV#Y~U;B^l(mq$k!I4z^HftQ^eR*L&u19B`UCNPdIf#!%3?xKpCzo*`lgn|Gqr9q& zi(6fei6Y7``Fth5d2=Vc``fU4Z@iEf%kd+W@4SnvTsQHk_I(bGhe>i?6&`U>vcy#P z6qo_C=`o%f!(jxB;%^vaLOKk9G)U&JFYiu)mtZlhg*+&LB3K3+VFztfr%f0Slj#&s z@5_d#Aq&RB5V|Ch-18v^X43kjtdt2uA(JZ9^bi~XN#CpKbnwC4;$!&n|1MOY#7??D z?vQs-vw6+1O?^WBrBb`ZXf}cWI-|i96N05m<}r=!jbj_P8Ai~w4V!YG5j|*JCy_Jm zvH^CG^{<*>Up9n2;Yx$;x?-BXW<%e8RUI*}8{oTcdJWSw47SIzpwW@%!+y?UvClLo zT)Aeu>TJ^lpZ|fw%-A^bo~-=@>xBPe<)HSq=`IUh4hD5TgR|~ugLaehZCg{wQ}8t! zZpRuh0naelD+@%Tf6>sn%U&)Y;9(HM7}pn;}0M43QDs*6goao)zD0 z>dqw`VH5u}yoV?nsGEGoFxY*S5#0!#^YQ(x(~i%wC=#$gyZXtVtY|ASM;{JPCF~mS z%8@fgN0fPA;WSq#vypXz1_x1Mmo)n4WDcUZB=OY4A=3>8MvOKYF3uF2QzqH8=`wiD z3AY^!mw84-N#a-e#<%#oCK^quTOhjo>&_?BLkmSuP1S|0AF)>BN`ahq9;ddaJ}ZS+ zQ+1_XD@7nawuW9?&V5CAP?rCOqg-7SFkI8?>oZiYud8C34F;WEC1!M0b!cY46kdWM z2|Hy|_9J4SO#KVX-L865ryc9W+O8_8w#rHvMvb8(wCHaD~&4fTC))po}3=;xj zCP0`8IlaU!m=H1@#e_gC6QGp|5McsHX2J^hZAehlCJCY{=Y=o{3I~hZk^pWX0Z1mn zME#EO4-x!BEdB#g_y>jmEcYEDpUrUN2qPcD$XA;&$cHfUU1P+(K)w}5zQxG5TF?M7 z$mhC6Jp>Sqe27Lqv_1s;pB1-w2&@?RGZtDN0*JsrSHWNML-70EyaDWa6!JsRZg~SD zEQc24TQSIIT!r2MOCf)O)@Jt)8I8icQ^ZL3w^}i8MKEtU-G9m)(MI=&NcYcGz(4De zjmt%mxXBw3RX(q!;QzRGo9=Jj0DQ~o{(r0%|DpR^5%gQJ=;z+1avtjbR=E3rw^7_- W_h)0R9I(P1P@6FvuoMU468{BYHg0wR