From 94a40a4a877b6374528e5d3c5458993d7e011e71 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 26 Nov 2021 10:59:30 +0900 Subject: [PATCH] diacritics bit is now colour-coded --- CONTRIBUTING.md | 21 +++++++++++------- assets/ascii_variable.tga | Bin 327698 -> 327698 bytes assets/devanagari_bengali_variable.tga | Bin 327698 -> 327698 bytes assets/diacritical_marks_variable.tga | Bin 143378 -> 143378 bytes assets/latinExtD_variable.tga | Bin 286738 -> 286738 bytes assets/thai_variable.tga | Bin 122898 -> 122898 bytes .../torvald/terrarumsansbitmap/GlyphProps.kt | 2 +- .../gdx/TerrarumSansBitmap.kt | 14 ++++++++---- .../gdx/TerrarumTypewriterBitmap.kt | 12 +++++----- work_files/ascii_variable.psd | Bin 315344 -> 315404 bytes work_files/devanagari_bengali_variable.psd | Bin 322587 -> 323359 bytes work_files/diacritical_marks_variable.psd | Bin 130449 -> 132187 bytes work_files/latinExtD_variable.psd | Bin 341421 -> 341432 bytes work_files/thai_variable.psd | Bin 118575 -> 118861 bytes 14 files changed, 31 insertions(+), 18 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 090c5b2..e76ee98 100755 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,7 +58,7 @@ Rightmost vertical column (should be 20 px tall) contains the tags. Tags are def X -' A -,_ 0 Align 1 Align 0 Align 1 Align before A -' 0 left 0 right 1 centre 1 the glyph - D --write-on-top, usually it's diatritics but not always (e.g. devanagari vowel sign O) + D --Diacritics Type Bit (see below; not all diacritics are marked as one on the spritesheet) S -,_ 0 Stack 1 Stack 0 Before 1 Up & (MSB) S -' 0 up 0 down 1 &After 1 Down (e.g. U+0C48) @@ -66,10 +66,10 @@ TODO: c - Nudging Y - Anchor point Y for undefined, undefined, undefined X - Anchor point X for undefined, undefined, undefined -Y - Anchor point Y for centre-aligned diacritics, undefined, undefined -X - Anchor point X for centre-aligned diacritics, undefined, undefined +Y - Anchor point Y for (unused), undefined, undefined +X - Anchor point X for Type-0 (centre-aligned) diacritics, undefined, undefined -* Nudging Bits encoding: +* Nudging Bits Encoding: SXXXXXXX SYYYYYYY 00000000 @@ -83,7 +83,15 @@ Y-positive: nudges towards up 1X1X1X1X 1X2X2X2X 1X3X3X3X where Red is first, Green is second, Blue is the third diacritics. -MSB for each word must be set to indicate the value is being used. +MSB for each word must be set so that the pixel would appear brighter on the image editor. +(the font program will only read low 7 bits for each RGB channel) + +* Diacritics Type Bit Encoding: + + FFFFFFFF FFFFFFFF FFFFFFFF (For Type-0) + TTTT0000 00000000 00000000 (For Type-1 to Type-15) + +Right now, only the type-0 diacritics and its anchor point is used by the font. -= NOTE =- @@ -94,9 +102,6 @@ Interpretation: DIA_OVERLAY = 1 DIA_JOINER = 2 -Right now, only the type-0 diacritics anchor point is used by the font. - -TODO: use D-bit to give each diacritic a type ``` diff --git a/assets/ascii_variable.tga b/assets/ascii_variable.tga index 0d99d8b8da782f4ad58bb673554529d76cda0128..6fc930e823a0188a7bded42055c35405f593a375 100755 GIT binary patch delta 86 zcmbQ#ATp^zq@jheg=q`3Q`*D=p6PPpj4c}rY#2cdlj%G&X8GY3!|4=1c`2f2r8xsq($PQO{6#sL`4be zNls9LjUfsdLkbs+NZz7aB#0^0qR7EkB?PsMna+K0Mn{|}THJZ_?!D(b-}%m&Zw7;& z!JsG7)&hFBDVNYcau1t|9{=)Vpw5l@2YwnZsXn=VnNI~S_A?Q>%igI2bsn_FScQny zs4EN#ediyC7|d@q(Q4xRq3?Y@#(EVuXlJW%_&F;Q%`MC{G4_zVDUAn=N}qh9zJ--S zU%d-s=$xSboqM6UyEVyZofQ!&0e=o5J1C~4cYi3Xwu8U22(2a72tB0)MaM$B!>*m8 z5}a(R%w`vucoKs=he33S`RqE;sNg2##Dg11?S-D}MHsuKR8w_LDMxar(Dw+eA73!M z$V@OuCT&7BbFgiN{SwW~EO;zQl?pB8C9rDbi{g*GODb8%P#;&k!rH@Uk%*3J5!I1d zbS<;bJoS?jS=ctK%z}1dns~GdZGj*7YKxY(H4B~Giv_vNEhy?5*L$<#S*a@+&x)_V zLs7UsS8maw?-O91=@r?AI>%6ZtxTtlUPnlc7DuO|69B;-YFxS z!{YIH)`qYsS`91+&vtn229caXX2xsa>Rh5NneI=Kgt1q=PW}kGShDhwwAjhJQkKa7$|9RZ z-tc#1$)ca8zeTcg{2_grNh(eNL}$zly|g8liUb)(JNPK>Dq}9u_FK8fDdH`S>Qi!J zFm8A;6l5JZ;Zk;^c9VSB&(ulj%eU!{*ET6~paMKR#%Z1tUc2Uj4r6Dx5cO=edd*rq z94(tJnW|K75yCxovin!;wQHS&4YQJp!c0L16WpXK;veX~SOsw< zF;H~4f9+9^Vkcv2?O=ssif^olF(0HK*5beVK@dWmUo3^fK05L|_r2ZZ*(8niLUQgs z_x#TNy>rjK_e`XG6Di+pB0iqTf@j|^nZiJR4RX#G;6=4fPrKCf3aLk|US{aI6AW`x ztX(g5sdpI7oc=Q1&-yX0F5QlV6sI+{H>50p%H;(Cd*#WrX z_d@PQ9>Pr_6OOCPjPMWfXK-&jKMW2dg~6>XAPF6S(Ko$Vd`IboA6!RlQ$pj}H;L&x zjJ&C#l6x$E!ri)dU5z>PM4pYrF}H_DaJ7?n=-L{4U%}wC64FVT#bC0*Xt4dj)+c?& zJ6llJ+gz%!VJb!WD=z<@;Ft(0BgFT(O178aJ6E^f{~=2;$Tes6^v^u|NA+#`=?o8H zb0c$`4#=N}D=DJ^#^3Y7+Se^G+tTc8phh|)1(#d;@Lret2INjA^(|p_k)igzGB@7s z*-|oa8Ab)*R~f}^`eO^qSzaHYhi@xa$Ob7j=la`#DGoMJv4o>X6_JN+0 zqKIzthp{;GM>YY%{6+OJjLq+X)mwd(WJ5AwbVMlaEMn;u+AGId_Bd$9bW$)Affnp! zvojSs`&iluS=u1O`nvyt$3HKsy*RLgovuL_((@rKCY48EDSp#rD`RP2Z9Pl-SoSw! zD{bVL+Q+g___}N{cb5-QTxTnoO3xcf+e+3+vBh;GoSd`aO{Or`vlFjO@m5&uurh#x ze5zVb2-+C@OSvfyV$-X_p>!slODXkIim=LN$H{q#lTzv}X=W@AFy0Bni#x3AvKGe- z-c6aXQ06K9){=5P$x%pQEA_Q-Qg7MGlSLOqQn^|+gf@EFn%lpARXG+?G_k5+ zD3aWs=>KL@K9Uk+g3EX-QO8zz8@)?)=~~fzS*{_a^lcwYo!}^&n3sBKTTN$K83t%i zJ&nP**iGv#te%p#crJ`58aH(hii>k^#l2-GXYUI_P`DMVaRr%&+B_W)d@W!;9c%tZ z)abce|CXGIoYpY4XFy8*bqY}Q&I)%Vy%9;t8=b;`9-iycPK zu?l+5|3WW9&YYrpIQ}s#{q4rzK398nZBA)d@b^d6R=lvncVe_j@xz%@Zt>j_eP&wq N50=U?vrc({{{sM1^n3sS diff --git a/assets/diacritical_marks_variable.tga b/assets/diacritical_marks_variable.tga index 9bcb325b571bf30d46bfd3a8bebdcf993bf35a37..36d06d9d34f848574438b4467e2ef0770c954411 100755 GIT binary patch delta 1203 zcmchWze^)Q6vutDE3Oh{)D^XeY(!8&C70sv@D~;-L`4E>Vf*yExm1d56 zf)>YFSqQ=w1Kx4f{R37hw1{B^5fcLT#+hB?{xCvpoMLunct1Yx``)IrS~{zpJ}5Yx z1!FIvV)6>+Fdv3S`O<41s|yNl9Drr!w6zgZDlr-#f0vI*CkxXOg0iOgM71f?G3gSr z&AsQJp7+~+T;GOz*U(=PdQ2^+*79daNtsz zV?#--8nJ|UyH;#3@sjS^lhS(*kRtsI4v?48EfeV{h_LnA5F4v)7TM)J%<^i)Ch-RL z`-IsEI5w82!W&WHA_Gz3U9pZoWWZ1ut&jUB#4w9XDTO8P51%c*n7o7V&Xxu|(*V9f;s?#)b*@NBUsb1+?RG3I=d>2dIRK;$|B(%keaX;J+~W z9a22^4c4YAFjgqkH;D>@+2p#;)AoEXyUu8SrLfc1(_6StJ_2~cr delta 591 zcmZ8eL1+_E5bgZGX`-fUqKOnFbz1^8kcAKh+gi&e3IUb1#T-;L#1!#hOFek4-A18U zJT#fYQ1wvKgY;Hd;e$${d-B?%cumqhq>X`s_r%?%Cl50WGsC?1=9R0ya@Duh<~SkE znX^)fW7}t&b>GbO4PBE&;ye8GVnMoxt%D%8x#HIJgdj*`RTws7Q@_&Ku0=6$DsJjp z7I5f8-W~Z-wufn+pbv|+Jf2S}Xq8@+)G!s_Kprd23>_@OsQGfr0JF08n7LP6xPj3B zdC$9{S0&V|BdFi{W0(CR&$&?Gul~%r(Fe&EsnW|0aN~SHQ|o_6~m5N8ql|4Oj)|QE`{v7qo7^M>!Rs+!92|N`gk#9%QLsgHd|E1m{S33kjMJ zcb!li`s-9!21C@}!OU&Piyur}_zexeqbKA%Eo0=iP@}BL9TTMjat$ueJC1c zk?MRXrRj$re2GIw-BT>4*v4}ur9P9WHU zaZ$>9DxK@UsEn?)(!24KN4 zw|yqVN3ZVgb>jWcgZFA5+_3H$Av^4=BKLs{AGig_NyI+&w#`;Ndj?yMfy4ON0R<@| zOXR&Ip?IC7X2{4CF`{xaO!BHhgN%jI2)W3-)X0j`YV>>HM>*pgWPxA`lM5;#u?@(j{Xj19>Yp|no_t#Ii!a&&#^M!NxEHJ4ki=@U>ca9H5NAx(p*{4Nk@Q`p z6Qa=!$s9U_z7~*Hb>3&Beur;Vyzdq~MBRt4$D}_J>Kr9z ziqp45tMoARB#hDltoGEGwgVg19(Q&EE=!hPeQ#rf)IpCPMRYOMrx>X|b?-U6`8`~2 R?DNwbXRgzR_MW=8`xhe%0Ym@* delta 2176 zcmb_eUr1YL6!&~L&Rd$!IMNwQjL}Ao&RpWm+H6ZloY^YOx-cv&#a{B@Lkc10Auxv` z!lZidyDwBx+}0#)RuV ze&4z0`+dLjJLh<@)N--Za&0_O8250aH)uZH=ml=frVBYY*N0;CBzegltiI!@zX%I_ z*>ahGpA1Ctr40Dxwy#AsvkNN+v1btyg`5L@pR=fV7gt%B8*Og%F>srer3Zfe?jzVT zzcmtoS_(X7|Fwrr*pq^0Jdpy`?7R81a&UWlyMZ3@gPln@jIU?FUC6lz*%)fSusmu< zAXvx|W&ySO^3o0BSUkmIgo%t*7A3>a2^@cP(l21hr!q33$jB*h^MdG6BBlxZQs5MsJYe;!@KBLCw)&mI+;vibsBv=b*gzrYlyL<0sDDNo z%UeL)`cb>iqE_}9Sb^GAtdP5Qms&<;{srrl1T236 zgZRlRJ1zr#Lu6zxc;zu9mkHF)!x+~(yyBYx8Gc+|RPJJt9I^Zykd`VeEb;#z(E~(k zRRKp}5w$HA`_BhRmV9qRxO!ccigN&Oonv0~tpSyw6SEUa%qn+51opcD(cgPU=p!w3 zjpYDDNaP;N=!U7M_I$7_Wi~U#W^mPWI6I2^IVE9T2|>C`WW5#plF-JruY_u-1gHp$ zYk3g_%Rz7zbg6;5T`gq0-$bx%!dxMzN=(IVm=XQs9qdj*JHCo7N4hHSyLpKBs2*$l4BVCy z-gB9toxj-$L7QC$!jKu@_c|uIF+GQs-&vfLWaouICYq`}1v^vV#Sry6i^}ACWxw^Q zC#<>j>*QCV|UAIEOYed0uY zXiShR3Q`6W`M30U;Rf5sb%9#!j%U50sD#@VBl=DQ0l%cgg?y;OKZv03Q%2zzV2P4b zl?crZdC}^0vz1s?pj%A5y!f?5UL#iDBK+Ec+Q*8DJmX z46xkDN^(^B&aw|Fxs=96wl2!8pgYMW2{J*(dF8U>{qZof#>2{kH_>=iSrMLhXqTv; WR2D5)%yAZ|IP_Y@S)_x-AN~QpAZmyJ diff --git a/assets/thai_variable.tga b/assets/thai_variable.tga index 7d051b68912702a36075cc746377ecab65238f41..b432f0b0dda7fdfcb361ef7cbd9f3365e49c6d4c 100755 GIT binary patch literal 122898 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 acc or ((pixmap.getPixel(codeStartX, codeStartY + y + 15).and(255) != 0).toInt() shl y) } - val writeOnTop = pixmap.getPixel(codeStartX, codeStartY + 17).and(255) != 0 + var writeOnTop = pixmap.getPixel(codeStartX, codeStartY + 17) // NO .tagify() + if (writeOnTop and 255 == 0) writeOnTop = -1 + else { + writeOnTop = writeOnTop.ushr(8) + if (writeOnTop == 0xFFFFFF) writeOnTop = 0 + } 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 (nudgingBits != 0) dbgprn("${code.charInfo()} nudgeX=$nudgeX, nudgeY=$nudgeY, nudgingBits=0x${nudgingBits.toString(16)}") +// if (writeOnTop >= 0) dbgprn("WriteOnTop: ${code.charInfo()} (Type-${writeOnTop})") // extra info val extCount = glyphProps[code]?.requiredExtInfoCount() ?: 0 @@ -888,7 +894,7 @@ class TerrarumSansBitmap( if (isHangul(thisChar) && !isHangulChoseong(thisChar) && !isHangulCompat(thisChar)) { posXbuffer[charIndex] = posXbuffer[nonDiacriticCounter] } - else if (!thisProp.writeOnTop) { + else if (thisProp.writeOnTop < 0) { posXbuffer[charIndex] = -thisProp.nudgeX + when (itsProp.alignWhere) { GlyphProps.ALIGN_RIGHT -> @@ -982,7 +988,7 @@ class TerrarumSansBitmap( (if (errorOnUnknownChar) throw throw InternalError("No GlyphProps for char '${str[nonDiacriticCounter]}' " + "(${str[nonDiacriticCounter].charInfo()})") else nullProp) posXbuffer[posXbuffer.lastIndex] = 1 + posXbuffer[posXbuffer.lastIndex - 1] + // adding 1 to house the shadow - if (lastCharProp?.writeOnTop == true) { + if (lastCharProp != null && lastCharProp.writeOnTop >= 0) { val realDiacriticWidth = if (lastCharProp.alignWhere == GlyphProps.ALIGN_CENTRE) { (lastCharProp.width).div(2) + penultCharProp.diacriticsAnchors[0].x } @@ -1088,7 +1094,7 @@ class TerrarumSansBitmap( } // for lowercase i and j, if cNext is a diacritic that goes on top, remove the dots - else if (diacriticDotRemoval.containsKey(c) && glyphProps[cNext]?.writeOnTop == true && glyphProps[cNext]?.stackWhere == GlyphProps.STACK_UP) { + else if (diacriticDotRemoval.containsKey(c) && (glyphProps[cNext]?.writeOnTop ?: -1) >= 0 && glyphProps[cNext]?.stackWhere == GlyphProps.STACK_UP) { seq.add(diacriticDotRemoval[c]!!) } // rearrange {letter, before-and-after diacritics} as {letter, before-diacritics, after-diacritics} diff --git a/src/net/torvald/terrarumtypewriterbitmap/gdx/TerrarumTypewriterBitmap.kt b/src/net/torvald/terrarumtypewriterbitmap/gdx/TerrarumTypewriterBitmap.kt index 56f0de9..22f1dc1 100644 --- a/src/net/torvald/terrarumtypewriterbitmap/gdx/TerrarumTypewriterBitmap.kt +++ b/src/net/torvald/terrarumtypewriterbitmap/gdx/TerrarumTypewriterBitmap.kt @@ -241,7 +241,9 @@ class TerrarumTypewriterBitmap( 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 + 17).and(255) != 0 + var writeOnTop = pixmap.getPixel(codeStartX, codeStartY + 17).tagify() + if (writeOnTop == 0) writeOnTop = -1 + else if (writeOnTop == 0xFFFFFF) writeOnTop = 0 val stackWhere = (0..1).fold(0) { acc, y -> acc or ((pixmap.getPixel(codeStartX, codeStartY + y + 18).and(255) != 0).toInt() shl y) } @@ -439,7 +441,7 @@ class TerrarumTypewriterBitmap( } - if (!thisProp.writeOnTop) { + if (thisProp.writeOnTop < 0) { posXbuffer[charIndex] = -thisProp.nudgeX + when (itsProp.alignWhere) { GlyphProps.ALIGN_RIGHT -> @@ -456,7 +458,7 @@ class TerrarumTypewriterBitmap( stackDownwardCounter = 0 extraWidth = thisProp.nudgeX // NOTE: sign is flipped! } - else if (thisProp.writeOnTop && thisProp.diacriticsAnchors[0].x == GlyphProps.DIA_JOINER) { + /*else if (thisProp.writeOnTop >= 0 && thisProp.diacriticsAnchors[0].x == GlyphProps.DIA_JOINER) { posXbuffer[charIndex] = when (itsProp.alignWhere) { GlyphProps.ALIGN_RIGHT -> posXbuffer[nonDiacriticCounter] + TerrarumSansBitmap.W_VAR_INIT + alignmentOffset @@ -466,7 +468,7 @@ class TerrarumTypewriterBitmap( posXbuffer[nonDiacriticCounter] + itsProp.width + alignmentOffset } - } + }*/ else { // set X pos according to alignment information posXbuffer[charIndex] = when (thisProp.alignWhere) { @@ -530,7 +532,7 @@ class TerrarumTypewriterBitmap( val lastCharProp = glyphProps[str.last()] val penultCharProp = glyphProps[str[nonDiacriticCounter]]!! posXbuffer[posXbuffer.lastIndex] = 1 + posXbuffer[posXbuffer.lastIndex - 1] + // adding 1 to house the shadow - if (lastCharProp?.writeOnTop == true) { + if (lastCharProp != null && lastCharProp.writeOnTop >= 0) { val realDiacriticWidth = if (lastCharProp.alignWhere == GlyphProps.ALIGN_CENTRE) { (lastCharProp.width).div(2) + penultCharProp.diacriticsAnchors[0].x } diff --git a/work_files/ascii_variable.psd b/work_files/ascii_variable.psd index db433c4f61039b5ac3f4463b61dd9941dc85466f..a8582f90b7458537553162af0d9f9b33f92e7e9f 100644 GIT binary patch delta 284 zcmcaGU$|$1@P?^8tmhb*rtR81i$|7`cOC;H0|UDq0}}%S_qOIEyzNJL8MhzdWlE}I zegVCPsnj zk7oewliSWclW7hc&-Z$Webee0{!d>ypXrL=5va&XD1C8z!vdybnqCoKnRoYvm8 zoN0U4a%KVJ=`+-r&u&k-%{-rLdXEwF)a}!sG0$5ueU=*Yx#@K+ES%eUCa}nJPwxXs K9hl7`U;+SLe{Sml delta 267 zcmY+6F-yZx7)9T^FO6UmC}wsL#1tGYxCq66P&Y@(rqIDvher(32v!nG^3f_yw{$Ez zJU6ApEuc_wanYrlgZKmL!_D=cbMEEHdC8nfVpURx^z3e6t#UhLoUx?_17p=;P}rTq z=Blvaop6)f5H3wTtf+$!?FtX*t&4MdzQDTbUSV5sgPvlzyr#ZllmZc>hXkSUS*cnn zZlO;^|4-QL@BYc`XqCu{Oq%+N-rn#tXVZnOeYdd1WerV4Z4z)bP z>V51Vsq9^3%X$ax&c%lID84oh)od0W26p>)G diff --git a/work_files/devanagari_bengali_variable.psd b/work_files/devanagari_bengali_variable.psd index 918d41bd648f7169209fe1ea47d05dbfc5eb20a0..bdb5d78beef863813c5a07dec4b8e4f95ee10e6c 100644 GIT binary patch delta 3060 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 V?Y;}*oR13VO2>}YvHuXR{{i*b2~hw5 diff --git a/work_files/diacritical_marks_variable.psd b/work_files/diacritical_marks_variable.psd index 784ef184e44f5e8f8b11bca97c57d4fba14be8ef..4bec8eef876515cc0d10eeb209b8458419dae9bd 100644 GIT binary patch delta 2225 zcmeHHT}TvB6h2?GyX}m-tFC`-W@?HenW#vJM2Hj>nAi_&SegoD!e&xJLD0Gsp+vDd z%88(tpdcdB3Z`C)P_iEgdnhPD3c?V4NO2{VobIf;E}{>G`4q$4d+vA6-0ytn-ZO2} zYX@4aT^%-yy^LTlQg7JC9Og>|BJ&PfLu7fN=Gv1VJ+?y-=CN`1OtC;b;q>N6BR4=-BJ`~MUV=mx{W%f%5`&($*0E5qsjcKhYh z32L@bbE5+%c*-W0P6Aqvz%cfd&>~lPlok zQ71~cISLuv8-;k!s&WrTp=njs`n+ER-$Soa<=IO6_+&H=pIS}Xf|zTfQMbCaoFo)A zt*ai*k{VfL;pg{pR1=i-3Mcl!#a&Mj8yXZ75qbGVEl!6rdL?sG503L5H}VapD_U_c yhGm{MGWz}wO$u)@GO~O|-qIO0Y9rq;Bx^Ztj4hp!!qzDqbi=cQAK@Wo9x}aix zKx7LeDp(ZtTCBS0Nx_2;=t0qgdT6}}R>4**G-`hTfA>$aefVgh%Cgz{|9O4$WoF)- zik$y8r?)#64!;8o_uCg^BU*4hAVBab1OSw%-4tKccQ1Y;Z#R6sPnjrc!5Bnr>tiaB z21Pz$;1Bgy;1+sNfz4C?oQ~nvpv4~2;y4}*TkJXmq;?JK?YdDVq=E*Dy}F?DQzWE7 z1R_G&hzj-0!===rVVyKoAZAyNW)ccdS_Hry=xh=@=|BP-;uhopn9W}cfCdxTLAgp) zBNhw*V|_r!lenK=&&4D)S7JNmlKiJ7fyww)?lTO+--1VUWUfF8y)aFr)rl%l<)c9i z61=bsMXON52sNcR%pNY&=PFzfx6GW$vGUh4fvou)D_4f+iF?Z&FgafL3+xuHO5q+w zC}>3r_tBaZW~ntTXf+?va2ii>Wv}VH$Y3ktF;c6sF|-Z3q0K&etv<8^Zo@HZtH%0Z z7JBGn4K59ygLZmb%WpPA7k%J2c!KiWjn>xURlMZ9uEp?9lR-f*7-Ras|9;T{M(F)A zY_zjA3+%cL8=X&w@IrK&kWgpeBzm97N|ynhvG2bq4_IDm3MHF@Ru+XsgUc}EG@JOU zh%B#%7=X@vy!kQ*m|hAnPWItoI+Se67)n8y@tyr}fiXkj;dFUgSup$&efGc#Jf!DS zFuY=%{x00Ex@?vMf|2K@GyAj4sF~qUIPt`o;9P>4KV@$@kGnCdnj@S?@&2v_OI1$p zQa>4GaFgx4?q&=)Ghq%*=bgt%Ftj4go(o+b!nAYr3cif)ni)fXGe&{Cqxf8%EGU{aSU{*Cv?~L$&1l3Cq0H(cq(?&bDq(#hnOO%G5;NBUabDKg|eK=0(aAM2R@;-BE4}5OsPz^FPwyj4xCw|i`KnNN{|VY; fIMcjQz~tLvZN>gs&s5?~R7ZSioOG540!@LR=LC`3 diff --git a/work_files/latinExtD_variable.psd b/work_files/latinExtD_variable.psd index ebf97f058d8747a7f112f85995ceb1dbb39167a5..9d1577c3c627caca7c22d3f6de429abc978acfbf 100644 GIT binary patch delta 297 zcmXAiJ4nM|6ovEm-qchR8l+N!N(b?Q1S##3B7#cyO0|o#E()5-MM10}Z*%5pG2xYs6M%A~n)yCQY?fW=HI?BUzafUJ( fZJed~HV#ta9Mim2fla~dHPnmbMbF?&r)Z8 z0A_9P(qK+!oc>>hS#3JM8Z*cA-&)K()BkHRb8NTNVlH8teqNMWZo0f4P$p7@S#tY3 z9p*k(*7{Ej4E5U^jhL^pG1hMnw`9)ZU|c=@kR$VZ#+lnUIWZe=;rY+-PxikV!~dVM z{~4wqjAypluK%66(v=CwYrM}=xn0GUMJI}<9;S$qp&qV^lW}_d0~X=w{(D(Cw(pt2 Na>Na22~d-H7y!F!R6PIy diff --git a/work_files/thai_variable.psd b/work_files/thai_variable.psd index adf3c92129565b72194f6cba85a797bd2c7d17e4..015c7433c490a6335a5f5e0d09579fa10dc27da5 100644 GIT binary patch delta 458 zcmZ2KkNxZd_6<{b*nZAqVEEZJc^1!S-b)OO3=GWo7?>CsSe8vT;FaIJlXue_Myts= zztkCxHc$D*#bo*A|33zX|9=^7Lg}Aq^h-28On&R+g@2L_TX4wY()D#R``=59N|SH> zRcBP%%=GUQUiEf2(Ks{}oLPre^DOK^De(>xp=j;M4xKe&Y0nER4d_H?T0WfQjuu79$hy zR0dB52L=rWCk76N@agAR85OtRXJcHSJN>*dBlqRJd5WuZyp090|WCS1||ju7PH9)yz-lO@@{%F`M_J2 z$@#xjfHd3YnZH<>CQtayG5OA)I3Ue8x$N(8MwZET|I`^-HmCjj#K_#pFkxyXW8q|j zuPl=v{7{>2#K`!Pk!89J6C+T`b{8hbEGFj0`U%rtvoO|Af561Z!Z>mIMpj1Q=?7SW z%0R?+Ai>DQ+t1+1;J~24;Kabe5I+4L8>2L1-}YDRj9YS<{xeKwl$Nmg&+t$7pV?1Y z?DQ{LpgORMKe8