From 4339cc729683f26a0b01ede860f36478b0389e62 Mon Sep 17 00:00:00 2001 From: Marrub Date: Mon, 21 Nov 2016 01:33:10 -0500 Subject: [PATCH] Mega commit. Create WinMan module. Remove HudMessage module. Update tests. Add (somewhat test) fonts. Callback: Rename some things Control: Improve font loading nonsense Control: Make descendants have a head and tail pointer Control: Move Lth_ControlCall to Callback Control: Add Lth_ControlInit convenience macro Context: Add scaled drawing Context: Split into WinMan Context: Fix trying to access a null pointer in Lth_ContextResource Draw: Add more contextualized drawing functions Font: Fully implement Unicode font rendering and loading HashMap: Rename Lth_HashMapFree to Lth_HashMapDestroy Window: Update code --- fonts/SmallFont/ɢ.png | Bin 0 -> 584 bytes fonts/SmallFont/ᴜ.png | Bin 0 -> 769 bytes fonts/SmallFont/♥.png | Bin 0 -> 1172 bytes fonts/SmallFont/、.png | Bin 0 -> 1155 bytes fonts/SmallFont/。.png | Bin 0 -> 1150 bytes fonts/SmallFont/〜.png | Bin 0 -> 1171 bytes fonts/SmallFont/え.png | Bin 0 -> 232 bytes fonts/SmallFont/が.png | Bin 0 -> 248 bytes fonts/SmallFont/き.png | Bin 0 -> 242 bytes fonts/SmallFont/じ.png | Bin 0 -> 231 bytes fonts/SmallFont/ず.png | Bin 0 -> 245 bytes fonts/SmallFont/せ.png | Bin 0 -> 240 bytes fonts/SmallFont/ぞ.png | Bin 0 -> 253 bytes fonts/SmallFont/た.png | Bin 0 -> 243 bytes fonts/SmallFont/て.png | Bin 0 -> 220 bytes fonts/SmallFont/ど.png | Bin 0 -> 245 bytes fonts/SmallFont/な.png | Bin 0 -> 250 bytes fonts/SmallFont/に.png | Bin 0 -> 243 bytes fonts/SmallFont/ぬ.png | Bin 0 -> 266 bytes fonts/SmallFont/の.png | Bin 0 -> 248 bytes fonts/SmallFont/は.png | Bin 0 -> 254 bytes fonts/SmallFont/ひ.png | Bin 0 -> 254 bytes fonts/SmallFont/へ.png | Bin 0 -> 201 bytes fonts/SmallFont/ほ.png | Bin 0 -> 260 bytes fonts/SmallFont/む.png | Bin 0 -> 234 bytes fonts/SmallFont/も.png | Bin 0 -> 238 bytes fonts/SmallFont/ら.png | Bin 0 -> 226 bytes fonts/SmallFont/り.png | Bin 0 -> 245 bytes fonts/SmallFont/る.png | Bin 0 -> 243 bytes fonts/SmallFont/れ.png | Bin 0 -> 256 bytes fonts/SmallFont/を.png | Bin 0 -> 243 bytes fonts/SmallFont/ァ.png | Bin 0 -> 1167 bytes fonts/SmallFont/ア.png | Bin 0 -> 1167 bytes fonts/SmallFont/ィ.png | Bin 0 -> 1163 bytes fonts/SmallFont/イ.png | Bin 0 -> 1167 bytes fonts/SmallFont/ゥ.png | Bin 0 -> 1166 bytes fonts/SmallFont/ウ.png | Bin 0 -> 1168 bytes fonts/SmallFont/ェ.png | Bin 0 -> 1155 bytes fonts/SmallFont/エ.png | Bin 0 -> 1162 bytes fonts/SmallFont/ォ.png | Bin 0 -> 1170 bytes fonts/SmallFont/オ.png | Bin 0 -> 1168 bytes fonts/SmallFont/カ.png | Bin 0 -> 1170 bytes fonts/SmallFont/キ.png | Bin 0 -> 1171 bytes fonts/SmallFont/ク.png | Bin 0 -> 1168 bytes fonts/SmallFont/ケ.png | Bin 0 -> 1169 bytes fonts/SmallFont/コ.png | Bin 0 -> 1159 bytes fonts/SmallFont/サ.png | Bin 0 -> 1168 bytes fonts/SmallFont/シ.png | Bin 0 -> 1168 bytes fonts/SmallFont/ス.png | Bin 0 -> 1168 bytes fonts/SmallFont/セ.png | Bin 0 -> 1168 bytes fonts/SmallFont/ソ.png | Bin 0 -> 1168 bytes fonts/SmallFont/タ.png | Bin 0 -> 1168 bytes fonts/SmallFont/チ.png | Bin 0 -> 1170 bytes fonts/SmallFont/ッ.png | Bin 0 -> 1164 bytes fonts/SmallFont/ツ.png | Bin 0 -> 1168 bytes fonts/SmallFont/テ.png | Bin 0 -> 1168 bytes fonts/SmallFont/ト.png | Bin 0 -> 1160 bytes fonts/SmallFont/ド.png | Bin 0 -> 939 bytes fonts/SmallFont/ナ.png | Bin 0 -> 1169 bytes fonts/SmallFont/ニ.png | Bin 0 -> 1160 bytes fonts/SmallFont/ヌ.png | Bin 0 -> 1166 bytes fonts/SmallFont/ネ.png | Bin 0 -> 1169 bytes fonts/SmallFont/ノ.png | Bin 0 -> 1165 bytes fonts/SmallFont/ハ.png | Bin 0 -> 1168 bytes fonts/SmallFont/ヒ.png | Bin 0 -> 1169 bytes fonts/SmallFont/フ.png | Bin 0 -> 1166 bytes fonts/SmallFont/ヘ.png | Bin 0 -> 1170 bytes fonts/SmallFont/ホ.png | Bin 0 -> 1163 bytes fonts/SmallFont/マ.png | Bin 0 -> 1167 bytes fonts/SmallFont/ミ.png | Bin 0 -> 1159 bytes fonts/SmallFont/ム.png | Bin 0 -> 1169 bytes fonts/SmallFont/メ.png | Bin 0 -> 1169 bytes fonts/SmallFont/モ.png | Bin 0 -> 1157 bytes fonts/SmallFont/ャ.png | Bin 0 -> 1168 bytes fonts/SmallFont/ヤ.png | Bin 0 -> 1168 bytes fonts/SmallFont/ュ.png | Bin 0 -> 1166 bytes fonts/SmallFont/ユ.png | Bin 0 -> 1168 bytes fonts/SmallFont/ョ.png | Bin 0 -> 1159 bytes fonts/SmallFont/ヨ.png | Bin 0 -> 1153 bytes fonts/SmallFont/ラ.png | Bin 0 -> 1160 bytes fonts/SmallFont/リ.png | Bin 0 -> 1163 bytes fonts/SmallFont/ル.png | Bin 0 -> 1168 bytes fonts/SmallFont/レ.png | Bin 0 -> 1165 bytes fonts/SmallFont/ロ.png | Bin 0 -> 1159 bytes fonts/SmallFont/ワ.png | Bin 0 -> 1167 bytes fonts/SmallFont/ヲ.png | Bin 0 -> 1161 bytes fonts/SmallFont/ン.png | Bin 0 -> 1170 bytes fonts/SmallFont/・.png | Bin 0 -> 345 bytes fonts/SmallFont/ー.png | Bin 0 -> 1154 bytes fonts/SmallFont/世.png | Bin 0 -> 247 bytes fonts/SmallFont/今.png | Bin 0 -> 243 bytes fonts/SmallFont/夢.png | Bin 0 -> 275 bytes fonts/SmallFont/奥.png | Bin 0 -> 275 bytes fonts/SmallFont/山.png | Bin 0 -> 227 bytes fonts/SmallFont/常.png | Bin 0 -> 292 bytes fonts/SmallFont/我.png | Bin 0 -> 283 bytes fonts/SmallFont/散.png | Bin 0 -> 305 bytes fonts/SmallFont/日.png | Bin 0 -> 222 bytes fonts/SmallFont/有.png | Bin 0 -> 249 bytes fonts/SmallFont/浅.png | Bin 0 -> 293 bytes fonts/SmallFont/為.png | Bin 0 -> 274 bytes fonts/SmallFont/色.png | Bin 0 -> 246 bytes fonts/SmallFont/見.png | Bin 0 -> 247 bytes fonts/SmallFont/越.png | Bin 0 -> 302 bytes fonts/SmallFont/酔.png | Bin 0 -> 290 bytes fonts/SmallFont/(.png | Bin 0 -> 1156 bytes fonts/SmallFont/).png | Bin 0 -> 1159 bytes lithos_c/Makefile | 10 +- lithos_c/inc/Lth.h | 28 ++- lithos_c/inc/Lth_callback.h | 17 +- lithos_c/inc/Lth_context.h | 20 +- lithos_c/inc/Lth_control.h | 39 +++- lithos_c/inc/Lth_draw.h | 16 ++ lithos_c/inc/Lth_font.h | 56 ++++- lithos_c/inc/Lth_hashmap.h | 10 +- lithos_c/inc/Lth_hudmessage.h | 102 --------- lithos_c/inc/Lth_linklist.h | 9 - lithos_c/inc/Lth_window.h | 2 +- lithos_c/inc/Lth_winman.h | 45 ++++ lithos_c/src/context.c | 86 ++------ lithos_c/src/control.c | 70 +++--- lithos_c/src/draw.c | 39 +++- lithos_c/src/font.c | 33 --- lithos_c/src/fontnew.c | 250 +++++++++++++++++++++ lithos_c/src/fontrun.c | 330 ++++++++++++++++++++++++++++ lithos_c/src/main.c | 75 +++++-- lithos_c/src/manifest.c | 2 +- lithos_c/src/window.c | 39 ++-- lithos_c/src/winman.c | 68 ++++++ lithos_fs/fonts/SmallFont.lthm | 119 ++++++++++ lithos_fs/fonts/SmallFontJP.lthm | 274 +++++++++++++++++++++++ lithos_gfx/ReplacementCharacter.png | Bin 0 -> 222 bytes 132 files changed, 1399 insertions(+), 340 deletions(-) create mode 100644 fonts/SmallFont/ɢ.png create mode 100644 fonts/SmallFont/ᴜ.png create mode 100644 fonts/SmallFont/♥.png create mode 100644 fonts/SmallFont/、.png create mode 100644 fonts/SmallFont/。.png create mode 100644 fonts/SmallFont/〜.png create mode 100644 fonts/SmallFont/え.png create mode 100644 fonts/SmallFont/が.png create mode 100644 fonts/SmallFont/き.png create mode 100644 fonts/SmallFont/じ.png create mode 100644 fonts/SmallFont/ず.png create mode 100644 fonts/SmallFont/せ.png create mode 100644 fonts/SmallFont/ぞ.png create mode 100644 fonts/SmallFont/た.png create mode 100644 fonts/SmallFont/て.png create mode 100644 fonts/SmallFont/ど.png create mode 100644 fonts/SmallFont/な.png create mode 100644 fonts/SmallFont/に.png create mode 100644 fonts/SmallFont/ぬ.png create mode 100644 fonts/SmallFont/の.png create mode 100644 fonts/SmallFont/は.png create mode 100644 fonts/SmallFont/ひ.png create mode 100644 fonts/SmallFont/へ.png create mode 100644 fonts/SmallFont/ほ.png create mode 100644 fonts/SmallFont/む.png create mode 100644 fonts/SmallFont/も.png create mode 100644 fonts/SmallFont/ら.png create mode 100644 fonts/SmallFont/り.png create mode 100644 fonts/SmallFont/る.png create mode 100644 fonts/SmallFont/れ.png create mode 100644 fonts/SmallFont/を.png create mode 100644 fonts/SmallFont/ァ.png create mode 100644 fonts/SmallFont/ア.png create mode 100644 fonts/SmallFont/ィ.png create mode 100644 fonts/SmallFont/イ.png create mode 100644 fonts/SmallFont/ゥ.png create mode 100644 fonts/SmallFont/ウ.png create mode 100644 fonts/SmallFont/ェ.png create mode 100644 fonts/SmallFont/エ.png create mode 100644 fonts/SmallFont/ォ.png create mode 100644 fonts/SmallFont/オ.png create mode 100644 fonts/SmallFont/カ.png create mode 100644 fonts/SmallFont/キ.png create mode 100644 fonts/SmallFont/ク.png create mode 100644 fonts/SmallFont/ケ.png create mode 100644 fonts/SmallFont/コ.png create mode 100644 fonts/SmallFont/サ.png create mode 100644 fonts/SmallFont/シ.png create mode 100644 fonts/SmallFont/ス.png create mode 100644 fonts/SmallFont/セ.png create mode 100644 fonts/SmallFont/ソ.png create mode 100644 fonts/SmallFont/タ.png create mode 100644 fonts/SmallFont/チ.png create mode 100644 fonts/SmallFont/ッ.png create mode 100644 fonts/SmallFont/ツ.png create mode 100644 fonts/SmallFont/テ.png create mode 100644 fonts/SmallFont/ト.png create mode 100644 fonts/SmallFont/ド.png create mode 100644 fonts/SmallFont/ナ.png create mode 100644 fonts/SmallFont/ニ.png create mode 100644 fonts/SmallFont/ヌ.png create mode 100644 fonts/SmallFont/ネ.png create mode 100644 fonts/SmallFont/ノ.png create mode 100644 fonts/SmallFont/ハ.png create mode 100644 fonts/SmallFont/ヒ.png create mode 100644 fonts/SmallFont/フ.png create mode 100644 fonts/SmallFont/ヘ.png create mode 100644 fonts/SmallFont/ホ.png create mode 100644 fonts/SmallFont/マ.png create mode 100644 fonts/SmallFont/ミ.png create mode 100644 fonts/SmallFont/ム.png create mode 100644 fonts/SmallFont/メ.png create mode 100644 fonts/SmallFont/モ.png create mode 100644 fonts/SmallFont/ャ.png create mode 100644 fonts/SmallFont/ヤ.png create mode 100644 fonts/SmallFont/ュ.png create mode 100644 fonts/SmallFont/ユ.png create mode 100644 fonts/SmallFont/ョ.png create mode 100644 fonts/SmallFont/ヨ.png create mode 100644 fonts/SmallFont/ラ.png create mode 100644 fonts/SmallFont/リ.png create mode 100644 fonts/SmallFont/ル.png create mode 100644 fonts/SmallFont/レ.png create mode 100644 fonts/SmallFont/ロ.png create mode 100644 fonts/SmallFont/ワ.png create mode 100644 fonts/SmallFont/ヲ.png create mode 100644 fonts/SmallFont/ン.png create mode 100644 fonts/SmallFont/・.png create mode 100644 fonts/SmallFont/ー.png create mode 100644 fonts/SmallFont/世.png create mode 100644 fonts/SmallFont/今.png create mode 100644 fonts/SmallFont/夢.png create mode 100644 fonts/SmallFont/奥.png create mode 100644 fonts/SmallFont/山.png create mode 100644 fonts/SmallFont/常.png create mode 100644 fonts/SmallFont/我.png create mode 100644 fonts/SmallFont/散.png create mode 100644 fonts/SmallFont/日.png create mode 100644 fonts/SmallFont/有.png create mode 100644 fonts/SmallFont/浅.png create mode 100644 fonts/SmallFont/為.png create mode 100644 fonts/SmallFont/色.png create mode 100644 fonts/SmallFont/見.png create mode 100644 fonts/SmallFont/越.png create mode 100644 fonts/SmallFont/酔.png create mode 100644 fonts/SmallFont/(.png create mode 100644 fonts/SmallFont/).png delete mode 100644 lithos_c/inc/Lth_hudmessage.h create mode 100644 lithos_c/inc/Lth_winman.h delete mode 100644 lithos_c/src/font.c create mode 100644 lithos_c/src/fontnew.c create mode 100644 lithos_c/src/fontrun.c create mode 100644 lithos_c/src/winman.c create mode 100644 lithos_fs/fonts/SmallFont.lthm create mode 100644 lithos_fs/fonts/SmallFontJP.lthm create mode 100644 lithos_gfx/ReplacementCharacter.png diff --git a/fonts/SmallFont/ɢ.png b/fonts/SmallFont/ɢ.png new file mode 100644 index 0000000000000000000000000000000000000000..cc525f12f6dc0e4f7eb6fca86440667b795bbf52 GIT binary patch literal 584 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!al$!#P$FG|1)RK1oG0- z(pIfn_3quf^78V~(9pXK4F8Rd&zv~}ly-4(`G4jNP*ECC1Sp=CHWP@9jXOFz9)?x4 z0W~uwdAqwXbg;^L06FX>p1!W^54c4c7?d*}guMYuvw6BWhFF}g4Z1CMSb<}5&N_?d z@BaT^>nxI;uA8o(&D6>G{Fl-L7IS^3lkXc89ti4ve#oa5(y>f#O{w1rfjd`@-sBJ# zmz#dI=f0xOToa2Pk(g?xVi{epyLm@>`+HWLYj~u_%X9wwnG2lVEK#bLN)PAz`by5ni)EHRl$+F>U-9%=@ZTsCt2pi4 z&Ffx0ynSzX@2*$ve?%nqMTS)-Z2DJtcUz-ItlcNRdu1u64=zcDS-iPhD!tBWZJq6M z&Ifq~Qot}`P%UwdC`m~yNwrEYN(E93Mh1pvx`u|jMus5<23A01Y^rNu3S|7vY{@~< bkei>9nO2EgLyw8g1&|ePwX1sLi(zSDcNEa_1 zI&`X;nhs7=jWyGUMKd{}XiX{F1ue&~P=`F7{r@Kq5mCj)Wv46;QYvJ<<`o8eWo&Sh-}BQbHvqR>9|NsYVTVi;Jdxk8k1q z*eCkh)9pqwxr5Q+05X~18%nLy3S+q*zM+purBZz5;i|8J{-}=TO$DYA`L@A%53g9Y zT7}m3dZg27tgb||VhKh@Jhp|&iC}gCo4pE7mkoa3gdnkmZ>zDOs7Q{5x#d5K6&!=N zZ$9Ae?Z=F#?&@hqNr{Sq3k3!qzQ)rhLxSjn#j;f+F(5*TV7_6hG@_-g4h?5&q0^P| z(OKttW59aXFK~V?gyLc)>KYtW6sEDXxWY<5*VTmf&c^KA&dv`EJn&-ni@0rbU(SN+ ztC!D*={#TP?SNd)EO*R!1Z^FSn4A5In>YIDD3Lcp_%fM{_2IZcW_2zm2TrTI)WT6~z84*9*=ToTVI)R1AIsirn4@{OUAv00000NkvXXu0mjf%}s8B literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/♥.png b/fonts/SmallFont/♥.png new file mode 100644 index 0000000000000000000000000000000000000000..4caaf63ce18930f6475b85eb79f8134b683893e2 GIT binary patch literal 1172 zcmd^7v8&`{5TElQd0uz~Nf9+giWFM}O_3rfy+3nN2y(4MX~MmHfg$w<3$+GgP`@ind>&TJu%H% z*GHOGD#}on3rXsWVlD_7&nFxgvuwyPU7GeO%A+WUqHF*YzyQGg7N4$gGso2omkrKq zY)hOCu*si|)59p}tozhr?mF+ikbo&1SP&trm;Ld_Hg6b~>FlO*0;k>$nNTn*_vo5e3}JO>~=%j3rxq=Ok2@SN!2@u@qXj3XU5}Fo}@zQ zu|0!|B_LemW`naCmL;Ys`abG93IYNg0G9BASRIBGfumDhy=kiA0)n37Ul!m@%gg0K$5U;jLL7vLIva`)UJsTcZur~NIFRlV}@?e_`GG<#*& z;H$4+Bf+=MPH)~je)#6%rxUnw{L;;DfBF6Xdyf|PfByWzli%$BUjE}@@9m3kKK(Kl fPmlgGKltc}S6~0)pMQx=0M2fmpML+&hoAiq+m>)8 literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/、.png b/fonts/SmallFont/、.png new file mode 100644 index 0000000000000000000000000000000000000000..60f3dc42cfd787c3a91e1da7f6c58835e5b35f59 GIT binary patch literal 1155 zcmd^7F{`9j6h50r;>()H6b4)(!NOt!76vRV3`o|uxG#q1vMxxlaD&AZ76uGRkcS~I z49gT2Qw)g#izzH5nZjZSQyAF7Vjx49Vh9#fY?3LanBo;%p4_*8BbRgT;huBPcP{t) zUOu@tF7AJH9{?_{9$!8s@%+xu&&YoJ=k;#@XYl09XOGB{XK8jonWl+|9LF&XL(?=x zQIf(7;(+C;0SlHY8nU2?94?n{>iTv*Kh9={Jl~JUeUfaWXdMKd@3*eIa-7Dp7KTx2 z+FVr&S)NH!E{YRD$ap^GxR_-lh6x6P5lwp(kFU4bceq{Qropbl zw!qaCo9s=UoaWJ?2=-HdH*q(ay-uw*F`LM!Lwz1-g|FtGGIr$DmSRf`jG?Csw#J(Z zr%9|VGNLdzolb|tVZYz^eZSpq*XwoHb#2=&m&>MU>bkC~sw~UdY&M-vCzDB*Woeqm zaU6zW5Cp#OyRPdvj%8VfVd%Q9s;Z(Wk|Yg>LqQN?48zlCwD-J?}exgb`8-|1zqNn)DI(P6j-ir*p6ygvSx^iHbjh$y|Y{CuL^0A@P*5a zbt)2paE*PBs}&XnCJA~TY8vu90-OL|1MC3S04+cRPyrMG6Mz&T0vG|f0E9Ba*WrL& zhjop4j!}fRjfz54L|}*!7=l3nNOuMh0N8hPk3H^I*cI3$ICn8uG39O}_81QKqruLj z*ADf{f~5fq{p~w(hu9$IhykL3C?GpFaEttl!VN(RcLsy1xAN I;qxE<1NaGJeEL4yaAD4@X<4W{*=!4wZ3GI%i56b~Lu@sLsv9z47ubRPiDuO3}Kq37AHpWUVV&0p7l0NjPgUq5|FuadwD9OF0+B8sBO^E}J4 z48y3pBrBXCF`NLdq1c*iDk9EiZzq$R@%T6z9ja>I@9*+_lcp;|mQl0_g1PT^t~<5u z)-=b4QES>rRVzgq$Z{!3g(zl%kn%j?xR_-_h6xzPV;C2}2Cx9|xW_je+%0i4$90Fx z78fGC;4fd9%`~5M%zKKF1=OZE^?nr1W_4Tr(^9R$vxwHEa6QQPEae(@*Mx4D)D^1|{+H$jw40@vYc1Lr3>5 z%`?@ejH=8liIat9>}i3mxQ1+LVqQc^>c_+lBHQx~+to~4(aj!WdffTjx%IkMr@2%I zeBWYH1t{0J+u?kUb&YwBVTh)Ql7s*!fHweJfEB<3paW(~NZu=g0xSiv QkfR%xTc#{gpgxkm5 zHe^>m^V)@(4O8pgoVZ2o5GzE2Xd}vq(3;TbFjS#0Q*rhzRn%o(6jvrsNK43{|D1mXa0i}0x%O!4f4zP){#EEx-TUs*Hk9)!vE40Tl|TLID*fC_w=gDnt-D?MAoJu{ur%N>HIADqN^gKmirP zh(rMs98lrHNfc1wfC`ZqqQV3hCLBQlLriet!i9?qapA(n7FWK^-rvY$-VE;z-}i?3 zzHgq~7#H^++y{V*>qnPQ$$5U4=ci=9{rl!OfKzz#_}LXHd6s57lxdoX$Z;IQFf>h5 z6eTIVAa+=u>abv`q9F^K$l+}Es;+M*lf!tt&-2}2uuYP66fJ|G_5FqG&K;+*tf^sC znl@3@LYBvpl#Aj}5Hg-mIWA_|h+%?Gr$^HsMY$AZQan)d3 z;iAC#2%GFxog638z6f?Be=~GfnY~P{MPfFQQHS~@&HmS5;M(<#;?EjYh-aFw3$u zP2)HY!!QT}-}hbDbsWdCEW0B=;%FL^GwCj zWm}WV%+F&x3(VNldbaEuqNNJD%q6KGMourVT;H%A)v#pE5EZS97#+6GX0E>|q-nwz zE;G=nNCcuaZnrp}V^Ls|py#2cA#N1vUvzT+CHWx!Z_6gq>Zl zv+?MqL%pzIX24W`{Z8BjAc2tgGDfBkduF~A9Y@$|+fSO4qyS^ZZeUv=;EN1qavY343Z z;D;aIBF*=%FF$;C{=NVF>o?9m>i7Ha>t1^L-5>DNm+$ubXK$W-Cd1Y5zrKC;$p@#8 ZRk)JwQPV%aeTM+y`s(KLmxs^4`VVPTXW#$; literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/え.png b/fonts/SmallFont/え.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c595544d777977bb3d815aa872bb48ae43ef2e GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW-)%3XNHYHp-N8|#}JR>Z>JpOJD|YfT-*Ks|LHeb zJzkC7k;g7x@LIWb>-lLbdo2o9vFPzG;xS@T_MCNK>8nt4j;Q1R4iqgDzTjWhS@voP z+xHlOZ=XV#TY1#Y95v4s&*-mw@$ttT)in=Z2$jt{zr|Vp(T8ojWqzK$S@r2t`={%? aUzxlY%gA5wc)11W2nJ7AKbLh*2~7Y309f1r literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/が.png b/fonts/SmallFont/が.png new file mode 100644 index 0000000000000000000000000000000000000000..a90a517a82db91004a23cf46c1480793cb7cc829 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW(B>*$s1Myg*rW5978;gzYTHZJD|WJ{OJGwJ9m4! zj+Ld{boFQ1D#A6Ts9$$)M)`|-iC+(&WXLcxX)t`$lrMVOWbVO*S*BC;TG^x2z1+Bt zXcm-+xmDPI*vzT)h3P(fa*BqLo1Ffy17)nGfdywgE6V2B-mckiV8PTdlQC8P$e*{D pMarTXWf;tudDgP2RlL{a{}>}>x%B4xoj^x1c)I$ztaD0e0st>zR4M=f literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/き.png b/fonts/SmallFont/き.png new file mode 100644 index 0000000000000000000000000000000000000000..66e3d1b83cc5d62b865be190ae2a894bfc654b75 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW?93u;;#>ZLd~8ojv*e$?}iu(9dY1@Dtq@oUM*Iw zHO(<-?%J+JFQV#mVnPmmV^m=g;A#K0<97qMgRao$E4MtmQ(o2?J!4tG{5z$$bw^!N z(rv>hSJcEji{2Yd*bP0l+XkK{1H`> literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/じ.png b/fonts/SmallFont/じ.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a7772657795a8a7b5d8c0b6773a9470741088a GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW;q^FvscDIp$bnI#}JR>Z$ljU8WeaI_x}H1WGi)c zjr3=S9&5&hOM9jn+J&!Ty3stJ(?ogZUGIwwQx_&|e_b<$fBnOG3RwQS(82EKA%7J68y*UJR2u3H~& ZoqJ7O_vxEMnLsx%c)I$ztaD0e0syRPQR)By literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ず.png b/fonts/SmallFont/ず.png new file mode 100644 index 0000000000000000000000000000000000000000..d835382e0602726dc2ae90ec35a38887514c251f GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW_jaX-rxLzLT#Qdjv*e$pH4l<)nLHmJbTms|4%DE zB&nC>hC6OhZ`JXYb9RlBk4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW+lFk)1Mvyg&I9w978;gzYX!^I$*$YhUNeNr!N-@ zWULNUZWOaxF7UlD^X>872addV*spQPv_8W_ar;VUt^ABGj%!^04$jAR{)}WY7Odr) z@cQpuW{nUfGxqKquNnmXRP3uK@<_b*obPtzl#ELH!aJ-jtIeu{_ObsmJ7jRIty*Da hYjMk(b>G|z8CK{>>3cKZ`VDjpgQu&X%Q~loCIDgxR7U^+ literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ぞ.png b/fonts/SmallFont/ぞ.png new file mode 100644 index 0000000000000000000000000000000000000000..ddf79392d68502ae2b348c7f74293cc03be698a6 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW)%bZ4<2WMLVcbtjv*e$--hfKYEa-&w*B{i`r{={ z;R;)t`N|$G@SMMJ%68uF@?CX%@(ma(ANsv;O_VOUzA8dwck$z7Cjq`qi`))W=BXWT zi`Q6kW37BOPg3W3&K=DwcIv+1oN1W(k=6`r7t5k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW-05F&$}#uLM@&yjv*e$?@sX+I-tPe?5X~Jf6=bD zSAKE6SoUVlL3YKABMUENJqq1@kJ*KHftErU!v?McE(b)8%=xsfX_M29C8uXP%+|_p zVb9fJe84cHV&aQ(h5svy4;=Rj_tCp2DZb^f+YSakb>8L7PmdHRFwAE=v^{XWaMtQO mFB87?9w=t)f7P-7IPcsrF|YH1vpxac!{F)a=d#Wzp$Py-?pdP% literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/て.png b/fonts/SmallFont/て.png new file mode 100644 index 0000000000000000000000000000000000000000..73e2b6678c0c3506bd4eb8df731050e2335f6c94 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW-0b(9p6Ceay?xfLp+YZ4RI7=P~_lB|NlR=%3(8C z;n~%Uo=>9IUnsMjf1E>7AoWoHFBjES%3tCRm=?C2XPI+OvH3eoh>KQF)a7MqMJE-v zarC%^8U2@U{Hm;VIeea>LP8z$GvyCvD?-k;EbaSUyC8pkcwO#2Wnty4XBSojEoSg^ L^>bP0l+XkKV&+T+ literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ど.png b/fonts/SmallFont/ど.png new file mode 100644 index 0000000000000000000000000000000000000000..0118cd56a8698056b1266974b0c963940eb8b749 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW=Z`Y0=#WNp*Bw!#}JR>Z$ljU4k&OeZu?(9Q?|^= zNJC<}>@iMJua%4w@AJ**w7s_`--zSDRc?kew#lEkcrKMJW3`y~+h#jM*k?!Y8w@+_ z&+cMKG4{|%_GfnTV)?pq{)M`?rWanl+{d*S@N)`m0%hnyBS#GWHk;<|Jwp|5re0zpUXO@geCx%e^Ji> literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/な.png b/fonts/SmallFont/な.png new file mode 100644 index 0000000000000000000000000000000000000000..7197f1618ae5f9256eae51f57bd7564b072f441e GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW*Ni!j3WzxLfxJ&jv*e$uLe8v9Z=xdeB^)q&fRBI zIJ7G^x%(~@u{!qkz_Z?m=h?(Aq@H==AJlYzU%{;pp$CeEHD~R)*zoAi8E%8fb$gB} zt*K|+$n=HJ^Ywe5Et~(XW~lyR!yRI?_N?C-yrg}jx#q@>+SRFzroy#b tUP@lO=ak5jwlwWO+f?fZkr(t1GC%N>HG1`>Y%$PT44$rjF6*2UngDImVYL7N literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/に.png b/fonts/SmallFont/に.png new file mode 100644 index 0000000000000000000000000000000000000000..e72cd71d250a6ed6859ab626ae89bacc0f3dea70 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW(i)C>{?}@P>ZLFV~EG`w^I)CH7M{nM?d=izsOdi zm+LT}-mw#%f)%finLUWNDcg0^vq5TFYqV7QsTE0|7xhfo&0w?W2Djoj4Sn_x%nYY; zWdAhyGc0o2G<$c+Jati?zG+5}wz6$-DtIQ&;jnH|_LHwZNy`qKADQRWy8Q*O$h?vh l;R3Z;GvfNf9#miBaxaxJUpDdKKA?LTJYD@<);T3K0RWk;RuljL literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ぬ.png b/fonts/SmallFont/ぬ.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa66fde395f48f7011ab47c1a2490f6727c7158 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW_cbS-P=V#q1m1;jv*e$-%c?UYc}9<{#m*A|J193 z+xzOQiah=?Oy@3>VVUAFJ@+$glkT6C*pgCn%l%Z8)4lzy4XjJm8uzD9 z<+%CpwCS{8hT?1PZ%vHcXc6$tug5IWarUgK{v45dpBSbrc_5Lp@9`^>b7z;lv&dHG z=P>9B5ZUzL&pPdi%kq{yeW$$dd>W&4Qreo#Z{chc*iL+Y#m)UgN7MRm94pY744$rj JF6*2UngEoUViW)X literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/の.png b/fonts/SmallFont/の.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc64bf303f1e44d201cac51c94b72291e958260 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW^wjlwT@3fp-xX1#}JR>Z$nP=9Z=xdobvzw>AQ)Y z?V6%9BFiM)i|*-#2lpE6V&5)N!XD1m(l2*l)@RKY z)oWUwDPFc;tQ_Jxr`5=Nv9Gw(bX09E;}&to0NI4k9A`W|$`9-@u#ow5;@pvHm3z;k oX7SXRcjPmQ`icCPcCgD-_q`>n&TMXQ8t5nnPgg&ebxsLQ0An;#jsO4v literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/は.png b/fonts/SmallFont/は.png new file mode 100644 index 0000000000000000000000000000000000000000..ce1e2cbfccb7da72f0db10885203da64fe6562ea GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW=ZB#ClXVELj9gDjv*e$--br>9Z=v{eB^ih&fif^ zA^~Ze+>Pu6y;n9Uy*KCDoIK;ez2v_g3??iwCT~AY=T!{Uo1&|9mRIjX=DK&A%MEQd zEGVg3wLA9{^Bs-`cF7I*PA$#6u=n*pi_J>Ovzsn2afo4>W>gfj(Q4&g>C|5g94qGU xOSpUR?6D0q5`V6i?r@1n3Ho^J{)a+qhK^|p#>^}tj6kO`c)I$ztaD0e0suz*T%G^` literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ひ.png b/fonts/SmallFont/ひ.png new file mode 100644 index 0000000000000000000000000000000000000000..51615c787c7d42a82a78e354ce3b9efc7215bbd3 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW)r{0+*wrWb%xqfj$^%=<-CqDmUwws_?QLV3;!nC*KsIctOtems$i!Vey@age& zs5s!&u+Uw<;5(mPnOeH>)d|H7s^4B{Jz$=bl;-ktYRwlp1JeYfiTN#J5^qh7j@_7K wq0WEGMQC~O_s0k8R@bID%s#bnf_)Qr@+)P1*I7%>1D(d;>FVdQ&MBb@09mG7LI3~& literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/へ.png b/fonts/SmallFont/へ.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8eef15e8306d043d34c338c90bef849687a4af GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW(7`_nXCtaLQ$SBjv*e$-%d8DU|*9O^8y tJ+-JHu;M2B^!49P6@Hq%n1i8!c}WDnz&>s57eHGWJYD@<);T3K0RXHCL2Cd2 literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ほ.png b/fonts/SmallFont/ほ.png new file mode 100644 index 0000000000000000000000000000000000000000..0fadbfc934e67c2b6003912f00c7c3d6ad034e8c GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW?8Yrl@47%p{brOjv*e$?}i){Yf#`ww)_8o`t_yh zKULVTEqpY^Rd`$D&F9Q_JAX@e?dj&vNk68qJK5w()PiWO=e#naCtO%J$haExO0dh! z%U?0!$wIb0iEY8L7Z|2Jd=w~J$HTxYur=TU`(E}V3qn6`-kzr>W3a_IhG9oG%i*#` zL5)G&-z-%PTLV;_xHLUmj8ApzC2ukHP(BzZCtWKf?V6}F-2&)922WQ%mvv4FO#n*k BR{{V4 literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/む.png b/fonts/SmallFont/む.png new file mode 100644 index 0000000000000000000000000000000000000000..7a9353131f7ae849a473a221ca54a6f55b68c3c3 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW)-1R6F4=2Le-uwjv*e$?}j+?9Z=v{{OAAqyUZ>+ zMw@;5k}|kiH+wg`eO+C?(I)Yt216_lOURch23y~W@>72CY(BX9z2Nk4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW@T13CMivzP`#&%V~EG`w;_&v2MjnSE&Ko9Xt%C! z+NzN0Zw&lxeb_tRwag<|9vvdVKy@u^-p^Xlk4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW@$qM&7gFkP_d_rV~EG`x04;Y4j6E-%$@MR{^mTc zr3o?0d#Ak76>z^2yIKC!S?&Ao44F(^9Mg`zVZ8TuCG#S|3*`>!>}%(W#0vBmFtGZ5 zY$K5rN To<2|qTF>C=>gTe~DWM4fhYd|& literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/り.png b/fonts/SmallFont/り.png new file mode 100644 index 0000000000000000000000000000000000000000..1a93393a251cd9e6dc3357d6cf88b4b6e229a4b8 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW+hdXa_$8{p*Bw!#}JR>Z$nP=H5hO#KJx$n)2fSy z@2t+LFf3}ma7ol?vwc9y8m;oJq3ch*3E0*i`;fU*=fSrVyI4Zf`$annHYYP3&*7H4 zG113CHcm*vYVXx!?;2a*G5pfpec><%<09!s8~NA%H@+pTxKeB{(p{@o%zEY{gQS|? m#^A!2uB=z|N}~_5KVqqWA!6X1aKjMjA_h-aKbLh*2~7aClvnKl literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/る.png b/fonts/SmallFont/る.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7a5303fdafa308e8f8a7f89c997ca0b4134006 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW;w-xm)qQcLM@&yjv*e$-%dHmcR+!|IePQ||EXoM zAuO+KbR^vmF*`9n@J`!s@g&POm31tewy-T-ZJvIC>&KOdLo3w`?59;%)bZc3c=s@n zshcw_^|j=(f-*Zd&NG^ci}Uw(zTx_Cz&1uxR7LWy;k1wk%(L}EO^(d$IAp)zeqr#u lj(w-D^uN5Z_%H7P-rOoV#cOv0l!5MH@O1TaS?83{1OU?VR@DFi literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/れ.png b/fonts/SmallFont/れ.png new file mode 100644 index 0000000000000000000000000000000000000000..cbad6c28fccaf108f16e0f96787bd1c801c073c3 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW*JfEY=uIg&_quc#}JR>cS9Wc4k&PJZu?)q)B4SV zJihLflSX}9OLbd<_DNm|&R$o;C%_ebs)3)ukts=N#$*Gbbe@J_gA9h+^jA;MGRIs> zRsW-@u-)T?j?l6_3)HrKe;RaiaoxKa9?$1XG2eIk5u8xMq|EUBo#Wn#Q>y3d>iX@{ xPIu%Lk4;OuS-sZyz#r8^4D087H95flh#@0K*4bQ3F9qm022WQ%mvv4FO#q3}R`~z` literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/を.png b/fonts/SmallFont/を.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4d271037857d8ec34611256d3c5cb253d221d4 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW<`;>mWW88P>ZLFV~EG`w;`wb4k&OeKKB3r(|6l) z0w)~Gl~fnyI)9u+G_FZn(m)g(v@wtHIjhUBD zO9wGetQ7ifz<)7fu1m`DLY7>u_lFj~o5-xE9wI)2-z=e4Ixsq2^Y6u{dm~TqR`I@2 lRxnZ$Ik)hf|NbdYn9iJ5mR#?+M;hoJ22WQ%mvv4FO#mvyRipp_ literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ァ.png b/fonts/SmallFont/ァ.png new file mode 100644 index 0000000000000000000000000000000000000000..5216df79c23946d170a7683a778bb37dbc4e3417 GIT binary patch literal 1167 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 UU(CNg5CB}>zPkABll$NQ4_+r|vj6}9 literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/イ.png b/fonts/SmallFont/イ.png new file mode 100644 index 0000000000000000000000000000000000000000..88c687b0c49fa0b66417c627d73b13ca2af117f3 GIT binary patch literal 1167 zcmd^7F^l6?5T4D3(`LnDhzc!Hp+W=`ROmnf6)KdA_M+QUSRJPW5me}c2!^OoKmiqE zQHTm(FhPY2lPE-m3l%1Df(jE%P;rF1+l~OREGsi6%AR?L=I=Omy^lOc)TBtc6q+-_cuwhilRjjw7%cC?%Z)|%bFTS zrD-3l;dKSjTk2Abb2)HQItzjHbq$g27nHL`z^j$;ikpa9G5k= z6*dLVhgfGXC&^(P?TTPK^w$G-nc0ifY7(=Kj7g}E1Fi7Y+*A6FoZ3=siGk7ebivkm zQ{gm;l|@DrI)}qyx7%&E+s$UPTCEm~MccMb)68bGx~?aaNmW&4S&l}d;cz$@46-as z(=?9bFbsnr@O|HPUB_`O%Q6f@*L77@6-ALGsoU)ef)HaE9(uj4=Pez#vFxc~mYP0P zv`kVWQSybZ&G9)Envh?XkoGMA)&7&*Pba(%;gRKt=rLsYabVzl2l>$(2CkfsS= zxJ+NCA`uAJxY^)*jzxh|(BB%H2flKJ09J zowY|V9O}6RGXtjjt2uFvSR>|$0iuB@AVQ@T1vi&s)o0VDtc zfCV5yz*5JZi3usiB`ixQLI|oL`17B$hX6M=xq+aXullrenR`u2w4?ZC*)6A_O z!S_F$li+)o7x$i=eCI!X^Ns84>yPf-{r%_<`0uOtpZ)sj@v}Pvc=!C?=fB+j;Nkhv Zw|}30_V)NkvUh;X`&Sn~fB5w4{{i8UXTksg literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ゥ.png b/fonts/SmallFont/ゥ.png new file mode 100644 index 0000000000000000000000000000000000000000..c81d86521e7f9eeda4e13a4e9c64648524ae5b8c GIT binary patch literal 1166 zcmd^7F{|5F6h1F0)$0=vl`2I|G-y!41q~Wh&>)JE>Ltpn%F`nXh@yfX)!;#c3Myz2 z4?$Eg!Gi`5rd2_M2Ms1Qtp*PsG^F6cP!~KHYN&^l8tTDAhS2HsCVwM`d+z0&%lDnj z{l2G{7v|~7of7~!J%4!ih@2G3JpFB>8tVhWgA72pP{O92c`}$S_@+_9@DvD2JkK029Cf!2K3qtZ*~O)eM&n z&TDK-oDHzaUyaklDBhLfb`Y%l-ZFOZhe30dadnDOsmq3 zfvV@S8cT8@b{t+XI8I?$k)}DSt&3^Zn+&tMNUB~`X5kN*Mn0vrHd0IUHP04+cRPy>_zeSi!g2IvBK07NpP z*KUXNIgZCz6d1?oIH;<`MTCYdLPIzR0YT>gA%OFG?tX*o8O}>=QXF|$XqfRYV{RWY z+b*;A>4i%@w_$3+#CY>gTq8D!1!9P3B8rGm>rkmMkfA3Mb9M}wS4CFlX)@xCl{5eu zKm_0bNE5I!aA#pkptyu(1!V+b9frUEefkB!5q$UP!Xa00bv)Dlk;qrQ_wB>4h{`nk zI*;JTpFSeZPtMQoJwE;+xcVO6eQ~h<(|X&&f$I^ z_sfTu=Gomh?gGHs#e?%Ja-QD$=^e7){BijUz#Vw_!K3@+DsVK%P?lvOBG2C?1NQ65D(6lDXL00saac6hzUZHMbQu3GGB zT$DH;VVgg1(&HrFm*H*{Y=+({cb1vGNUb(Do5+}idKqYiuMS)#bL7O9LbK-^qN59z z%Ih+xNUS6>$K!Fo-|u$2?RL9fub0bZ*L910mio!4qg23}U*L7{%Hcito3{BHiRh4DA*XxO*m|zqg`~98ouUv0oJ5$rDbYrCI zxva*L9Ed%K7YvS57*?cdj#|{ktQt(mSzRR6AS$zPlm^4t%R@H}?8LVs*XTRCZ>g@K zIJ#WrL6JClXeGYhcNEW*Y)v#2KFxwCcKf021*YR_rmg6vr0PAy_^@?1bK_|#Pg9}v z*nvUC5)iI&yT$n&%M#NReIIol1pxt$0M`H;fF-~JparM_N`N6i1`q@E0XzUg8R2Wc z$F9Ss!J@!8M#n)_B`P8?#0U(*AONH~2M7V2+rEb_ZsypP*rqt~u+T8$Z({BcF}psq z@#&>YJ+)zG!qj*%CvFg1!~!uyG!aEasCB4R7|AdYi8y#9}|{o_SR3} zn{Qty!M85X-+grY^_#=rUW0dDJ^AANiu?2J>&f!ok7xgQUw!u7uRneC^3NaM``3D$ YiO*gM9zS_@`?bKu{mb(o-uvXqf4^pIWdHyG literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ェ.png b/fonts/SmallFont/ェ.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ce710928818014feaed00734ebac545c8bb36d GIT binary patch literal 1155 zcmd^7F{|5F6h7gFr`L#A4Js&9q#87M(4aw34I0!&FX+9fJca0iC>j*d;6Z~5DrgWy zrGl8^L4#XNqkskv8bseHHgYA9Hqf9_VUn813U4p$Tj+o?pvyB zD2^^yc~B%y9$Ja7_Z`JEC0i2>g-^2}irs!_dx7b=nrSP#DXDr7F+ObF&D?lZ%F|RR zJ$7JFu>^!`+-`9`$FjsUMc+qVM?pYoOg2%TincXQDU3o#KS_vjDHhzhlttr znT<~`UFww$GZUu9`*-37u|+HpLqro%M1)$0N`;XO1CfZcXUM!NvNBJT5$~m>0muL% z00%&lfR%xJ3scgHD_B)fMiACv_{$&X4*_n$*N?9qQu<%7m)f5a`Kk}Ty8M!`OtbI& z7Ce7(mn839U3`9X_G9qm_Q~nZL*e!}zdbwWKl}dQ(~my6{1ATl_3YDse*gPtauKc` MTwnZj|H-%i0e_=oRsaA1 literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/エ.png b/fonts/SmallFont/エ.png new file mode 100644 index 0000000000000000000000000000000000000000..dda58283a9ed0aab6d15985c3d72dff353bc3a9d GIT binary patch literal 1162 zcmd^7F{|5F6h7&L=q2LS6b%a1pg{!>8Uz(ogP@|-3(Bj?Q-}ge(4c?{9z;<=1r4Ir zqY9YfK@<|2(!Gni4WIVkuf1{Uk?%|$u&v!2O z`@Vg6X`J1C_bvdOT|78{MB?d1^4 zilQWi7sMXRQ#}?eRWxKl6FFQgUe9LN)9GO{+2{FgIP8*S6Gf{aXnntN-KFEymNhqw zO4FvQTFCN5l5$ZT2|~v6DaXYu8!=4K>kVkyqbQf6Y>Kh~3;-Pf4?BFh!LG&464y1h z6*dJf$5>~tXUTCI?TcVH_O~No|^OS%zWgx~{6Kq9~Fi_4|E65Mm6&<6yA!ytU&tmOVGjQq#wZ zmPtw^O1{vyIbLU3xyJ}J%~DO3FUsM3l2&F%nj1HZ%UFt6iX`b+f z%M5iY5`l1yU5Cph76m2=dLC*T@;m|@0bT-Z0agGFKn+j<6aXWD6d(c^0Js2zGQ!t> zk8O*y8Rj`g5!yB?3Q-Y(Ax2;b1_2=589)GF-^@L9xLsmfV4dL9#azXdyN=jH*xL#t{G-RG-}}#=zjgboQ+WS_tE&&6e0K8W`FHR9arN`xS3lkUg@%6?Z@+4v Te*QJN4;S|@&wu;)**E_I_;F}w literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ォ.png b/fonts/SmallFont/ォ.png new file mode 100644 index 0000000000000000000000000000000000000000..f88ca2b0f6bd570d71dc3d04d8cbba7346cce871 GIT binary patch literal 1170 zcmd^7F{|WM6h6xqd2V=)5FuiU6cGlE5+Oy36k*MKWS`NO$7UgDiU=vDNRgE+qzDq$ z2*WZ(z$pedD=DT(G3XR2Mj0^Rs#6R)$OxmP7-Scxm|}`oEC_PEZ~w*~?zxw9F5h=9 z_xm1PoEyhCUcUhV$7i=rZj1!~ znxZI4;RUh7@>GWfOBD@S&_oVrvuBgZ<#@awjdppy?f2UxSx3<_2o}EIxbEC>YRj4$ zMx|+ERV`$BBuTj_4g?|N`IO^gmW>!D=yZBC?NO9VQ8q*<26 z@utFQ5-W?0D0B{o!)~|RZntgQuGj13a=BP6nx>h}W_4XpCX=eF%Ca1dM#JH7Fc@T6 zmZoVO$6*)-LE!to>$;BPSe9iNhOXiNm94l6$By1Fg)~nThCiLZe!U~!z?v@ zsA!p_M55#iU7O=|mX$k!E*4VZ^|&l zd!3C(FCFT!1v3Mt`tx_<2C+uW5d%a6Q9y)BgHnN^1bu;+v#U#-A}|t1lM&CYqyk6) z0ssp@nt-K_I};NE#TBedC_)ITAo%U+@%sSR;NIRNA_*xW!Wr-B|?Mm?K zeGl(m8mA|(p8&w=#qG0uh5 z6eTIVAa+=u>abv`q9F^K$l+}EY%;kTkN2a|F3;P3ze$o!6s>|_>H7=UojXo#SyRKP zG;OS^g)EOGDHp|oAY?qBa$L-^5yJ$XPLHNNigGE+rYH-*0MG$&-{O-EHcQ;hab4rG z!bO4eA=cTmNpcuRyCP_Z{&wK5GkcXzjp48tG@eBXCn*Kr)nvJAt}bzN0eMNuS4>UO(=AjBAkhhDGsytU&lEPHC0rKS%R zEt8Z;lzgFUbG**7a)%LUnxz(1J}djvQCj73*$;~}7$*K8a55NT=k`cXj zJ6tYtGQm8@C_>vtMIkOCG-MGP!a)cKIs*s*?CZJv2Dfuu7FZ`Zb}?5m<*p)jA9mVa zXY0``hk9(m%z&x>{GGT(tPyj>0MS4c5TVkbRA4AUUm)h}>Jq02jKtAo#B(dD01|)z zzygpaV5#HI#DqX`4eJt$5P~WQe*gRQ4!{lg;BhXK&v>{`&mOUvI*#mw)@~;ZMH^-<~}E@6WFu9R2&sOW8^L#*ZHfZ+*J{ a;%G?>-_4W@YTkb)_On&MJZMDdVP4<0Jt7MLx*ivYAd_#0} z!BTl$<`jvQMCNcf>~_2DcH6e?dc9sQmy5+>KA%sg)23<0<8fWrRaFg#!@*$C@AvaO z&$28@k|>J8Fbsmg^E}seZQC|Y(=ZH8(^OTJWx3Poh@zNa6dk(Vt?#c~Z*Dsi)2ei1 zpz67-#*!R}9fubTj#C&`q-l)rBvmgevv80G{n*PxHx2B>w<6c*I=XME zuAw-(T;)NLIC*F#zTR~d&y;LUG!#C~f+%*oq3s2x<7%d@=%%FV9mIIwx|^Bttdu9I zPg27!;HU(xqZZJ zyUfO?moD|phN%e? zJc4h(dy_QZIXnH}{_&IdzIl8N-hJ)Lm*0Cg#XsJE<7eaa&j+8q_4bFqKMJq>_jK^^ dm%si!VtP+rFOsKUwFC!ex6e<1y!GkVF9Cb|Z7cu) literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/キ.png b/fonts/SmallFont/キ.png new file mode 100644 index 0000000000000000000000000000000000000000..71f84d25e8f7d5be249e3e483702392cb0c5f14e GIT binary patch literal 1171 zcmd^7F{|5F6h7e%dWrH-L4!&(Xwcw66b%~GB8t+d7nE0(r|=X|iv|@`aEk^N6wshS z5JBDGfCdjHQ9-31G&rpXK~3=>+CW_})D%-Zc<_)?7Yz0AhK#580UW`Dj~?D5rNGe~Ls^!Eh&<1;EKAcg zMNzUUh!VpI6vKh7Nv0y|5|7jA>+$$%G};e`yQ0|kdYd#|#qlBx=RweV-pq9y+n$(a zt?MIAD-~rZ%Y`KMMKKqIjOP=Mi&-{gm@ZBG6y;HrLs2$>319%=ev7YGxS8W>hRX)$ zHMS+r2H51U$LV1d@5*pH2-baXnLCTjZd0p?&2eOmLcI*M!dH8)k~wl>OQG5E4bjmB zOXYQ$QzTXrnZx0*+wHd7?PjxCtyYW0Vm_a@Z9AP#o2D6$$8}v-RW%$A2ZKSs-_P?r z%d#X%q9_W(FbD$A^IX@pZQC?W!!R^WQ&m-#mB{>i~4lfuSr!cHY(;U^-#kA^8hFM)CRWB;DaF7Q5*vmsV4eZ3XBG>3Tx^Jnj zp*Xr+AKn4&4bOAg7A{o(Z zx5N1y$73uCjAL{hR8`_4LPHjzAsmE&pmTr_z`35g-{5+N^AejBM;;a$X8cvm?IUK} zW!65uaH*FzOih>=Z{CS(#0IfI3=vI45fN$~DisDY^h9FLjv@1^$jUrTM!d0-1|S27 z02}~m0#*j@EKCU$m$0m$j3BJT@b|w?J_NV{k1j79a`nHC@3p@r@>Ms#y#EPNnP#u^ z20Z`fZPI+_{Op5=$IssH|9lhf-u~s$cQ5|^x@*0se|7h>qaXiVeEZwe=w0^L7nk{| b?zxw9F5h=9 z_xm0{xG+vn-Z}w*)ARdh56O9algGEne*OE!&j7dJ!H1XkNXfG_+o4R;L`06`7>1!~ znxZI4;RUh7@>GWfOBD@S&_oWW(-(DpJs$5zqg|eF`~6LltfFWU1g-DSU3ca$<9{vMfiV(Qr5%3X1wn{03=h5D*7KH*JGbnKVV0Uc zRJ2S|B2n^%uFdf}%gP-_plOzxSNXK;Pey5#$7Me((qNeQgUHPSC-JS=Gebx3*_vl6 zjxO7pRAzo2+gV`7p4PKv*AOjL&}A-3{V;NRf#v#!?Wl$&Ylf(3UBqa=an>{aX(3G# zzHphoPDLURt#Px#*$j&UlLS2vH4S+l0S*Aq0M-BtfH^<|PyrMG1Ar7D0_Xv_07NpP z*KUVxi*=28j!}fRjfz5CL}^|&l zd!4mMFC6Nr1ychi`pb9X8nHpl5d%a6Q9y)BgHnN^1bu;+v#U#-A}|t1lMyeiqyk6) z0ssp@nt-K_I};NE#U(6DC_)ITAo%Ui(+>cS;IoGpHo5v=#}Ddrk$lzdPw#(3RHm7m zJc94Of0H!dIX`>v^7z}kgD0;8y!Paqx9j+qum8T&ULAQKfAQ0!cdy>~>aV-MUjF;# bKd+p;diuvF&+l9j6rA6?IQ#MaN1y)(#0VMa;x00ffq+>A zCSV;36NWB28X=1=vM5?1LXm<+2I-<;kqTXO(Zv(H=%UD547fSoH-E#!J@<0X<@?U% ze&6Fe7gp=$>o)KE8L0mLkvcZN|23L=*&p<2aUO z8HQ0bQIgxd$h3KIblFlRLl$s4eK8(ijYfyza9SG>o{H#vIxVu@6SB1ah!=| z)rK+B^-@)bic-jOUy^cB%mg9f`IzHKyWM5kfMI-waT&$|umDT|JnZmtjoSsTXSix` zQRBSC*#MjT#W+2V;(bYWgK*RLSGl{)oOxtb52XAjXHSx0#vGOJ$OZ zrO)+DCYFI}joU5GW>}V(rWgch7$}Mea0Ivn*Z?d6<^T;q4NwB~0WyFXpbOvwP|2uX z`#mleI38nBU>u|CqNY(7Q5w1^4dtK&6rBSQ0QY+CVT+p?E=p`t9Qj!2myzWx9(gi+^PQ8=?|=2ivme9X{=EMg_s``o aUuJJVZT<9K@^7EQ;QZFb*$*Fn@#sG-d~G8D literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/コ.png b/fonts/SmallFont/コ.png new file mode 100644 index 0000000000000000000000000000000000000000..a9523741eba9312767f44c68c1aa456950b1af46 GIT binary patch literal 1159 zcmd^7F^l6?5T471)9#7I2`Ut#LJ2AyP@zJF3PF^M_RwvVtd`S(I82D2`XHeL;)2pR5*zX6($%W!WAkEae@m&T&TDZ7cN|Ead6G#?fs2BX5R2--hA_T z-}n6b$~b@U{sRCwzkGc0gv8T3KRqG)?O#{F0-V70=T9GzBhS)ok1|aY5jl=y7>1^4 zilQWi7sMXRQ#}?eRWxKl6FFQgUd?8=)9GO{+2?sT9PW~26Gf{aXnntN-KFEymNhqw zO4FvQTFCN5l5$ZT2|~v6DaXYu8!=4K>kVkyqbQf6Y>Kh~3;-Pf4;{YT;I75Z64y1h z6*dJf$5>~tX323H?Terr``eMb&g@lcHHleA#w^sQfmZlx?kPh@PHic+#K7o#x?pR( zsc@Ra$|55Qz2ot?-|xGw+wFFn&1SV)wQbup&0?{r>v}euRaI4%)bz2U zWs(w!k}vdaj@MaM?lA&Qvs6>%i*h)hq*Wf5!>~w$apI36Hw&D^w_?u>9erSHo~byx zY->`P`FU(-ff;++z?NM@v{XTtxg_<&$QcBd>l?PC8kVdXqN4Q?qr=YGF7+3MG*9@# zWrjKxi9oo<-42&aEDB5#^gPrw3<5y9Gk^fVzMFg4;dY5_fpvmY7jqR;?lxi%VXqtX zwjRB5s23J244CV0-icep8Zk!<5Di2D5h@Kz1;!E#1tQMAE^&&$NE}T@ypfU$AOQ#f zEC5LYmOAcDOh_xPVO>HILQn<4AODto|#KuR8nk@iW3Q&D{At z_~FO*Nbf)DAZ@&2tq$XuX literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/サ.png b/fonts/SmallFont/サ.png new file mode 100644 index 0000000000000000000000000000000000000000..d97e7fb660be20c3c2e5731bcbe29ed4d02d11ab GIT binary patch literal 1168 zcmd^7F{|5F6h4no^zzh)3mQ}+h-fsptp*JmG-yy$y@&Fu@{~paQ8cKa!Gi`B6c9y& zpc+i;L4ylUqksk%G?>b8b@(BL7Z9t`#HhS2HszWj|G?zxw9F5h=9 z_xrxOe`%ba+&Te((~Em&56F3ZoyRxGe)Y%YGk_a#|Ko?}q~uwe?NFv^A|l6e48zbg zO;MDj@PgQ3d8)&LrHY0uXd;KR*~`h~YCPVLM!P)U_WNy;tfOcd1dZ=6TzBp`wPj5W zqtdjosur?5lB8S|2ZE6Ce9Cb#%SH?nbUHnn_9)7wD4U`z00Te=!2K3qtg&ryJ;zmz zO@)gB=R>Tsmy_f$j&?<`9r~MryUOfkYAq78j*LmDj{~jn)!bA1j-1+3Y>9!<^>o43 zcvImtiIqi06gr2)VYl0Dx7)UD*X#9ixonzdu~^Jzv%0P)lSx%oWm%3!qv3Ek7!0y3 zOVc!t<1h?^An<+PbzR4CEXy(sL)UdxRTV{%B&pl&3W5-07#@1Pt>>*AcVXF6!z?v@ zsA!p_M55#iU7O=|mX$ksPb9apN`ThkIQ~oq`@%p2a%fvPU2g!XNHd6vo+6D z99_0Gsm%O5wzI&DJ*{WUt|3~gpvzp6`eEes0?YLc+ffZm)(lb6x`@%fbvASTc_B>` zzHphoPDLURt+8!!KF6ZKBtg$ZO+%hXfCIn_fDOPBU;$7AQ~(9Q03Zd30D1r}0FjL7 zwcBCS;ADb%j!}fRjfz5CL}% literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/シ.png b/fonts/SmallFont/シ.png new file mode 100644 index 0000000000000000000000000000000000000000..8d18ce5a713de62f71f9fb929e5a263341ccb05d GIT binary patch literal 1168 zcmd^7F{|WM6h4nF@^<4RYKn*{BE-j_DYB3vMT($#OZFL=teah-|`fKxnSJCFD6-|%qHy_|FTzH_UxeQ<}A0!MQUWmy&?@;uM7EKSoC zMaillN(?7Z3q1*bKZ??kqFAO|2$2Cy_A@^)k>3U+ud}=E#XHg=WV$L`N4a zmDgoXkyuG&j>qGEzu)b4+wFF}UN4u+#bVL6?QAw{nr1SY)OB4|)o3&t4u^xmAkXtG z%aSCCq9_c*AP79qb6wZAZPPRj!_YKMRaIG*JDrXwiU~&1vDe%A{>t@Q+nJhHr5i(4 z&t)~17?H1>AEK5vN^nKKI6a)k~0z3uS04xDofCiujC;zvN^DXbdst|g@mDc-h?rfE z+4%I*rJmR@Ghu2xe(9O$$Lg#*3CkY6cJKP5g|f^6e$8P z#h`-(i7;w}6jP)KIzoy;1{`FCDFz&5iYW%1Vi%_vVTy+=*c|WMzp;mV?&X}z_npiA zzAqkLnP+$3xC;Phmlx-c$a#93r+3JH^XJts0C(WwhmRkSQs8Kgp)AWnM4snamZfQ$ zq9|DvM2X=9is8W4BvTP}iO1>mdE4HM$A{5qUlhB+V4J4vI9`U~A_(T5H*?+2wkM|9 z==xaGDn%K|av@1WQOpG)EX(0=nCE$x zWl54mQ51$@5Cop*xvp#5wrQG%VQ8ABs;Vr@y*sOB_LYkc8jwaRu!fx`abG93IYNg0iFVE0G0rAfDWJmr~rll89)rs2k-!hWJIt1 z9v2I2TPzBUV{{x;RpKH-Ll&VS9E5$Fs8!08ZfZM^_HHda2__?Qe;E)vKRfd`wiP+1osU z?|*omG~c;AzyJ93yL(^$b^`C6UVr+w8~tu*?|$@F_Uzup{a3#I`ky!d{gv~}ZzjT5 Xf4%1aeEr`ILBZvNtMi}U|K$3Ap=@k# literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/セ.png b/fonts/SmallFont/セ.png new file mode 100644 index 0000000000000000000000000000000000000000..0f71d60aac91fcf11d67d3a596c9a06fd624b454 GIT binary patch literal 1168 zcmd^7F{|WM6h4my^W410fGHwINReW|peX`Ih!EGjCHsuLEStq3DI%npB1MD&(ds&Ih@a**Y(YGdYDZ1dA=JCyCm5}(JBa*zTdj;!f_hQni)o= zX;W1#WO*V;X!<6@SL7$)fT1~lzaluJ=IMOgp_fDV9%9bRv+TjFMc>jsw< zwgoQ6*ksS^{V*DiP=O(9qQ9SD||Kgl%XT1wiH`pVDvp*ur=OP zI89<@kr9R7@p#$=Tmvs$f|%VpcP^ZC4Kn!2v5sw&HJGMS9WyLcj$>JtVHmoutE#FfiX=(>eqRuT7{l;580=7<5JfhZtCr9r8{Sc0KI%-Po^P7xT1qsfRDR#E{Z00Dpn zAWgth$GwROf#Mq0B@`h9RS^97_xT3^C-B*$E1O*Xuj6O+ACY|3%bz~@n5axMw|N3T z{P-$qzHxbR@A2u=H^2Sj9Ns%SdHU~1$FGmSviH6^d*}2?{{0_sefPTc`%iqtH}8Ia X{mPTKm9v)!3NG(oUHtO?Ctv;tn=WcP literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ソ.png b/fonts/SmallFont/ソ.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6998ae3f24d8a5e57713b3eec3ed9e7ec67f1e GIT binary patch literal 1168 zcmd^7F{|WM6h6x<^4$1{k|M4tf`nzj6j4${2y9&Q*6iEJ%VV<;Bt={zOc5aq5mKZG z7-7&UQcN*ugcMT*3G1+=7-Wh8w-{l-K}MKjkSTU`iYcae$by2$`}S{mxaVHZxqRQb z-0%D9;@mvB{^oT6I61p}dY_!fS9yFy_RC+-e*`#!i;o`MA*I04979=_g@`=Qvn)%~ zG(}OeDu@!p2^7PDtx2XL>JpEW$&04B9F6wF;jSpQz1}8GS8==u!+8+QJa6i{t!NYflOtBXn18xOO(NUB~`X5kN*Mn0vrII0jvQQ05gCVpav)b`T!X~4A2Ge0ElEn zuiXykb8H$c3XEfP98^`}B0@tJp&=ZEfS_}L5Wu;byWik?it`fN6h|Hw8fN@u%O|gHcU(y8!z99Ys40@KnxL0L=h2c9V!(DGW0}Z&W<7Ts>sSbO-8)5k_I3H zhyWY_X#!RT?kr3R6qm59po}1_!|<2qC-(rZ!RPnS9dh-*j>p=c68WlE9^L(zs7$k0 zc@4h(?hVp>`|R}ggX3>*{(Sp&c;~gB-oNAkmD6a}n;pu@Wf~uf`3!+s)1q~WR zs=)*oG-xob3W9jh;Ika^P&K{m#kn`jwPi~X_`j7LU0dB+NN0$#sDR4B$P?lvOBG2Rp#`6is#Vi{#Opm60it;GRp(q=`1TX;bu*0i0ZWp+o;i|<& zgYyb!CARsiae5rZ`zqX(!DisCa%Y*@^VDi%a~v6?P_F{5@YTMnWR9HJQfPL4Lv(b( zQh8nG6p58Y=6F2r_xs&$x7}{n>-BQETr3vz`FuK^wrx8ekDI2c>v}jGmSs5@4DvkB zvMfoGD2l=`41&P(JlAz?+cr(pFbqx8R8^H_x!diEqL^S59ecf<@2^~MZaWjxs&%7O z^;}kCNe;xW!wUw-DGV#pG)K*wVp{hn!>lQix*t_pSf;@s_VUn813U4p$TfP7?pvyB zD2^`Ic~B%y9$Ja7_Z-DDC0i2>g-^2}irrpldx7b=nrSP#DXDrFF+ObF&CGaS$&*y5 zJhpF8u>?eG+-`9;!>YnGMc+qVM?pY_UFx|FQxhh}>v!S?u|+HpLqro%M1)3%T7^=EzDUg3HDq2DS(&HFh}Txq0Av6W zfCC^+z}mpQg(-pJ3RX2#5rj<`{`R8t0l+Qz^5WbfSO4qyLHkD{U-iZp4?iR-)9g*& zf^WZjlQiEuJH2;#^3A(XpLF2;lV4uE^U?m-d;Png{q@PSa((&orS$iozrTHT_uuA% Z`Lx4)KKkkVuL%my9-N>4c>m+C{sSG9ZuI~F literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/チ.png b/fonts/SmallFont/チ.png new file mode 100644 index 0000000000000000000000000000000000000000..ea96e0a0308e929b34a14358958bcefa335d8625 GIT binary patch literal 1170 zcmd^7F^l6y6n@LXX>(%nf)13N3Kc3`=s*D#DpV+0?VWa`usTi$BB;=T0xnc2pnw7@ zbessz;R6*eoJ0W?E>xJrg$gIQP;mqo4l%(27b;v_hzl1kwm1lcm)ZLpdCZ&Pz2W=b zFyHs`@wIV!_x@b~IK8^OctXyT+dMfY`^_KMzW^M=<4>PHBqh(%Y=<&U6A?L%V;F{} zX^NsGg%`vQ%TpZ|ELAjQK@&Ng&E8HXH{1)WF1AzAXxZ*_oujZc8cjVNTVoMB+uBQvO z#+wSKNvtd~qR=@U4!hlMyWO^JyI!xC%jIIRXqsj=o7HtanM|sxD$8;-8V!fT!C;VO zS(>JC9EV{T1cC4SuIoCEV_BAA7`m>js;Vf8BuU+FR}h34!|>4SZ9Q-0xQ%5`4YSnr zp`vAy5{Z&8bZw5;Syt{a0!_12Q{}U=KOLo29+&;FNP}VG4N1(xd@wxb%BtQn%BbrGX|>ul!w>q43) zeBm;Eor**tT4USde2ztdNrIk-nua`&00)3K02_cMKm$+%Q~(9Q03Zd30D1r}0FjL7 zwcFuhfs+a5IYtrMHYy5n5uqWA&=3wnK+qXL0ASzF-M6@zzJ87R(Ho>hIo(8^jthM+^`RL;(>h4N3)u67&UP&aN(Tioi%5O-8)4k_sRJ z2mmYqX#$oy?o3Pw6j!h+p$H+Ug5dYRPCo%Sf-j$3+vMth9Y3mni{z```{MF5qB70g z<`I1V!~3N9;OgSzrzhX}&;F#2AKiKM@99VI`SYK-=ieSZfP3fPeE8ynS7*Qeb9U!a b76cf5b@toKukW1`99%uTzWC|<*^B=G1cYcI literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ッ.png b/fonts/SmallFont/ッ.png new file mode 100644 index 0000000000000000000000000000000000000000..7958adf088078014bafb53c3628e9af4d24192d9 GIT binary patch literal 1164 zcmd^7v8&r=5Wgg)dW|q1G^j*_0)m>LL4yVrG>BF&RbEw|LKF}|gC3~Gg9Zgu(4avj zD!9P`Q9PJd1q~iFh}MG!Q#^P`L4!+8@!&y&hm?Bo;NcBfTCU&AztNAo@8i4Ues|pO z_wwO5OXKv|Me87FeShV;OUG#}Yi<~o zrp;8fkmac)<)SzigpB7?j*D3~Vwj-cAJVi(Q7%Q<6lDPz06G93_xNUuU5nc#ZW?SW zTot&SV3WPAlhZ6Z6v2Mt@5b&Xv)8G$O3WrQ>QJ8rTH&j?r;HpqwWZh+17qOng01nU z!f6sKi;O7rPp8x2aM@Q6xzk3K)_S`T_O`j-Q zCMl69`NF{Fc%5bCJ|oaHORcJWQI6)*w94ah6c%YPN&Io-W`UFVR_vLfqYrJ(GZjad zZA~gOKacG!Fk?>}+OlhimMZ8nm!y6eIm5tmeZzKC!;&>aRI~wNbnKknQh!}Y^Mo&4 zW~5V*2!w0wI$SQXC@@LT^H9@}=Mmrp@CIN9um)HGGyoMq0Wbzg0V04QfD1qaf-l598FrhladM`0SEvr z00{z?Ivz|+NGWb$Q$i6!PzAvsfAu~GxCLK7xwJ{@e|>&d{}#!rK6w7<8DW`bZu}Pf z_|u0Z_|e7rCr{6Q@UOnT{r<-~fBTzPy{qqjhZnv34?g?1cmLjR@ZhU2--Bo0)6boM Rgqw}S#ly?$fID#g>BD>EDR4B$P?lvOBG2-t#JN<|sTav@0rQOpG)an)d3 z-BQEY}bb1Ok{pO#hZhWvQy5mHX^vXd#jNU2M_FAYRX-}TaF_;z*vmsV4eZ3XBG>3Sx^Jnj zp*Xr+Z#S##%al6I&9Lo~Z6n!6c9R&dajsVXAHULY21waE(1C#&*fD9l8=mB^Dgfha{ zevfU7lL;0D#xXh$swz_UFxX~GZUu9%RO;}*dP{&A)<*WB0{Z0rNU5#zDUH`HDq2DS(&HFh?i2*0Av6W zfCC^&z{KBM9p-{Qd8#1GSEfQ2w8NIMbR#T6sZt&7FiT5(t$3z=wieoU3Bplvpn86f5XE)_j1nV`_AQl z-{Xs(aeCv88vt;6e&_5iIZv+g-&xCE*z(}teIg{ znl@3@LYBvpl#Aj}5Hg-mIWA_|h+%?Gr%%%!MY$AZQ8@gmv~}nj9z5z6f?Be=~GfnY~P{CNb;Cn1=c!&v}q!R#jD&<#;?EjYh-aFw3$u zP2)HY!!QT}-}hbDbsWdCEW;9Ivyi++hToW~rvi=jC8FPOCgF2Vs#0qr@LZZWcI+Z^fP&I(pyMJX3LW z+18{o^Yhrw0yFlszAd|kXsLoOb4lulk<$+>*EeiOH7r>(L`CZ&Mu)AlS?Es-X_oMX z%M5fX5`k!q+bu2@SQMBf=y|AV$nywr1b7ax0ayYw05w1bPyh@8Qh*4c58wh2$%tP2 zJ+>`Qr`Tm{Z@2|nTHy?g|%UM18<;~yT?|n!A!QA@b*^_7QH5XsDpZ{A> Z>8G!L`_@;|Hv|Rew|i$lfAqz}{{Wz&YUBU_ literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ト.png b/fonts/SmallFont/ト.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6bfb4dfd0bd005532781295b665d27f768b4d4 GIT binary patch literal 1160 zcmd^7F{`9j6h4m)>)Vxwg#nkf5MnV8EG&drSeV4OxG#q1@?4N$VZa9#76uGh2oYj2 z2~$XzVn_^FOkv?BQ&>zf#SpfbVj#0H#S|7(Y{(Qt7{Ug&Jh{7nBbRgT;huBPcP{t) zet33cUOasK5CAT&pI+UPc%S(B`8~4#{ped#xChU^c>aVO1&-zz%Cam(IP zijq}9lo(E+7!GVrG8Ivmc%0AQw(Xng^f;Lu%5py(_F1+~l64fVf?(-+3)k&zduE!A zu1__sQk01-my$FR#X=Bro=-V0VcCdbLYnp|%A+WUqHF*YzyQGG9$#;_s%SqBb|Y_7IP2VAW>%M&ZEQ>$-rF7z{*FOfim6VYv7Gjq5FKXJ%TpZj4pE zkkv$z199N+g28bL!-_P`QOl;B*TdN)Z_2bD##J7TvtX2XMdW6Io%&Yn8lj{6mg*Xc zqsw&>l&MohR_g1aqj;udYoej>SsuiR8%DMln2xKNwxXMost*v8WAE-3#>+~cWkTh# zLxV~rAY5bL<6?nTg;|EakGhV6fB+|e*8n?!HNX;}184v$fDu3rkN|`L9sr??@O3!g zYK3i!Wr<0Gj)SU7R77Bi5g39&07!QM5CJ&v<{o?8EpSy~m*LdIQp22olW@nF*@w)| zr`Im^(uTPSGvoa`afjF;mWUCei6|mMqeHF2ScaiU#5pizUKLrHr^$%-Qqllq01Xayt})5wTJ1yzkm4s{eM3G^QY$4Gp8x zw7#kqvfPuTTogNkknw!VaWTtA3==dOEt>Wy%B3iqqAUOdKnK9>8lNq2HO0jk=QU0% zoD?|jVx7GhB)fjJDS~y^Uv}JiX3tV10`! zrfD3oQ{rdeuI<)gAa?4?y6m+i1fgKpw?A~y@1#J6J43?02?Yo4h% zx@>DwnfZBaXMq`eTFaJQL$p*um$@YM!^mj`mg^g~qZ*d18KR;!5u@$OS&sFmg)~g~ z!e!bz6^TH!#?=bPV=M|x67)ROG~{^%*a18PSOUxdCIB@+1yBHV08)SmpatLp5Xp#M zn+;B9j`aSrnmiV%V-2nzGb-{kn(!@CzY-2V5k`}^Vx(>Q_0*WWoK#TyUK zJ|l0YnSES??|-;Sn$*MdPfw|Tj&5GR_2K33|Ly-(^Zew_y~Cyd$HAlLw||3om)mdO uy7eo3`OVKaZoK*adj}spf!8lTI)Dek@$;|yKYc|YaDIAm^5e&!KY9s&CUZvs literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ナ.png b/fonts/SmallFont/ナ.png new file mode 100644 index 0000000000000000000000000000000000000000..d72c2187353bb65f1e876d3e7e9c373ba247c3c3 GIT binary patch literal 1169 zcmd^7F{|WM6h6-_^4$0wBuJJ`ks|0I5mKZ`ks_{nkL=sX%d%Mr5->uFDI!FO7$ic( zpu_GIDW(|KtfZJC#h`pq&hMT+Am{OQ9^WAQ)gKo>1Kfc7A3QuGCC}1qhcZnQ5jl=y7>1^4 zilQWi7sL+BQyms8RWxKl6FHpCo=+xMbjmxCRJ6HWjPv+hQr}tFvzkj zP187z!!Qhj!1sOEbsfjCEXyzqUDs7rRTM>%q;9t>2ttfuc$uRj?yZR%YIm-!7%X$k(&ih;#;w2hK}B|HP2KW zUA8r;%=|pIv%ri!t!K-wAzG@S%UqKBVdV4z%k>T0Q4LGh3{la#h|zxItmpb=Ax#s$ zaGAbNMIsQbakIhs9E$>z1U(Nm4S5~`4gk*p)&L8D2A~G001AKsKnf56^Z;A{A{o(Z zx5Ku@$prHpqX=yq6@|En(2zxF2nQh`=nNnLu&?LtH@Kc-TVS2w*u`AMl)H-9ec0Ld zI%|(!IMk&DGXtjj%Xi`$u|~`h14IK+K!i$zQh}iaeSw&>t4o|BFcL?T5ihNz0!RP? z01H5xfTfN*6B7c(B`ixQLI|oL`2C-gdjLo9*@Fw4T>Y=(2lZc(eATO;-u;lMOf%Pc z1m8WqMVjLI>79qiPtG3Sc^%$+?dZ3`mwz*}KQHgydgGN(vbVqg>FKZOU*>=INAJwv b{o<`(PQLx>^KafHFgQQEIQ{YckH3Ba9=mK7 literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ニ.png b/fonts/SmallFont/ニ.png new file mode 100644 index 0000000000000000000000000000000000000000..23680ac34b320aef6e07465e811be3cfc3ce6273 GIT binary patch literal 1160 zcmd^7v8&r=5Wgf)y+(a#P>Vt|2&%z@2Biq9fFNqC_o}=qJcTGAiUtKVc+jAL3K~RF zTNO+&MS}^ZRY8LX4W>0zgDDhYKbL<3+=9oCo}QDhz|kB-S(b%}JkPT%OVcz( zQL-wC62l1;!-1_yrXuPRkMsH4>GWzcIgH2qqSy@vU7Bvy{8FaYqd!`B<^THGvf-C$ee zvc$y*oBZuGJx=0%8SX~GcId5hXO-E@)M{dL8X1#NF9WUc)q$&Ij-1$1X!d+VbacT| zd0pldiIqg=cs%a+``vEWb=_vOS*=!W+b);O`F!3q&2&1g>$<9{@pwEMjfTTvp66MX zB}o!RQ5c3n5O|*Fx~^^8rfC|6p=p|`sL}eC^(qI^SdFZBro%mMd8huCiE!8y? zN0+NSC=w?Rt;E;+j^de;t%-)hr&$oiZa=iWz;s;Av=!ZyRK157A3ArtFkY4NEEP(R z9T-$B0pS|E4i^h7OH5PrebjXn1Ozw&yaw0;tN@k(4L}W00t^8%fEb_;-~kZI2w(d> zwk=MlSQHq?=s2jVL`4LK7=a-e1b|fM03m>L-S^Ppc7bh)O^Oo_3k@^=D&`Imv+FZk zpI*7tD;wq}%#3$);uf(%ED%FP6H!EjT8B!7kqiToh_h$NyehIXPm>n!q@)4J03rYf zK!SjkfqM&6Qi^L>S5QU})?xVfo71lVZooHBE*+BkU!UK!e*M0+j z`SlJ7etdEE`O}l1gJ(b9eDBL|@4+XZ!uJpUIC=EbgAeb0_Yyw(>l~hc_QCf4%{OHK P02k+%XTN{(?1%pV)Es0b literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ヌ.png b/fonts/SmallFont/ヌ.png new file mode 100644 index 0000000000000000000000000000000000000000..8cd8326f7b3d7501e227b60a75d8b75f358958bc GIT binary patch literal 1166 zcmd^9F{|5F6h4m(dX0FvRD()22&%yawP?_wL4#=Y9?FZtQ;0%E5k&zF8Z@Xy1q~Vm zRjCOc6zah=Drhi4rK0s9iYbN)lED;1O!45sgNKxw;=#ikGM?U-ztPJ*_j1qS`_AQl zANR?FE930;2e$#>?DFpUL$aUV#OW=vUjKFVJHRb?aR1Q-Ir1#c_9)Xd5s~9KhGA%$ zrYK5MctPy3Jk?{tQbj`+G?ByE>`l{LPbP=)cwZE|!C;%F>o{J9;llSj*PS~~Ygtpn zs5Nb(s--NCC8-d_p&;ZupK)BmvN6MiysSzT(jvC%~OB-Bb@Ej(r5$eArAmKYj+PZw;B zHx*8kSXpF5p?5qU_xt^Bx7%*F>-BoMTrL)iuIpyAS=+Wv)6{icRn>Sr9*suB;V{qh zEX$H4iJ~YBL*MsZ*L57nvMj?ebX`|fRZ$d4lKTC=AP5OY(J=^ip0{$`&a$V5S!w!6 z(Q-+NMadWXHplBMEB6?Irdg`1i&-_8jRX9tMvflXnrAAG zF58+^<$jUad1xk{7TB_Dh?XkoGM8q46gxp^xxQgLs$t2RAu3uQF+Oaa&0K$3O4F1t zU1p$Du?R$K+-`9`$FjsUMbAS`L!L)~Bfx8b4Zsqh184zifD&K`kO9O10e}lYBqMt5 z_qbSK(_m3x9HVWcq7WAm8ZrqD;UEMAodbjb_D$cz7B_QTl-Q;?aj{S__MW&wY!M5@5Ya#s5TVwfQeY&(Kp^Jq>k_93jKtBT#ak<>01|)z zzygpYV5Q^U#FRjB1*;0m2*NrHU;TY{58wp8et2b*(*Jt=qW&Y2r+VkhyPp%4Y33$Q z;MtGwljKL2=bt`0{o#}0pJ(J7dGYwe&ysWd`Sd&el@P$mw?Ex^_lvJyeE;+D#*el%RP__8EOyHY-6=L`X43ga{FWqzIT| zTt-MS#jr+*Fh!722T3t3Qv}^&ia`e%VTu$}?CKx`PVtJ@2*>;OZ+N)pUe39E-?`lH zdvN!{JiYbmEdV$@zjJnvoF~_La+BIMX?(Ux-{Ly@hS|LLC|{M!gU+lo|$H? z>k~~Y6=f{Tg(M9{F&Bi4=M#>LSvF*tK27@+$<9{@pwEMjfTTvp66MX zB}o!RQ5c3n5O|*Fx~^^8rfC|6p=p|`sLRHIQJICKG#JKS9=d5@C%zTAM&HqWOLYy! z(d8-+ip0r7EAjQdqj;udYoej>X%=gn*!PfDpjBo_pwUyTE0MO^Oo_3k@^=GUg5uv+FZk zpI*7tV;kls%#3I6#4TcjSRjUoCZdQ4wGNdEBN+xFF=x+^c~xX(o+cxnSxEzs0Ym@} zfHVOs1NRoD1d3}|S5QU})?xVD)6@3=Zop^vE*x_8zm6ZYza;WiFMN9EBcd|RUgr(? z`kPlsQ#wC;=l;pVw;%lcGQ4q;|8n;IKVN>>N!8QWzJ2cR?;id1{PwHY|NZ0F5B}7+ a7vDU-^!dY2-nt?%IKO>y_T#%BfAJrXpl>z+ literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ノ.png b/fonts/SmallFont/ノ.png new file mode 100644 index 0000000000000000000000000000000000000000..028026e59585c0c78708fb5099c4cc8911ea3b3b GIT binary patch literal 1165 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 Y{@v|=4=>;SieTX4?&bLpcOE_Y54|pGzW@LL literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ヘ.png b/fonts/SmallFont/ヘ.png new file mode 100644 index 0000000000000000000000000000000000000000..90a880e6d9734d0369d030332c96dbcab4633b22 GIT binary patch literal 1170 zcmd^7F{|WM6h4nF@_g|TBt_JKfekufgcK=Kq==fgjJc3^?MrOff}@DV{jU6jMBLyFK2wf5XE)_j1nV`_AQl z-^2Tt=IP0+CjfAIaej71&g0uWzC-q#Czn3~+=2V=Ke$IqfulKwvMdV`d7fukmZoWn zqGVMNC596yh67uZOhwcs9;ef%y(4MX~Mm+B99q@iGh-K`{5cnd>&TJu%H% z*GHOGD#}on3rXsWVlD_7&nFxgvuwyPU7GeO%A+WUqHF*YzyQGg7O&UXE^s}=RfCHf z=OxYt*yK;g>0uP_%5XafHhpiEJIlhr?mF+ikbowr$tz^>VpfEEe$U?;v6xklH~eM@x> z#nI&|4~oReLo4z1uA_LSWNV_K@M#uAvD*!8FEAZfGi^mTB~|Yr#{1UY%#6pSJV}Mp zV|xY_OF*>7w#C^D%M#NReIIol1pxsL0M`H;fF-~jpaG}>N`O8<1`q>u0XzUA8PRLE z!^Hx}V=M}cV{{x;RpKH-Ll&VS9E5A~9#jka<;PWu7J@o?A%+kO4#h z4uCWPD+6~HrUZ&BSXEF)5Y}P%`=6)p0UW_+SC7d*{LN*RTKf%PGK%M{mFJ5fO+=j7vF#U>7&=4 c{J~J)J*2Hyp8fg{!NJA7%d;Qe{pj=m0EfD4`2YX_ literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ホ.png b/fonts/SmallFont/ホ.png new file mode 100644 index 0000000000000000000000000000000000000000..15de393b079ab95be1e979f7619279190af8468a GIT binary patch literal 1163 zcmd^7F{|5F6h3L7dWrhbpn^g*C{z>=8Z>Copg~Rbg7T_|6`lg3Xiz{8JZMls1q~Vm z6~q(|8a%kI0xEdWAX*O^Oz_|#g9?V4;(`Yc9#ZPTgNHX{DyR45Z}f1_y_|FTzH_X? zC|MOmiQxo_;lS1;QxSEE$NBty)7(y{$I0YS6#Lj@hZT`MVPt*8NhWl}_9eL~AS!MPzwc6NhB4ZlrWuO(lI&_uHkrP`A&7NCrD4EDaicD<$T%uK7&jj^id zvKmWrAod(yFgQ+OSdpeVYFQWaYB-x@b&*uVsLaA~8jNBu58X7d6W@wlW8mn%rMiaV z=yH_@MdIY4mH7I=Q9M(!HPKM`Gz+5G9fY*i_j1bLO{?tKnUR6%{}gLyTGo*HpQujg@ze_8*|5q*$WJtfT?R03rYf zK$?J+fd>my0>w3~D<~rf>oEM|@AIz#?!kB0eTQ8Auj5zkABlX`gKwXGLsX{OySxWK zzkWoTUtC^1d2#kr@bc!b?RIc;a|74>mscPEd;a*B;`5JQ{r<_1pI&Lu@0e5JG_MH& OE}!-_x}Ns=xF!= literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/マ.png b/fonts/SmallFont/マ.png new file mode 100644 index 0000000000000000000000000000000000000000..22a868004c663e9499e1df7ad10b76dd712f3130 GIT binary patch literal 1167 zcmd^9F{|WM6h6xqd2W29h!8PIiXel8B}Ix9DWc}B*=OYCxmk!3BtnWQQbfr@iWC7; z4C@prrWn?UL8eF%bcz&%OfjsBWO2k{8DxqnrdV;1DMoz7R&u;=|Av=)?&Y4t_npiA zKJLTI3-k2W8@B-9^!)DGJ+hx%$H`5yUOl_`5#T0Vet7>5ISL%jF_dLlh{*Fi%d#|0 zQxqkuf+#VZKrtNHnq(@XF7Y^cB|?~7tL7;MvY9mmTs?1Et7d2`ooZF_2( zwXRPztyGk;EEkeA6vbQ+GM-O3E@s(~Vfr-fQ=~99J!N zH7-h=kFd>OH0f~?@5^vE3N}M;l{?GKUZhqVn@wa)LcI*M!dC~bk~wl>OQG5G4bjmB zOXYQ$QzTXrnd9-e-|u(3-FCZOuh+}vvg^9VVlkV|+O}<)rmpL%s>b8-XfzrQhk2f7 zS(YS86h&be20`F?p6j}{ZJVZP7>1^4s;bJe-0Ss3QA{w3j{W}5_gAjBu$`%CRk|@! z^;}kCNe;xG!wUw-DGV#pG)FD!Vpa{NmZTO135%3ZG^{6ubS<_5#y!HPcpfQ&ROFVtm-To4N6%l&7gs zdhEcUVhM=WxZUD>j%A5yioTD!j)H&yM}X%58-OLi0-yz`0ZM=&Kn4&4^Z`5oA{o(Z zzsIh_rop1XI7Y`oRV6MWG-MJQ!a)cKItK^=oa?@aEpF!6mDr{@@vzV^i}&1YsS9zx{Fg0l*D-aPPt)rT_K#Ui(ubPxZ>@cRwL2)9iKJ zfUm!Koh08rKYRE7$)nr9JU%7g$WQM)diwjDAAR-DUq65RZ}aW1Phb7?@#Poaz5m+Z ZZ{2>#GW@d#olih;e&^!shxb1F@;|KRZKD7H literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ミ.png b/fonts/SmallFont/ミ.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd1cbff100d976404d686e641b2a3c3f616896f GIT binary patch literal 1159 zcmd^7F{|WM6h4m!o9BihMT&?KqNbQ4MT!(bQp7cHC;N=NESrTODIx@%B4C6FDN+PX zF~}4trWiCriYZbA9VNveQ;e|16a$Vj#S|$~h;huBPcP{t) zzJ7XZ_8z|V5CD2NPp+Slcy;ermt?>D{q|>oOL+S6^T*^Ua5TqImSrI#&+{zH(lkv` zl&lJ(#Bc(|aA0easffD7<6`luY3^pT({y?)ioPQKqt7NYYpob3w>>KH<2SWkZG;(zH)e9z{76WdoQ11^}K8_;QEc8h1CrH4iCP+b-k7C%uTD(jftw~ zvKmWrAod+zFgQ+OSdpeVYE>7DYBZl_b&*t~sLaAi8jNEv58X7d6W@wlW9aCoENFuii%h7x3k?TZfeX*Xw)jZ;5=>8(%#6gs@Dr_kIE2 ze)lFxzI${1==s$*!Ee;%VDRAI-Usm6AKb-Hzr6R(`ws?#!H;i)DKek`+0*_Zm*M8| L?ez~Ie)`paivwhK literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ム.png b/fonts/SmallFont/ム.png new file mode 100644 index 0000000000000000000000000000000000000000..d0db32190ad08dee02a00312951fbb6f08fdcb41 GIT binary patch literal 1169 zcmd^9F{|WM6h4my^W5+Vm?C0|6cMI~k|ITl6k*L<@}7~Gb+Zs9NW>Haric(BEGZ(U z7#<@8nPSi=DF#dt+(Cj2%M>ZLm}0;|rkG;DQC1ve7N&T`mdE?{Z+N-qUhX-3-?`lH z<6b|wGSBY5br%56E-%g>lKu2HPVbQQ=J%_o0C(WQ2aoQPqrlM|Ls^!Eh&<1;EKAcg zMNzUUh!VpI6vKh7Nv0y|5|6Xl%ci-ROb+Amz9@Es!8T3Tal8z}MG$nJH+S9Ewx_09 z>-t2~N<|sVav@1WQOpG)bkC~YCIl~Mx)_ynCE$x zWl54mQ51$@5Cop*xvp#5wrQG%VQ8ABs;Vr@y*sOB_LYkc8l{lmL;Ys`abG93IYNg0iFYF0G0q9KnqXD-1a?eaWlt7iEWA#4+{-5{wC%Q5wq(v z8=qdf)H54qCQOZ2_rwiii&!9rh$f##G?%i+hy+OW_lgHmq)6YKq$c;1Qj|^VS)-JD4;?t zI-Pbm6*!t>D9f@Ck>`1qWoeqG zC`wiZQDQiOVmPoh$y7vL;&D2CJ09PRM*HD#R}|Y`uT9f+952Ig5d?G3o4Iad+Y{5Q zb$z61rJ@XFxsas3DCUBY@qEH@G0TPw)1_&jqCARnD9Q#f0So}#Z}IgS+Xb#?xN2}w zbb1Ok{pN~hZhWvQy5mHX^xuL#kA^8hFM)CRWB;DaF7Q5*vmsV4eZ3XBG>3Tx^Jnj zp*Xr+*tR&EVOe6DqVJ=wqaYx_0pK;j24D#=2WS9lfD)h&kO9O1T>uY&P)7LL z?QpTc@feE&;}{(WRh6iSzz`!a1cLyO>Kq^haBlnVTincWQDT$g$iqUzjK7JweZ*|L z%*LmeF7?WWsRw5uw(hQehxNPbA{(7&5PltjyD-#XBi!05X6G zzyXjTU}fOW!jzQa3RV@A5rlOZ{`uzg3xFf|?$MP)Qvd7otM;!%R(0o_i?0aFG<)ku z@ZzVBNKm>w`~30AkHM4o-@CrPe(=F(!SS=BH}^m0@BMLp@995Jzy9Im;(_q#&&=O< Z;Fp&lZeG6lmMkCO^8D)TxBE}N{|~XCX)yo* literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/モ.png b/fonts/SmallFont/モ.png new file mode 100644 index 0000000000000000000000000000000000000000..934ee0bc2b00e6f2feace790b4d4ff2ca22eb51f GIT binary patch literal 1157 zcmd^9F{|WM6h6xX^W5+lFhyhoMhG%RiXbUcqzG=_n)i&nESrTW0VAfEB1MD~h;ofu4cP{t) zxL-fMF)r>uxDNmq*H@QMNIbvu^D{Ev{(18gz!^OL@aZG6P^M`jBFAwI!_YKM zQIw?cf;eD#YQTb}iiRv`B8SW6%euau&yTa&AQJ8tTH&j?r;HsrwWZh+17qmvg01nU z!f6sKi;O4?PN&o1aMyLcj$>JtVHmoutE#FfiX=(H;ZP8S7{l;18tpxA8@8hwmaG|~q74zFWAE%%`tw3sBz)mA zW1WgbAY5bL<7$OPfk}d%hnj{wj{qlt7XUkeH9!l{08{`4zyu%#hyX?aE&!p7@O3y~ z*I`{_o?{fDZKI+P6%iO>1cqP`08*U+1OWD3-(!!v6?O$S3C>;2RZO|th&_gb{b;cB z=(R&Vw_s_&LVtBn+#xoIIbwilAPR_3X;3OKm0&CoaSnBfQv^ohXwu@9lvDr-KmcF? z$R=Q^{VqAH4C=CvWjQISSX0 MZZ3a#`01Db0RnqvI{*Lx literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ャ.png b/fonts/SmallFont/ャ.png new file mode 100644 index 0000000000000000000000000000000000000000..07df11d2934f92d47ca7cfb00f8915182684146b GIT binary patch literal 1168 zcmd^9F^l6y6n>j4v^im1s8BdTRH!gS1QiOXP$3fSq1z}}%jrM~Dil!RfJhWjf(jMl zR)slSDB!{*3W%H!RG6GORG46hVYhH$5))jwP~qajxiG|mEiRDaW%m9?hIup0dwky; z=KGi@7hR)u_ugFqXq`Vedr0=v+c>>L)|)@NzX05Ui%%ZiCr6&8**0aGCL(ei$1n^{ z(-cKX3NMIlmZ#b*SgL5qf+lh}o4uY)ZpP!oXtdAsUBBNX$tH?cL9q1wh3n28r?#xA zVN{wnR@Fk5N0O9_;y@5Go=-V0X4!~gf_A${(;h{+6lGJC1z-T^0C?Ep%MCV5+{|%Z zi*bV*dz+GqdDzz4gSx3es)W?BV_-gJceMe4hDYnGG=y&`OcHD(!PYtuw z^r50GXhPs)S}8~Wq&$Kt2{3IVUY&I#2-X%7C4D-#hw{Dde7E8 zQ*m_J)}%7?^VrS;GxoHeExU$jse&$ZN$Q7@(+e!uH*7~WELk%|Me86&hsN2?_3J{K zCVb&CeVvL#AX;P7;Czlnfk}d%hnj{wj{rx2mjGLU6~F?Z2B-iEfB`@X5CQZ6TmT{& z(QCiQ<-yghak#FSc@29{1_2lyL;}3rN;$G|G)2qvG-}>s^e}3ye b8zt&@ujuQ4zq~pjC^*00J$wGq=a>Hh_y29p literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ヤ.png b/fonts/SmallFont/ヤ.png new file mode 100644 index 0000000000000000000000000000000000000000..e59a42e9d0a99e6beddece64a8172e20e1998788 GIT binary patch literal 1168 zcmd^7F{|WM6h7-i@^<4hMT#t@h!AAZ6e&^!447T>*6cI#vTRm@q=*o4gcK1XrbrPm z#h_E97-Y~00jEeYtW%^IWQriGL>O?8DF&Qkid~#yia{Q@GWzcIgH2qqSy@v+caIr@iGj%AZR^r;ku1&&rGw{ z^@*mHiZYhvLXw7}my{8FaYqd!>4Q9cDP>Ps==cCYpM^0=hG<&`wI=Wz~ zye@N!#7ZJ_JRbM^{cgA0Znx|8dbwP7UDvkld_HfQW;&hLbzN1}csw4BM#JGS&+{zH zk|c?uC=A0O2t3boUDvj4(=-jk&@@d|RausMy`CtF2}aSe-{1NE%Jo{?nVD9l8zWWE zWi^)MKKn&0a@BoNpM6dlG zyAG#QEDDTcbR1Mw;vzyr7NH>=gn*!PfDpjBo_pBhW`SLaO^Oo_3k@^=D&`Imv+FY( zpI*Au6C36x%#0WB#0_GDSRjUoCZdQ4wGNdEBN+xFF=x+^c~xX(o+cw+SV;qr0Ym@} zfHVOs1NRoD1d1zIRZvC{)?xU^v$OXBZon50FCB9AzmCV+-xB$%o1fqRh^S1n*LefJ z|KT=izIAba_tEKhAO8N!O}O*QOLrfC=FNZA{`vOxx6eQAonE~2*C*9`UsBA!FaLJ( YP5;$rZ~iE~K~QjU@ACYocR&8>KZl8F$N&HU literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ュ.png b/fonts/SmallFont/ュ.png new file mode 100644 index 0000000000000000000000000000000000000000..5805db608a471fdc24e483e77c0ff7cd65bca7b6 GIT binary patch literal 1166 zcmd^7F^l6y6n>jKPMcE}7lJ56g$fluP(T4eRHzWS*+sWeSRJPW5me|vg$ofBP(XzU zg6O~`4ybTp5(QMa5W!p=P+@`#A8g@(AttzRK!phx;(!YmTU_}vdw(O3c{98>eBT@9 z`@VU6WuD!C|2_bmT|PR0LeJCNJiSBrn?J681-Ju`KYe;ZOOa>!4r5ssA_{`QaU9FC z48tgzD9IgOWI8<9x@@YFAqzO0y`D^N#^b|iv@eQXzu%_mCXQEOxD0}Y=gnQWvF)j8 z)`l_G^-@(wic-k(K$3D%%mg9f`IzIvPN&DRKErqn<1ma3U;+>TJnZn*2HPcW=D2Qf zS>vL_`4F4@^&~xx<9!+KhQW5=t#fCU*^AU_VsjFaacGo*UiezyRWnCPY&kT$K9L+l zv^2p`cva?PsdGFY_xt^Bw`<#Wv)QaxtL1XJSS)6kE@oAKI?C!Isrpfwg~K!$#9kh{X<#S56}hD67`~;s zM0E_M%7Y?t^3Y0rqvxoeDcib4R3XiRD0X|H?FFXe>ZYw4rmPuV#Q4y<+c~)|m1!!L z9@i&KECbaV+ZN|@EK5vN^nEl86h#C$0=xp)0;~WQ01ZG5Py!49GJqJM2jBrv$*5lY zJua6xnP5?19HZl)rcoDB8oDSA<)8!om$|lKX2O)bc_(fW8^i)JL^Kg4M5qm@G#Dz-m#8_rL=iNJQv{Zdcw;3UKmm{d zcmUc2tO)KcOeqxCu&$ttAgsgi_rK3R0XTs#pIkZg>VF+C^nYafRd0Xs=rgJ^%iZP) z{P5#@wE5uj{Ntym-v`g0zjf~}5%0eI?o9aTUvlyCov%J5;%|Tca`FN5?#WO0;K7)^ V{_Dl(-%<=*UR<63{P5Y={{dg8XOI8@ literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ユ.png b/fonts/SmallFont/ユ.png new file mode 100644 index 0000000000000000000000000000000000000000..62d13dce01e1370d700a5ffab0fe05c88b116ee0 GIT binary patch literal 1168 zcmd^7F{|WM6h4oK=DFdSB1Oa$5h4tjB1Mo0DWc}>W}lIlb@L!diYx@2B1MD>Kog&2`Qw*|576u$;iYW%2ViyOTVv1L6CCB^rZ|vcodpYOwedlt& z@2dw_=J}mB?*PF0<^79?1&-zz%Cam(IP zijq}9lo(E+7!GVrG8Ivmc%03iH_gptau|>IMX?(UwrRSK<7F6jL9p<=x$CyJJvGf* z*C(1*D#}=v3rQM^VlD_7&nFxgvuwyPeVXY(Qmc*4CNd_WUItp>s{>cb967P2(Cqn!=;(r_ z^193^5-W+!@p#*aFUb=_jIn9XKw+cr&8*L77@Rb^T3^?ITxCKyG>et+ltE7x1t&eXIj-59BQ zE~~L52V&3R1%u-hh81a=qZV~Bs|M3?Ru@S%h{`M+rNJ=v^3Y8KJMpc^HTsV3TdHd) zjxJYuP$W(sT8Xds9mO*xTN4e1PqQG3-F|3$f$6xKX)C%Zsd^7FK5X61+<08d(^M!u zc3@Dk1Vn4xZgD=xvcxn+-$z|XK|p{bz*B$?z!G2q&;rx|CBP6M1Be0o03HC5jOexB zW7lERU{PQkqvN2e5*HB~vIq^~AOr-R1B3w1?cBo_H*@StY*UH!*jJm|dUQ z`1I1H9@{W8VQRd1CvFg1!~!uyG!aEasCB4R7|AdYi8*_Q%&Q_R^E4Up!b%!|3?Kq< z0Hg_68MwDFB~V8 literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ョ.png b/fonts/SmallFont/ョ.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f363813df785d7360aa63534c116773ddfeb0b GIT binary patch literal 1159 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 Q5&&F1ydM7i$rs=J2ZNPpQ2+n{ literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ル.png b/fonts/SmallFont/ル.png new file mode 100644 index 0000000000000000000000000000000000000000..14c98f41c0927859313a57d0a90f0601ee49020f GIT binary patch literal 1168 zcmd^7F{|5F6h4nP=;eurS~RFsg9Z%_(V#(t1`TSemnyF+Paz73qCo{wJP4|S3K}#B zs=*1SXfV_?DroSaf|`2JV1fq|0yV*qcWIuTes~H1XBT(R@00W7I!}(te)Y%YQ-EW*_t}Fxq!c)sV<^kA5RvD3mSt(0 zrYK5Q1yN!+fnqqYHOW*&UE*;vdDApkqtSji+!e*P*W0A&DvlRnI1hrE=S^L=we7KK z*1A5@v{F%qvRp_~Uleme$ap^CxR_-_hUwC@Pf;F4ITU3Bm;eRXgOO_Lr*@vaQFgJ9kFmbtUY>{)8HvDrk%DAdb9D}1%*Dw!iEwiKEj-w+*L zuvA``IYnY6kvSX=yWMWP-EKCU)oQg^Eavn1Y&M%rCT-g`O;gu(RaL{`a4;D3`~5u6 zvn)%JB#NRi41*x>JkNDq+qO;9Gz>%2G*wk)S?+W?q9`U9MTc&8>-$UBo7v9Tv?|>g zsCq7|u_Om#$KeHo;}nJ!X_}*Ebup=W<6%}8N!5$WEF7dkKlbv_O#?get;jXHj_zBk zYbcH`S9wq*P99o`uXi2AGbLLS4TVp$Ad1~?XnTR_xSDAzx+$r82Ql7n-1XFWUdrQC zC_T1kP_YC=Yus#bI>oZYG)3P>T}MGcfCIowfHlAZUg27!;HU*xqZZJ zyUg0B7cTYOhKUJdlo5n=82${&5m1*`m zkKpl-ACTs)i}TwLPJZ~Z|LlGE=)Gq@-Fzaw{`v6wM*iE2?=RjSKfHbV-HXTje}4V* a?a{4&nXmr(B!5LvaB=7I{Fjfv`1U_o;&9vm literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/レ.png b/fonts/SmallFont/レ.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b7d06a2e4a470d4e0921f37b75837c67286b3d GIT binary patch literal 1165 zcmd^7F{|WM6h4oY&2zJl6e+T9iijyjNRc8%kQ8yvTk@Wfmu2%HNQww4Qly9wAw`NT zrWj?42vZCiA-hZwB8pKL$sIYhrO530hUn;m zrSiJWDH1D*%<*{K@AtdiZoA#C*X!kSxmYab^Z9f-?YgdQ+ooyix*m;2!{Kl+7!*a3 z=Xsi@aU4fc6a<0id9Lf)wr!fGVHldGsj4c=a&A_37Fw_BXeu&OZ2(DzZ-Q4kQ|2=EGE1F!^`19SilKm{-W$N>_75WoWyTMi9%GkP+=}ERG8qxfh|-R;sgg=xKME+hPZIC#g&t{_c!vGdBdA|^UdRZ z-}g_h%=7zi-v@y6%SRVaNj$srvwLK}{qyQqfP3)d@w12IC~!2#P?lvOBG2Sdr6zB+J~%#jmY3eBExh>k8; zDzD3&BC(Rl9FNESe&2Q7ZnxWPHmlXDZQJE?IiJs)rkPHsbzN6gH6D*gqtS3U%=0|U zvLs2OCh5RaKVdUau#LVuDe0?Dsq0U%TGYc4nqk>BdOa zb6JfgIS_jeFBlxBFsw+^9JQ>Ac{P}gv${yCK~!epC=G_Omxpc|*okjNuF-dN-%?#e zadf%LgCcSA&`Ny0? zk8O+7DHa9BF***aDp3)EAx2;b1_2=5IY0>D+|51gaJ#^^#3sdwhlPe2e;ad$i0S&w z)~8o4bz{TagqiXBow!A85DUZ*(L@vxq1K^NVI;#qB;xEDGOvoP%+qAVYbj{}GJpuc z0gxnMW#Hbzl(ga+))kZygmoDH{`dLE04MO}(<_IR{@3e;_K!rq>dh}6eM(rS**iah zAAfp_B;UEb`0&};55e`fZ=8Pp?)4uXoIW`Hj`{q(_y3(d|Lw02PT-RpmJ&bv`73f6 OE+1Z9{PNNDH~#^zYGt?p literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ワ.png b/fonts/SmallFont/ワ.png new file mode 100644 index 0000000000000000000000000000000000000000..15ae7eb2226f3829884564ba4f1bc8810250f077 GIT binary patch literal 1167 zcmd^7F{|5F6h4m(dX4%JL4!&)2&#e!qG%9QgIYwR7nD~ePiYiTiv|@mc+jAN0va@k zMuT~H(BQ%3DWJgx4Qk>+1yekjkiir~P2$0Wp&nA|!Gni4q}%Cz`5Qglb1&yyzVBS_ z_gy?ZH&1SUdJ_On&hDK)BIogS9^WAQ)tmF*0dBy<`;YIEQs8Kgp)AWnM4snamZfQ$ zq9|DvM2X=9is8W4BvTP}iO0$0ebZcxM*HD#R}|Y`Z-tF3N<|sUav@25QOpG)bb1Ok{pN~hZhWvQy5mHX^xuJ#iZ(uhgn@DRWB;DaF7Q5*vmsV4eZ3XBG>3Tx^Jnj zp*Xr+&^bT|;9Sq$Z*V=ud5LX`BM%D=GyW>(_7St~ zGHah+xYTPKCMJxH5AVb^VvATHhKMGjhzPX~l?nqHdLl7r$B=ndWM!TvBR*J31CRkk z01kjO0V@M{7N!J>OITJ=MiACv_~+jz-vS)LlSk(cx%ywn3+*3?eAP!k-TQ&4OtaT{ z1eec0Am~r4p5HrrNaD$rpIj&V<)0V70$hg&Up%@?jsiz>3}smsBJw=XvMf#0 z6h+CZAW94;Pz(pQCYg$;OFYi!Z>H1B$>cB|?~7tL7<6g6iQ`omwn4D;yoKvFwmmb= zTGuCuxoL%z;%Od zjmr`jBW&_F)ATrr_hq;n1>2#w&Ye|eFH@_D&1qyzLcI*M!dC~bk~wl>OQG5G4bjmB zOXYQ$QzTXrnd9-e-|u(3UDtJ+&1SV)wQajxF6Z-k(=^lRw65!_s>b8-XfzrQhk2f7 zS(YS86h&be20`F?p6j}{ZJVZP7>1^4s;bJe-0Ss3QA{w3j{W}5_t&nsw4Ir0Rk|@! z^;}kCNe;xG!wUw-DGV#pG)FD#VqOhqmZTO135%3ZG^{6ubS<_5#y!HPcpfQ&ROFVtnY_?ZS9j%Cl4` zJ$7JFu>^!`>^fX5uq-i6(f3i;Q4kQ|2=E$U3$OxM0yF?MKnXAe$N*x1K7a>6C?kCB z_t>^Lonld79HZl)suC3u7-9s5U=RS(odbjb&ehyQhua0VB{nHeJS;TK_{*3(M9i+w zY<+s=QZH?on=mupz7w~I4Pt>9BASRIBGfumDvV?ph(w${L*`YHm3f+scq=6hKn4&2 zH~^9atPI>+n37gp!@7bpg0K$5-~T?n4{!~>d3fQF(*Jt>toCO+2Z@u~pe*EChC(qu47f;`P_2ow& ReoU^z`Q3}NUp{;M-G7o9W|sf} literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ン.png b/fonts/SmallFont/ン.png new file mode 100644 index 0000000000000000000000000000000000000000..161a9680454ef6c016ea7e0aa31ee08e77d41587 GIT binary patch literal 1170 zcmd^7F{|5F6h7t+dX4hXph0aks33|5rBOkHC>lhomnyFcPvI#bf(8{dc+jAN3K}#B zB7!L%G`L_=6*PEIL8KlunBu{d6kO_3Qw;TBiVG<<)PsjNWb5gD`5Qglb1&yyzVBS_ z_kH>3(mcC$=N15*T|79yBIoH%o}Q5X`nSvP0Z!o2!^ihYDR4B$P?lvOBG2)m zS(YS86h&be20`F?p6j}{ZJVZP7>1^4s;bJe-0gNnQA{w3j=kQ__gAhrx1EV;Rk|@$ z^;}kCNe;xW!wUw-DGV#pG)K+rVp{blqpU8HsvnhEI81{UNRO135%3ZG^{6uZ69_5#y!HPcpfQ&ROVVtm-To0;*llqacB zdTigIVhM=WxZUDxhGmIqioTD!j)H&yM}SuV8-OLi9H0fL0ZM=YKn4&4^Z+~nA{o(Z zzsJP_n+A&l;}{(WRh77i(2zxF2nQh`=o}yfaBk)vwz!$$qQo}Ev4@3*8Gjvfhlttr zn2k>_UFxL`Qxhh}n|I;{u|+HpLqro%M1)$0N`;{eeUX^6YskDRvNBJT5pS%d0muL% z00%&tfR%xJ3sVBc6|5>KBM9p-{PnN1PXRjc#nq)luKw5YLi<}HU-j1K51tT}Y4#>N z@bx!uljhxv^N${%K7W7kLkB*%-Fg1gKcC#as;qmR_a46M{qppkC*S@q{H#4o?|r!b a_vFW~ZvXk>S?~wJ!NvW{^Y1?X?CF1P=4_k* literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/・.png b/fonts/SmallFont/・.png new file mode 100644 index 0000000000000000000000000000000000000000..385e91aaf1e8cac8477b7e20536a20e6ee2acce2 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKpuOE zr>`sf18xx!9kcoKw*nP2Bzn3yhIkxLPLN<-oFEdwYVdesaq5Yrfb@!kA12x?ek)OC zcqe7YnG1&xbofgO`$-D2X|lPog|R8Km3`vbaiU<#L+iupZHsyAKS(y5uTUO_QmvAUQh^kMk%6I^uA!l>kwJ)& zft9I=m8qGofvJ^&fo;gSA`}g|`6-!cm1r7FfEr978l)t4r~@@Hc)I$ztaD0e0sv$; BVk`gv literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/ー.png b/fonts/SmallFont/ー.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d11d6af30a2d4820abab9e7341529a5c4c3e8c GIT binary patch literal 1154 zcmd^7F{`9j6h1E-;>(kVg#?$FU|}(Zg(MaRgh2xxgjK||V&$BE` zk|c_vFbsnr@I23TUE8)z(=-f2(==68Wmz5!2BIh?7)7VyaPRvY*IU`n+_Wm)n5cR# ztFa^p;=thrgX0v26=|BIR&}wcM)PS_7fCgW$}F6u!8rEv&`kq7@vX=;hK}xAs%t2Y zE?0R_Bu*Y$iLVbG#WN*a6Agt=vmlDyVQ71S>A0F{E4nGE`T#LL_U>+Jye{Q=DwG~O zGN@Pr!Zr3iE|*xAn5O9asOu;Q2yg;;1F!>F1FQgAfEu6#7z1PgF~AVO10a+Uz77ZM zI&2y&3XEfP98^`JA_7BG`k0v!CAk;0r^zxc{&E{Kc0K-giFx|x*l literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/世.png b/fonts/SmallFont/世.png new file mode 100644 index 0000000000000000000000000000000000000000..9f005796d52a90e03ffcf29c4cde7259eec15b1b GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW>w)OJskglLLHtijv*e$--ev#I-tN~y!8M7(|279 zR?O{`V@qb`pQcuOBjQy4PFLG<|DHs%hE36rHisTKH77&mbAq43H3q2`Db}^Ej1$f- z2xVF;n!ITZ=c#TMKfSMRtWOMlPnh48Ts~d5Qr9|GrMl(OAJGM?14GoeE$x}7;1Qvo o)ynWnV7rObukBSo)awrDm1M}6oPOf52k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW>o{W*Ofg$p%zaU#}JR>PeUB}4k&OeZu?)qbN8DB zu|}<%sgFBy6$1=^*Ibyv?B=M?tR(xJY0v$c$?lHlt9e*g@QZNDI+ZCpI964C6*!Ra zq<>HLh8^iA)DC&a9iKRL<2=USvQI>(bC+#o_`W?r!ecl4Tiq#NMH?Tk4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW;Gql<7Ge*h9#aZjv*e$kA`>(9ai9(Eb;Gu>ep+W z0qZlP<{KUSq{aPXyCA~?v8r!C%=L0^9P<&QAQ4?Cn0Qu)O!N zwap6OhW-!%-O2s;Tcm6*oMZlaeMQ|%V@r+5=DB(uZUvFsC(J%xq8e(W;-7 zX2*km_Ix=YW{{d(Rp4f`qiL$>U%^vrYGz$jI5%^q#{Hc}aeLUe%YAj$tzw+ct!X6j R(>)2~U{6;+mvv4FO#o)iXR`nR literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/奥.png b/fonts/SmallFont/奥.png new file mode 100644 index 0000000000000000000000000000000000000000..c012c59c565ea81708b0425f81f63bd82cc1bfcf GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW_9`bJZj-Up(UO!jv*e$--Z|p9Z=vfp7Z~I(XNse zQYLYG{Zd&P1)7%r*=8no?$8Ul-(~5?q8ma(o-s>G&(V2N=*HAHiTC09lQkk1Zs*iw z942(#?iOWQ#w{vw$j|>#X|v0Us>Bk<1cXYD1MZ$E`#@jlyCU3)Q6JyNBg@zrWjD|8j#+`rormvtP2mVe$yo)%$<% RTL{p-44$rjF6*2UngD2yVgUdE literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/山.png b/fonts/SmallFont/山.png new file mode 100644 index 0000000000000000000000000000000000000000..82903a710687e8e32e8d94851cc0d92c66b5b097 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW_44S?e80bLM5Iqjv*e$pH4l<*Py`Tta61)vv)uLh?6=@{{-Y)Gmj$Kmy+rIn TZW+h{?Pu_G^>bP0l+XkKx{gfD literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/常.png b/fonts/SmallFont/常.png new file mode 100644 index 0000000000000000000000000000000000000000..1f652fb64ad662b9a3202c355bb8110c4a179f9c GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW(}2<^DplK3T^dtaSZV|zBbfRsKtOI+vv~#({B<> zUB#j`iV9N{R2-sv*1!CCbcauV{b3g=dzk|-I~kny4xZ}!VRdBlo8n&2B_GNYAqi|&(S zdRkuIGEa)E_bM`eyEXY}W2|56=F^MR7?;joVd+*|$baL;(fe{4im|mO=6&aL_vi?? knoH@0rUWar>mdKI;Vst0OUPyAOHXW literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/我.png b/fonts/SmallFont/我.png new file mode 100644 index 0000000000000000000000000000000000000000..5127a1f6167d0e6df8e4a1fb92e3df553220f9ab GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW=+0qdu?r?&>Bw{#}JR>XQv(%VpimE?tJ|J|EJeW z=iXe|F){8{?odlQT_3QYXRX<}j8#c#ihOU1f940ZUcQ}n_m^Cp&GoJGMZCan zu4noWesgtIzf8K?w*R8n&1uRDgZW>4owhz$i>*p0;AI2z=Mbku6MKKpdAhyyM&(WO zz*cUV%GuB4Z`UbYXScGNP|R3se_+#=)U+Pk4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW-Z>E(wZP+4tcsbhIkx58yd)WRDol0%kTJ^e|H?^ zO#1p%^>MZ{`%)3LPvW1iOs{mE%aG92Br4KAan6Kad;Zy7R1kRc z@ZuLOjXQ}m3Y4Y9`A&nhH%s`SiwvrEt4GASM~bqX@PV*vCGgQu&X%Q~loCIG6ObrApn literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/日.png b/fonts/SmallFont/日.png new file mode 100644 index 0000000000000000000000000000000000000000..8f59713de0cd87934ee14bfc5d424188baff8ddc GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW-Vpbvnq3eLiwI9jv*e$-v&o>9Z=xOKJq)>^0)LM zoo}Y65`G3vH1Um^$X2lT%=5|o%G&Ao)Mq?h9CEPZws|Hj-iEh^^O~Q$JAXpu zf&u#ljt~2o!nQOBGj1+^Aop07aq;e>GnkL=UJ$xyF2g;xYg$v}=O1OA`dh#z<7TZa P&}s%xS3j3^P6k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW^HcGZ$nP=9Z=v{eB}TCr|(P_ z&*W)2bJ;@Zx4MF9A(^OXdNgX$0B7BIj`Xl&{Yhcu6{1-oD!M<0rXiW literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/浅.png b/fonts/SmallFont/浅.png new file mode 100644 index 0000000000000000000000000000000000000000..50c695a0e93907a1ebe2b9b5285a3673653b2282 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW^JpAy?bSVLfbrD978;gUk!2OV^QSTobvDg(|3iE zxuRv0J&(=iVD(DvInKA$auRcWQ20V_DJ0SRZH^E*(w(>=qdYo z%v1_%4sWk4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW*sdpZ)=dc#hxyXAs)x~h8`4aP~a%G`Tu|V^|d;| zW^bSBHZwB2YtENlxAQ1(lbwx~GSA(KsSQ(uoczRHcb$7wZcw_NJ9JC)U*+fb8D~Ts zp5wQsph5EN#^8Fk4cF&AjB#LIAhm7Q&A`VE)iM`89xf``Q|z$aI&oL|%fmSpi?+(m!eh5Jl4d-K9i7oXjr`OZ}G6jQSy`?lZuugxvlQ!g57P7~NP Q2k2Y|Pgg&ebxsLQ0BX==i2wiq literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/色.png b/fonts/SmallFont/色.png new file mode 100644 index 0000000000000000000000000000000000000000..2401f892041fdbda2d2bfc40658069464015a3e2 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW?ku|KCUA`p>|If#}JR>Z>L!E9WdZ&o%}nXrJPpTjS<&GC41p7XvR2OOpym?-&TMa41mh?WDtcWo51 zxzQN#R3Tf9+eOOo#>&ga&kF9wIxd$j`68sZQTM4@V;-kl;05WXGX5`>Ef;sHbY)H0 ozvauBLs!3?jNV_h-nW{;E>+5Ofw%u(ppzIpUHx3vIVCg!0I8l>pa1{> literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/見.png b/fonts/SmallFont/見.png new file mode 100644 index 0000000000000000000000000000000000000000..102241e7c3bd9778ab439e9f08d1014e1d533cca GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW?jqe@4OX&LLHtijv*e$uTC};Vo>B@ZhiPa{#>b; zmc#|^CB-v1I<;w&{NT!%WK!z)#l3@)|8e#0=kL8)78&qol`;+08;T)ssI20 literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/越.png b/fonts/SmallFont/越.png new file mode 100644 index 0000000000000000000000000000000000000000..fd56f296ba6cc87628dc124656ecab2d073b8390 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW0h4y>8IEHu}zZ&Yuci4dAu;Bmyo62YI zQezYjduyP#R)pzTLejTM#&tFYpIc|n6t@&VP%S0? zQ*olH)X^FLB^#A|W~uMBGn+2SAMxP=>!J-$b9BT5x0pCKe6xA9J8;`&v!I4$j~1}( zVV7%P@=+|~QoFux635(=P;vOSbP0l+XkKK9_L= literal 0 HcmV?d00001 diff --git a/fonts/SmallFont/酔.png b/fonts/SmallFont/酔.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1f4ebec42c6c8c2871eb50ea82b873328262d8 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`vY!KW_>w@OLI;Fg*JP-IEHu}KO15xbi{z8TjJmU)TJI> zN7*@+M|$-iaN=0^I(dPM!SSDFOHVc^Irr($m^5*l(L#mG$9J`uR~_SeeW^ua7k|tf z_Pz-mxewF=?suOFWjwLeBI^L>u_Ze5!@XM;CzX2FJKt#OsBrzhq+aD$LMorny7avp zxBcaxWxKZ0-eT6x)2>eSTx$y|Yt6rXYSP;FW`bct)sG2V4;1r8#LK(7%rOoK{&=>N iSH9zSqI&KB@HSC>yn{DAn`*IP zijq}9lo(E+7!GVrG8Ivmcw8>u&gXAtv*UDnD2jeG>e6%{$J;R61i{+#R<7IF_QEu4 zU7u-MsVGxfE+lCzin$9wbD8qgdv}13VJKM}&r&bf2^T?QmdKqYiuZ~r_0mio!4qg23}U*L7{%Hcito3{BHiRh4CVFc^rUm|zs0hQr?Xcdoa#orP&tx-n7p zTvlUA4#a`O3kJt23@g$!N3H8(S&bIctS*vj6qQ*xNrQ3h<)NDfcH&!+YYZLTw^Y|q z99^#Rph%oNv=Uz*I*MmXwk8@1pJqW6yTj1-0@HCd(^hm-QuP61eC*tIWxOioMJkjY zJ2I$P0>U+R9j;bbmYAmK`>5+E2ncWjcn#13Yys8)4L}W00*nDNfEZv1-~kZI2w#T- zZZ+ZAp~Y*L(gSZJ8>Z({BkG5wHf zeR}IsuWVSFurS`g6I;Xvu|NzFO+*n9Y8@&SCNhjfBF=#!^Qy?oJWWQtmy!k`1Bd_| z07(K?1|BR-Nh|JPS3wy;Scl;se_uQTxC76g+&HB4zg{o2eS)2g5}8brB+2MroDXwV>9y`a1*JcTGl6b&jU;6Z~5DrnFk zQVphf(BQ$eDrj&)gK0cy@ZiBiNY!Gf10FnR@Q_ju9z3Lwt*1Bn8@-%!5BHpVzH_-tpFN=2E-av@10LUK{e1R>%1nB&4;Z@{uX!*~qiFpLdg0vG^z+~eylb}ep~xM{Gh zaaH1Sj7|P_mY$~Zp$zxqU^ntMxwFpfRcbY{Ig5;GsF#6O`0CJAGDl8qDKz`OK^$GQ zR6&<{MdBpVJDpC4!(qSQcU`yLZrAH|+qSFKYOz=}O*5O#>bkC~YBHIO$K%mxl;?St zWl54mQ51$@5Cop*xvp#5wrQG%VQ8ABs;Vr@{eGVil3)~_27|rtZ(MI>J9E>jbYraQ zxva*L9FV>vhz8FqJ&v#}&#dZVQ4QyltS*vj7?oK#PJ>bG<)NDfcH&!+YYZISw^Y|q z99^#Rph%oNv=Uz*IErUVwnhv^NV6b{-9c!3f$6xKX)C%Zsd^tVK6dVIX}l=qc`BA3 zH#C@70?IXZ9WIwxmYAmK`>5+EiU@E5cnz=vSOcs88h{$01Q-Ei05QM-zyqL^QN9ib zY+IbouqZH&(Q!~!sfs8JH3~y9C;;uw0YU)h-P~h`yCt?IHYrX$EHuo7H!**Vdiz0d z=d){0N*OX{ zr=RcA1DXS Me{=Qxi*LUF4 +// Types, Assert #include "Lth_types.h" #include "Lth_assert.h" + +// stdlib #include "Lth_stdlib.h" +// LinkList, HashMap #include "Lth_linklist.h" #include "Lth_hashmap.h" +// Token #include "Lth_token.h" + +// TokenStream #include "Lth_tokenstream.h" -#include "Lth_callback.h" - +// Manifest #include "Lth_manifest.h" -#include "Lth_font.h" +// Context #include "Lth_context.h" -#include "Lth_control.h" -#include "Lth_button.h" -#include "Lth_window.h" -#include "Lth_hudmessage.h" +// Draw #include "Lth_draw.h" +// Font +#include "Lth_font.h" + +// Control +#include "Lth_callback.h" +#include "Lth_control.h" + +// Control Types +#include "Lth_window.h" +#include "Lth_winman.h" + #endif//lithos3__Lth_h diff --git a/lithos_c/inc/Lth_callback.h b/lithos_c/inc/Lth_callback.h index b709776..0f825d8 100644 --- a/lithos_c/inc/Lth_callback.h +++ b/lithos_c/inc/Lth_callback.h @@ -19,11 +19,11 @@ #if defined(Lth_X) -Lth_X(SIGDESTROY, destroy, void, struct Lth_Control *) -Lth_X(SIGCLICK , click, void, struct Lth_Control *) -Lth_X(SIGDRAW , draw, void, struct Lth_Control *) -Lth_X(SIGPSTDRAW, postdraw, void, struct Lth_Control *) -Lth_X(SIGUPDATE , update, void, struct Lth_Control *) +Lth_X(SigDestroy, destroy, void, struct Lth_Control *) +Lth_X(SigClicked, click, void, struct Lth_Control *) +Lth_X(SigDraw , draw, void, struct Lth_Control *) +Lth_X(SigDrawPst, drawpost, void, struct Lth_Control *) +Lth_X(SigUpdate , update, void, struct Lth_Control *) #undef Lth_X @@ -31,6 +31,7 @@ Lth_X(SIGUPDATE , update, void, struct Lth_Control *) #define lithos3__Lth_callback_h #define Lth_Callback(name) ((Lth_Callback_t)(name)) + #define Lth_Call(name, ...) \ do \ { \ @@ -39,6 +40,7 @@ Lth_X(SIGUPDATE , update, void, struct Lth_Control *) (name).data[cbIter](__VA_ARGS__); \ } \ while(0) + #define Lth_CallReverse(name, ...) \ do \ { \ @@ -47,11 +49,6 @@ Lth_X(SIGUPDATE , update, void, struct Lth_Control *) (name).data[cbIter - 1](__VA_ARGS__); \ } \ while(0) -#define Lth_ControlCall(ctrl, name, ...) \ - Lth_ListForEach(Lth_Control *owner, ctrl->descendants) \ - Lth_Call(owner->cb.name, __VA_ARGS__); \ - \ - Lth_Call(ctrl->cb.name, __VA_ARGS__) // Type Definitions ----------------------------------------------------------| diff --git a/lithos_c/inc/Lth_context.h b/lithos_c/inc/Lth_context.h index 1e71f21..185e9d7 100644 --- a/lithos_c/inc/Lth_context.h +++ b/lithos_c/inc/Lth_context.h @@ -33,32 +33,26 @@ // // internal data // clip -// map // rsrcBase // rsrc -// lastmap // // read-only -// w: width of screen -// h: height of screen +// scale: current draw scale +// w: width of screen +// h: height of screen // // read-write // hid: HUD ID range -// mapspace: space between newly mapped windows that are auto-positioned -// font: default font for drawing // typedef struct Lth_Context { - struct { Lth_Rect rects[16]; int num; } clip; - struct { Lth_LinkList *head, *tail; } map; + struct { Lth_Rect rects[16]; size_t num; } clip; Lth_ResourceMap *rsrcBase, *rsrc; - Lth_IVec2 lastmap; + _Accum scale; int w, h; Lth_HIDRange hid; - Lth_IVec2 mapspace; - Lth_Font *font; } Lth_Context; @@ -68,11 +62,11 @@ Lth_Context *Lth_ContextNew(int w, int h, Lth_HID hidBase, Lth_HID hidEnd); void Lth_ContextDestroy(Lth_Context *ctx); void Lth_ContextRun(Lth_Context *ctx); -void Lth_ContextMap(Lth_Context *ctx, struct Lth_Window *window); - void Lth_ContextClipPush(Lth_Context *ctx, int x, int y, int w, int h); void Lth_ContextClipPop(Lth_Context *ctx); void *Lth_ContextResource(Lth_Context *ctx, char const *key); +void Lth_ContextScale(Lth_Context *ctx, _Accum s); + #endif//lithos3__Lth_context_h diff --git a/lithos_c/inc/Lth_control.h b/lithos_c/inc/Lth_control.h index 6fc8e40..ef7254b 100644 --- a/lithos_c/inc/Lth_control.h +++ b/lithos_c/inc/Lth_control.h @@ -13,6 +13,16 @@ #ifndef lithos3__Lth_control_h #define lithos3__Lth_control_h +#define Lth_ControlFontRunPlain(ctrl, ...) \ + Lth_FontRunPlain((ctrl)->ctx, Lth_ControlFont((ctrl)), __VA_ARGS__) + +#define Lth_ControlInit(type) \ + type *ctrl = calloc(1, sizeof(type)); \ + Lth_assert(ctrl != NULL); \ + \ + ctrl->ctx = ctx + +#define Lth_VirtControl (void *)ctrl // Type Definitions ----------------------------------------------------------| @@ -23,30 +33,37 @@ // Has members of Lth_Rect (read-write). // // internal data -// link -// descendants // cb +// descHead +// descTail +// link // // read-only +// vtable: virtual functions for overrides // parent: control's parent (NULL if none) // // read-write -// userdata: opaque pointer for the user to use -// font: default font for drawing // ctx: pointer to associated context +// font: default font for drawing +// userdata: opaque pointer for the user to use // // typedef struct Lth_Control { Lth_CallbackSet cb; - Lth_LinkList link; - Lth_LinkList *descendants; + + struct + { + Lth_Font *(*getFont)(struct Lth_Control *); + } vtable; + + Lth_LinkList *descHead, *descTail, link; struct Lth_Control *parent; - void *userdata; - Lth_Font *font; Lth_Context *ctx; + Lth_Font *font; + void *userdata; Lth_Mixin(Lth_Rect); } Lth_Control; @@ -54,10 +71,12 @@ typedef struct Lth_Control // Extern Functions ----------------------------------------------------------| -Lth_Font *Lth_ControlFont(void *ctrl_); void Lth_ControlRun(void *ctrl_); void Lth_ControlConnect(void *ctrl_, Lth_Signal signal, Lth_Callback_t cb); void Lth_ControlDestroy(void *ctrl_); -void Lth_ControlAttach(void *ctrlsrc_, void *ctrldst_); +void Lth_ControlAttach(void *ctrl_, void *ctrlS_); +void Lth_ControlAttachTail(void *ctrl_, void *ctrlS_); + +Lth_Font *Lth_ControlFont(void *ctrl_); #endif//lithos3__Lth_control_h diff --git a/lithos_c/inc/Lth_draw.h b/lithos_c/inc/Lth_draw.h index a284221..41c58ef 100644 --- a/lithos_c/inc/Lth_draw.h +++ b/lithos_c/inc/Lth_draw.h @@ -13,9 +13,25 @@ #ifndef lithos3__Lth_draw_h #define lithos3__Lth_draw_h +#define Lth_HudMessageBegin() ACS_BeginPrint() + +#define Lth_TICK (0.029k) // One gametic, in seconds. + +#define Lth_A_Cen (0.0k) +#define Lth_A_Lef (0.1k) +#define Lth_A_Rig (0.2k) +#define Lth_A_Top (0.1k) +#define Lth_A_Bot (0.2k) +#define Lth_A_TCe (0.4k) +#define Lth_A_TLe (0.5k) +#define Lth_A_TRi (0.6k) + // Extern Functions ----------------------------------------------------------| +Lth_OptArgs(1) void Lth_HudMessageEnd(Lth_Context *ctx, _Accum x, _Accum y, _Accum a); +Lth_OptArgs(1) void Lth_DrawSprite(Lth_Context *ctx, __str name, _Accum x, _Accum y, _Accum a); + void Lth_DrawRectAndClip(Lth_Context *ctx, int x, int y, int w, int h, _Accum alpha); void Lth_DrawRect(Lth_Context *ctx, int x, int y, int w, int h, _Accum alpha); diff --git a/lithos_c/inc/Lth_font.h b/lithos_c/inc/Lth_font.h index 71a903d..2b9d252 100644 --- a/lithos_c/inc/Lth_font.h +++ b/lithos_c/inc/Lth_font.h @@ -13,15 +13,54 @@ #ifndef lithos3__Lth_font_h #define lithos3__Lth_font_h +#define Lth_FontRunBegin() ACS_BeginPrint() + // Type Definitions ----------------------------------------------------------| +struct Lth_Context; + +enum +{ + Lth_AX_Lef = 1, + Lth_AX_Rig, + Lth_AX_Cen, + + Lth_AY_Top = 1, + Lth_AY_Bot, + Lth_AY_Cen +}; + +// +// Lth_FontCasing +// +typedef enum Lth_FontCasing +{ + Lth_Case_Both, + Lth_Case_Uppr, + Lth_Case_Lowr +} Lth_FontCasing; + +// +// Lth_GlyphLookupType +// +typedef enum Lth_GlyphLookupType +{ + Lth_GT_Chara, + Lth_GT_Codep, + Lth_GT_Digit +} Lth_GlyphLookupType; + // // Lth_Glyph // typedef struct Lth_Glyph { - int w, h; + Lth_Inherits(Lth_Rect); + __str fname; + _Accum s; + wchar_t ch; + char mb[MB_CUR_MAX + 1]; } Lth_Glyph; // @@ -29,13 +68,22 @@ typedef struct Lth_Glyph // typedef struct Lth_Font { - __str name; - Lth_Glyph glyphs[126]; + Lth_FontCasing casing; + __str baseName; + int spaceWidth; + int height; + __str fnamePref; + __str fnameSuff; + Lth_HashMap glyphs; + Lth_Vector(Lth_Glyph) glyphV; } Lth_Font; // Extern Functions ----------------------------------------------------------| -Lth_Font *Lth_FontNew(char const *name); +Lth_ScriptCall Lth_Font *Lth_FontNew(char const *fname); +void Lth_FontDestroy(Lth_Font *font); + +Lth_OptArgs(2) void Lth_FontRunPlain(struct Lth_Context *ctx, Lth_Font *font, int x, int y, int ax, int ay); #endif//lithos3__Lth_font_h diff --git a/lithos_c/inc/Lth_hashmap.h b/lithos_c/inc/Lth_hashmap.h index 93406d2..cd67803 100644 --- a/lithos_c/inc/Lth_hashmap.h +++ b/lithos_c/inc/Lth_hashmap.h @@ -64,9 +64,9 @@ typedef struct Lth_HashMap // Static Functions ----------------------------------------------------------| // -// Lth_HashMapFree +// Lth_HashMapDestroy // -static inline void Lth_HashMapFree(Lth_HashMap *map) +static inline void Lth_HashMapDestroy(Lth_HashMap *map) { if(map == NULL) return; @@ -82,10 +82,8 @@ static inline void Lth_HashMapFree(Lth_HashMap *map) // static inline void Lth_HashMapAlloc(Lth_HashMap *map, size_t count) { - Lth_assert(map != NULL); - if(map->elem.data) - Lth_HashMapFree(map); + Lth_HashMapDestroy(map); size_t size = sizeof(Lth_HashMapElem) * count + sizeof(Lth_HashMapElem *) * count; @@ -99,8 +97,6 @@ static inline void Lth_HashMapAlloc(Lth_HashMap *map, size_t count) // static inline void Lth_HashMapBuild(Lth_HashMap *map) { - Lth_assert(map != NULL); - map->table = (Lth_HashMapElem **)(map->elem.data + map->elem.size); for(Lth_HashMapElem **elem = map->table + map->elem.size; diff --git a/lithos_c/inc/Lth_hudmessage.h b/lithos_c/inc/Lth_hudmessage.h deleted file mode 100644 index 513d04b..0000000 --- a/lithos_c/inc/Lth_hudmessage.h +++ /dev/null @@ -1,102 +0,0 @@ -//----------------------------------------------------------------------------- -// -// Copyright © 2016 Project Golan -// -// See "LICENSE" for more information. -// -//----------------------------------------------------------------------------- -// -// HudMessage macros. -// -//----------------------------------------------------------------------------- - -#ifndef lithos3__Lth_hudmessage_h -#define lithos3__Lth_hudmessage_h - -#define Lth_HudMessageFont(font, ...) \ - ( \ - ACS_SetFont(font), \ - Lth_HudMessage(__VA_ARGS__) \ - ) - -#define Lth_HudMessageParams(flags, id, tr, x, y, ...) \ - ( \ - ACS_OptHudMessage((flags) | HUDMSG_NOTWITHFULLMAP, id, tr, x, y, \ - Lth_TICK), \ - ACS_EndHudMessage(__VA_ARGS__) \ - ) - -#define Lth_HudMessagePlain(id, x, y) \ - ( \ - ACS_OptHudMessage(HUDMSG_PLAIN | HUDMSG_NOTWITHFULLMAP, id, \ - CR_UNTRANSLATED, x, y, Lth_TICK), \ - ACS_EndHudMessage() \ - ) - -#define Lth_HudMessageFade(id, x, y, fadetime) \ - ( \ - ACS_OptHudMessage(HUDMSG_FADEOUT | HUDMSG_NOTWITHFULLMAP, id, \ - CR_UNTRANSLATED, x, y, Lth_TICK), \ - ACS_EndHudMessage(fadetime) \ - ) - -#define Lth_DrawSprite(name, flags, id, x, y, ...) \ - ( \ - ACS_SetFont(name), \ - ACS_PrintChar('A'), \ - Lth_HudMessageParams((flags) | HUDMSG_NOTWITHFULLMAP, id, \ - CR_UNTRANSLATED, x, y, __VA_ARGS__) \ - ) - -#define Lth_DrawSpriteFade(name, id, x, y, fadetime) \ - ( \ - ACS_SetFont(name), \ - ACS_PrintChar('A'), \ - Lth_HudMessageFade(id, x, y, fadetime) \ - ) - -#define Lth_DrawSpritePlain(name, id, x, y) \ - ( \ - ACS_SetFont(name), \ - ACS_PrintChar('A'), \ - Lth_HudMessagePlain(id, x, y) \ - ) - -#define Lth_DrawSpriteAlpha(name, id, x, y, alpha) \ - ( \ - ACS_SetFont(name), \ - ACS_PrintChar('A'), \ - Lth_HudMessageParams(HUDMSG_ALPHA, id, CR_UNTRANSLATED, x, y, alpha) \ - ) - -#define Lth_TICK (0.029k) // One tick, in seconds. - -#define Lth_A_Cen (0.0k) -#define Lth_A_Lef (0.1k) -#define Lth_A_Rig (0.2k) -#define Lth_A_Top (0.1k) -#define Lth_A_Bot (0.2k) -#define Lth_A_TCen (0.4k) -#define Lth_A_TLef (0.5k) -#define Lth_A_TRig (0.6k) - - -// Static Functions ----------------------------------------------------------| - -// -// Lth_HudMessage -// -static inline void Lth_HudMessage(char const *fmt, ...) -{ - va_list vl; - - ACS_BeginPrint(); - - va_start(vl, fmt); - __vnprintf(fmt, vl); - va_end(vl); - - ACS_MoreHudMessage(); -} - -#endif//lithos3__Lth_hudmessage_h diff --git a/lithos_c/inc/Lth_linklist.h b/lithos_c/inc/Lth_linklist.h index 4eaa595..3cac0b2 100644 --- a/lithos_c/inc/Lth_linklist.h +++ b/lithos_c/inc/Lth_linklist.h @@ -59,9 +59,6 @@ typedef struct Lth_LinkList // static inline void Lth_ListLink(Lth_LinkList *list, Lth_LinkList **head) { - Lth_assert(list != NULL); - Lth_assert(head != NULL); - Lth_LinkList *next = *head; if((list->next = next)) @@ -77,10 +74,6 @@ static inline void Lth_ListLink(Lth_LinkList *list, Lth_LinkList **head) static inline void Lth_ListLinkTail(Lth_LinkList *list, Lth_LinkList **head, Lth_LinkList **tail) { - Lth_assert(list != NULL); - Lth_assert(head != NULL); - Lth_assert(tail != NULL); - Lth_LinkList *prev = *tail; if(*(list->prev = head)) @@ -97,8 +90,6 @@ static inline void Lth_ListLinkTail(Lth_LinkList *list, Lth_LinkList **head, // static inline void Lth_ListRemove(Lth_LinkList *list) { - Lth_assert(list != NULL); - Lth_LinkList *next = list->next, **prev = list->prev; if(prev && (*prev = next)) diff --git a/lithos_c/inc/Lth_window.h b/lithos_c/inc/Lth_window.h index ead4540..fb583bf 100644 --- a/lithos_c/inc/Lth_window.h +++ b/lithos_c/inc/Lth_window.h @@ -33,7 +33,7 @@ typedef struct Lth_Window // Extern Functions ----------------------------------------------------------| -Lth_OptArgs(2) Lth_Window *Lth_WindowNew(char const *title, int x, int y, int w, int h); +Lth_OptArgs(2) Lth_Window *Lth_WindowNew(Lth_Context *ctx, char const *title, int x, int y, int w, int h); void Lth_WindowSetTitle(Lth_Window *ctrl, char const *title); #endif//lithos3__Lth_window_h diff --git a/lithos_c/inc/Lth_winman.h b/lithos_c/inc/Lth_winman.h new file mode 100644 index 0000000..05377d1 --- /dev/null +++ b/lithos_c/inc/Lth_winman.h @@ -0,0 +1,45 @@ +//----------------------------------------------------------------------------- +// +// Copyright © 2016 Project Golan +// +// See "LICENSE" for more information. +// +//----------------------------------------------------------------------------- +// +// Window management. +// +//----------------------------------------------------------------------------- + +#ifndef lithos3__Lth_winman_h +#define lithos3__Lth_winman_h + + +// Type Definitions ----------------------------------------------------------| + +// +// Lth_WindowManager +// +// Inherits Lth_Control (read-write) +// +// internal data +// lastmap +// +// read-write +// mapspace: space between newly mapped windows that are auto-positioned +// +typedef struct Lth_WindowManager +{ + Lth_Inherits(Lth_Control); + + Lth_IVec2 lastmap; + + Lth_IVec2 mapspace; +} Lth_WindowManager; + + +// Extern Functions ----------------------------------------------------------| + +Lth_WindowManager *Lth_WMNew(Lth_Context *ctx); +void Lth_WMMap(Lth_WindowManager *wm, Lth_Window *window); + +#endif//lithos3__Lth_winman_h diff --git a/lithos_c/src/context.c b/lithos_c/src/context.c index 119f49d..40d3f7f 100644 --- a/lithos_c/src/context.c +++ b/lithos_c/src/context.c @@ -12,26 +12,6 @@ #include "Lth.h" -#include -#include -#include - - -// Static Functions ----------------------------------------------------------| - -// -// Lth_ContextSetup -// -static void Lth_ContextSetup(Lth_Context *ctx, void *ctrl_) -{ - Lth_Control *ctrl = ctrl_; - - Lth_ListForEach(Lth_Control *owner, ctrl->descendants) - Lth_ContextSetup(ctx, owner); - - ctrl->ctx = ctx; -} - // Extern Functions ----------------------------------------------------------| @@ -41,18 +21,15 @@ static void Lth_ContextSetup(Lth_Context *ctx, void *ctrl_) Lth_Context *Lth_ContextNew(int w, int h, Lth_HID hidBase, Lth_HID hidEnd) { Lth_Context *ctx = calloc(1, sizeof(Lth_Context)); - Lth_assert(ctx != NULL); + ctx->scale = 1.0k; ctx->w = w; ctx->h = h; - ctx->lastmap.x = ctx->lastmap.y = -1; ctx->hid.cur = ctx->hid.base = hidBase; ctx->hid.end = hidEnd; - ctx->mapspace.x = 24; - ctx->mapspace.y = 16; ctx->rsrcBase = Lth_ManifestLoad_static(Lth_ManifestNew( - Lth_Resource("Base.Resource1", 999) + Lth_Resource("Base.DefaultFont", "lithos_fs/Fonts/SmallFontJP.lthm") )); return ctx; @@ -63,18 +40,7 @@ Lth_Context *Lth_ContextNew(int w, int h, Lth_HID hidBase, Lth_HID hidEnd) // void Lth_ContextDestroy(Lth_Context *ctx) { - if(ctx == NULL) - return; - - if(ctx->map.head) - { - Lth_ListFor(Lth_Control *owner, ctx->map.head) - { - Lth_ListRemove(list); - if(owner) Lth_ControlDestroy(owner); - list = next; - } - } + if(ctx == NULL) return; Lth_ResourceMapDestroy(ctx->rsrc); Lth_ResourceMapDestroy(ctx->rsrcBase); @@ -87,32 +53,12 @@ void Lth_ContextDestroy(Lth_Context *ctx) // void Lth_ContextRun(Lth_Context *ctx) { - Lth_assert(ctx != NULL); + Lth_Rect rect = ctx->clip.rects[ctx->clip.num]; ACS_SetHudSize(ctx->w, ctx->h, true); + ACS_SetHudClipRect(rect.x, rect.y, rect.w, rect.h); + ctx->hid.cur = ctx->hid.base; - - if(ctx->map.head) - Lth_ListForEach(Lth_Control *owner, ctx->map.head) - Lth_ControlRun(owner); -} - -// -// Lth_ContextMap -// -void Lth_ContextMap(Lth_Context *ctx, Lth_Window *ctrl) -{ - Lth_assert(ctx != NULL); - Lth_assert(ctrl != NULL); - - if(ctrl->x == -1) ctrl->x = ctx->lastmap.x += ctx->mapspace.x; - else ctx->lastmap.x = ctrl->x; - - if(ctrl->y == -1) ctrl->y = ctx->lastmap.y += ctx->mapspace.y; - else ctx->lastmap.y = ctrl->y; - - Lth_ContextSetup(ctx, ctrl); - Lth_ListInsertTail(&ctrl->link, ctrl, &ctx->map.head, &ctx->map.tail); } // @@ -120,8 +66,6 @@ void Lth_ContextMap(Lth_Context *ctx, Lth_Window *ctrl) // void Lth_ContextClipPush(Lth_Context *ctx, int x, int y, int w, int h) { - Lth_assert(ctx != NULL); - Lth_Rect rect = ctx->clip.rects[ctx->clip.num++]; if(!(rect.x == 0 && rect.y == 0 && rect.w == 0 && rect.h == 0)) @@ -143,8 +87,6 @@ void Lth_ContextClipPush(Lth_Context *ctx, int x, int y, int w, int h) // void Lth_ContextClipPop(Lth_Context *ctx) { - Lth_assert(ctx != NULL); - Lth_Rect rect = ctx->clip.rects[--ctx->clip.num]; ACS_SetHudClipRect(rect.x, rect.y, rect.w, rect.h); } @@ -154,9 +96,19 @@ void Lth_ContextClipPop(Lth_Context *ctx) // void *Lth_ContextResource(Lth_Context *ctx, char const *key) { - void *p = Lth_HashMapFind(&ctx->rsrc->map, key); - if(p) return p; - else return Lth_HashMapFind(&ctx->rsrcBase->map, key); + void *p = NULL; + if(ctx->rsrc) p = Lth_HashMapFind(&ctx->rsrc->map, key); + if(p) return p; + else return Lth_HashMapFind(&ctx->rsrcBase->map, key); +} + +// +// Lth_ContextScale +// +void Lth_ContextScale(Lth_Context *ctx, _Accum s) +{ + ctx->scale = s; + ACS_SetHudSize(ctx->w / ctx->scale, ctx->h / ctx->scale, true); } // EOF diff --git a/lithos_c/src/control.c b/lithos_c/src/control.c index 4e28042..e2dfc27 100644 --- a/lithos_c/src/control.c +++ b/lithos_c/src/control.c @@ -19,27 +19,6 @@ // Extern Functions ----------------------------------------------------------| -// -// Lth_ControlFont -// -Lth_Font *Lth_ControlFont(void *ctrl_) -{ - Lth_Control *ctrl = ctrl_; - - if(ctrl->font) - return ctrl->font; - else - { - for(Lth_Control *p = ctrl->parent; p; p = p->parent) - { - if(p->font) - return p->font; - } - } - - return ctrl->ctx->font; -} - // // Lth_ControlRun // @@ -47,11 +26,12 @@ void Lth_ControlRun(void *ctrl_) { Lth_Control *ctrl = ctrl_; - Lth_assert(ctrl != NULL); + Lth_ListForEach(Lth_Control *owner, ctrl->descHead) + Lth_ControlRun(owner); - Lth_ControlCall(ctrl, update, ctrl); - Lth_ControlCall(ctrl, draw, ctrl); - Lth_ControlCall(ctrl, postdraw, ctrl); + Lth_Call(ctrl->cb.update, ctrl); + Lth_Call(ctrl->cb.draw, ctrl); + Lth_Call(ctrl->cb.drawpost, ctrl); } // @@ -59,9 +39,7 @@ void Lth_ControlRun(void *ctrl_) // void Lth_ControlConnect(void *ctrl_, Lth_Signal signal, Lth_Callback_t cb) { - Lth_assert(ctrl_ != NULL); Lth_assert(signal < Lth_SIGMAX && signal >= 0); - Lth_assert(cb != NULL); Lth_Control *ctrl = ctrl_; @@ -86,7 +64,7 @@ void Lth_ControlDestroy(void *ctrl_) Lth_Control *ctrl = ctrl_; - Lth_ListFor(Lth_Control *owner, ctrl->descendants) + Lth_ListFor(Lth_Control *owner, ctrl->descHead) { Lth_ControlDestroy(owner); list = next; @@ -105,14 +83,38 @@ void Lth_ControlDestroy(void *ctrl_) // // Lth_ControlAttach // -void Lth_ControlAttach(void *ctrlsrc_, void *ctrldst_) +void Lth_ControlAttach(void *ctrl_, void *ctrlS_) { - Lth_assert(ctrlsrc_ != NULL); - Lth_assert(ctrldst_ != NULL); + Lth_Control *ctrl = ctrl_, *ctrlS = ctrlS_; + Lth_ListInsert(&ctrlS->link, ctrlS, &ctrl->descHead); + ctrlS->ctx = ctrl->ctx; + ctrlS->parent = ctrl; +} - Lth_Control *ctrlsrc = ctrlsrc_, *ctrldst = ctrldst_; - Lth_ListInsert(&ctrlsrc->link, ctrlsrc, &ctrldst->descendants); - ctrlsrc->ctx = ctrldst->ctx; +// +// Lth_ControlAttachTail +// +void Lth_ControlAttachTail(void *ctrl_, void *ctrlS_) +{ + Lth_Control *ctrl = ctrl_, *ctrlS = ctrlS_; + Lth_ListInsertTail(&ctrlS->link, ctrlS, &ctrl->descHead, &ctrl->descTail); + ctrlS->ctx = ctrl->ctx; + ctrlS->parent = ctrl; +} + +// +// Lth_ControlFont +// +Lth_Font *Lth_ControlFont(void *ctrl_) +{ + Lth_Control *ctrl = ctrl_; + + if(ctrl->font || (ctrl->vtable.getFont && ctrl->vtable.getFont(ctrl))) + return ctrl->font; + else if(ctrl->parent) + return Lth_ControlFont(ctrl->parent); + else + return NULL; } // EOF diff --git a/lithos_c/src/draw.c b/lithos_c/src/draw.c index c0ac918..e56b48e 100644 --- a/lithos_c/src/draw.c +++ b/lithos_c/src/draw.c @@ -15,19 +15,52 @@ // Extern Functions ----------------------------------------------------------| +// +// Lth_HudMessageEnd +// +void Lth_HudMessageEnd(Lth_Context *ctx, _Accum x, _Accum y, _Accum a) +{ + int flags = HUDMSG_PLAIN | HUDMSG_NOTWITHFULLMAP; + + if(ctx->scale != 1) + { + long _Accum xn = (int)x / (long _Accum)ctx->w; + long _Accum yn = (int)y / (long _Accum)ctx->h; + x = (xn * (ctx->w / ctx->scale)) + Lth_fractk(x); + y = (yn * (ctx->h / ctx->scale)) + Lth_fractk(y); + } + + if(a) flags |= HUDMSG_ALPHA; + + ACS_MoreHudMessage(); + ACS_OptHudMessage(flags, ctx->hid.cur--, CR_UNTRANSLATED, x, y, Lth_TICK); + if(a) ACS_EndHudMessage(a); + else ACS_EndHudMessage(); +} + +// +// Lth_DrawSprite +// +void Lth_DrawSprite(Lth_Context *ctx, __str name, _Accum x, _Accum y, _Accum a) +{ + ACS_SetFont(name); + + Lth_HudMessageBegin(); + ACS_PrintChar('A'); + Lth_HudMessageEnd(ctx, x, y, a); +} + // // Lth_DrawRectAndClip // void Lth_DrawRectAndClip(Lth_Context *ctx, int x, int y, int w, int h, _Accum alpha) { - Lth_assert(ctx != NULL); - Lth_ContextClipPush(ctx, x, y, w, h); for(int ix = 0; ix < w; ix += 128) for(int iy = 0; iy < h; iy += 128) - Lth_DrawSpriteAlpha(s"lithos_gfx/Base/Black128.png", ctx->hid.cur--, + Lth_DrawSprite(ctx, s"lithos_gfx/Base/Black128.png", x + ix + Lth_A_Lef, y + iy + Lth_A_Top, alpha); } diff --git a/lithos_c/src/font.c b/lithos_c/src/font.c deleted file mode 100644 index 7da4f96..0000000 --- a/lithos_c/src/font.c +++ /dev/null @@ -1,33 +0,0 @@ -//----------------------------------------------------------------------------- -// -// Copyright © 2016 Project Golan -// -// See "LICENSE" for more information. -// -//----------------------------------------------------------------------------- -// -// Font layout handling. -// -//----------------------------------------------------------------------------- - -#include "Lth.h" - -#include - - -// Extern Functions ----------------------------------------------------------| - -// -// Lth_FontNew -// -Lth_Font *Lth_FontNew(char const *name) -{ - Lth_Font *font = calloc(1, sizeof(Lth_Font)); - Lth_assert(font != NULL); - - font->name = Lth_strentdup(name); - - return font; -} - -// EOF diff --git a/lithos_c/src/fontnew.c b/lithos_c/src/fontnew.c new file mode 100644 index 0000000..9006614 --- /dev/null +++ b/lithos_c/src/fontnew.c @@ -0,0 +1,250 @@ +//----------------------------------------------------------------------------- +// +// Copyright © 2016 Project Golan +// +// See "LICENSE" for more information. +// +//----------------------------------------------------------------------------- +// +// Font creation. +// +//----------------------------------------------------------------------------- + +#include "Lth.h" + +#include +#include +#include + +#define GenFontData() \ + char const **base = Lth_HashMapFind(&rsrc->map, "Font.Base"); \ + char const **casing = Lth_HashMapFind(&rsrc->map, "Font.Case"); \ + char const **extraDir = Lth_HashMapFind(&rsrc->map, "Font.ExtraDir"); \ + char const **glyphList = Lth_HashMapFind(&rsrc->map, "Font.Glyphs"); \ + int const *height = Lth_HashMapFind(&rsrc->map, "Font.Height"); \ + char const **prefix = Lth_HashMapFind(&rsrc->map, "Font.Prefix"); \ + int const *spaceWidth = Lth_HashMapFind(&rsrc->map, "Font.SpaceWidth"); \ + char const **suffix = Lth_HashMapFind(&rsrc->map, "Font.Suffix"); \ + char const **typeStr = Lth_HashMapFind(&rsrc->map, "Font.Type"); + +#define FontError(err) \ + if(1) \ + { \ + fprintf(stderr, "%s: %s\n", __func__, err); \ + longjmp(FontJmpBuf, FontJmpBufToken); \ + } \ + else ((void)0) + + +// Static Objects ------------------------------------------------------------| + +static jmp_buf FontJmpBuf; +static int const FontJmpBufToken = 31; + + +// Static Functions ----------------------------------------------------------| + +// +// FontValidate +// +static void FontValidate(Lth_ResourceMap *rsrc) +{ + GenFontData(); + + if(!glyphList) FontError("Font definition must have a glyph list."); + if(!base && !extraDir) FontError("Font definition doesn't have a font."); + if(!height) FontError("Font definition doesn't have a height."); +} + +// +// FontLoadGlyphs +// +static void FontLoadGlyphs(Lth_Font volatile *font, Lth_ResourceMap *rsrc, + int type) +{ + char const **glyphList = Lth_HashMapFind(&rsrc->map, "Font.Glyphs"); + + wchar_t *tmpkey = Lth_wcsdup(L"Font.GlyphData. _ "); + wchar_t *keyl = wcschr(tmpkey, ' '); + wchar_t *keyr = wcsrchr(tmpkey, ' '); + + __with(mbstate_t state; size_t i = 0; memset(&state, 0, sizeof(state));) + for(char const *sptr = *glyphList; *sptr; i++) + { + wchar_t wc; + int ret = mbrtowc(&wc, sptr, 4, &state); + if(ret <= 0) FontError("Error parsing Unicode sequence."); + + Lth_Glyph glyph = { .ch = wc }; + memmove(glyph.mb, sptr, ret); + + (*keyl = wc); + int *x = (*keyr = 'x', Lth_HashMapFind(&rsrc->map, tmpkey)); + int *y = (*keyr = 'y', Lth_HashMapFind(&rsrc->map, tmpkey)); + int *w = (*keyr = 'w', Lth_HashMapFind(&rsrc->map, tmpkey)); + int *h = (*keyr = 'h', Lth_HashMapFind(&rsrc->map, tmpkey)); + _Accum *s = (*keyr = 's', Lth_HashMapFind(&rsrc->map, tmpkey)); + + if(x) glyph.x = *x; + if(y) glyph.y = *y; + if(w) glyph.w = *w; + if(h) glyph.h = *h; + if(s) glyph.s = *s; + + if(wc > 0x7F) + { + ACS_BeginPrint(); + + ACS_PrintString(font->fnamePref); + + switch(type) + { + case Lth_GT_Chara: Lth_PrintString(glyph.mb); break; + case Lth_GT_Codep: ACS_PrintHex(glyph.ch); break; + case Lth_GT_Digit: ACS_PrintInt(glyph.ch); break; + } + + ACS_PrintString(font->fnameSuff); + + glyph.fname = ACS_EndStrParam(); + } + + font->glyphV.data[i] = glyph; + font->glyphs.elem.data[i].keyhash = (size_t)wc; + font->glyphs.elem.data[i].value = &font->glyphV.data[i]; + + sptr += ret; + } + + free(tmpkey); + + Lth_HashMapBuild((Lth_HashMap *)&font->glyphs); +} + +// +// FontSetup +// +static void FontSetup(Lth_Font volatile *font, Lth_ResourceMap *rsrc) +{ + GenFontData(); + + int type; + + if(typeStr) + if(Lth_stricmp(*typeStr, "Character") == 0) type = Lth_GT_Chara; + else if(Lth_stricmp(*typeStr, "Codepoint") == 0) type = Lth_GT_Codep; + else if(Lth_stricmp(*typeStr, "Digit") == 0) type = Lth_GT_Digit; + else FontError("Invalid Font.Type"); + else + type = Lth_GT_Chara; + + font->height = *height; + + if(base) + font->baseName = Lth_strentdup(*base); + + if(extraDir) + { + ACS_BeginPrint(); + + Lth_PrintString(*extraDir); + + if((*extraDir)[strlen(*extraDir)] != '/') + ACS_PrintChar('/'); + + if(prefix) + Lth_PrintString(*prefix); + + font->fnamePref = ACS_EndStrParam(); + + if(suffix) font->fnameSuff = Lth_strentdup(*suffix); + else font->fnameSuff = s".png"; + } + + if(spaceWidth) font->spaceWidth = *spaceWidth; + else font->spaceWidth = 4; + + if(casing) + if(Lth_stricmp(*casing, "Both") == 0) + font->casing = Lth_Case_Both; + else if(Lth_stricmp(*casing, "UpperOnly") == 0) + font->casing = Lth_Case_Uppr; + else if(Lth_stricmp(*casing, "LowerOnly") == 0) + font->casing = Lth_Case_Lowr; + else + FontError("Invalid Font.Case"); + else + font->casing = Lth_Case_Both; + + font->glyphV.size = Lth_mbslen(*glyphList); + Lth_HashMapAlloc((Lth_HashMap *)&font->glyphs, font->glyphV.size); + Lth_VectorAlloc(Lth_Glyph, font->glyphV); + + FontLoadGlyphs(font, rsrc, type); +} + +// +// FontPrint +// +// [debug] Print characters out. +// +Lth_ScriptCall static void FontPrint(Lth_Font *font) +{ + for(size_t i = 0; i < font->glyphs.elem.size; i++) + __with(Lth_Glyph *glyph = font->glyphs.elem.data[i].value;) + printf("glyph %X (%s)\t\tx: %i\ty: %i\tw: %i\n", + glyph->ch, glyph->mb, glyph->x, glyph->y, glyph->w); +} + + +// Extern Functions ----------------------------------------------------------| + +// +// Lth_FontNew +// +Lth_ScriptCall Lth_Font *Lth_FontNew(char const *fname) +{ + Lth_Font volatile *font = NULL; + Lth_ResourceMap *rsrc = NULL; + + // Set up error handler. + if(setjmp(FontJmpBuf) == FontJmpBufToken) + { + if(font) Lth_FontDestroy((Lth_Font *)font); + if(rsrc) Lth_ResourceMapDestroy(rsrc); + + return NULL; + } + + rsrc = Lth_ManifestLoad_extern(fname); + + if(rsrc == NULL) + FontError("Couldn't load resource manifest."); + + FontValidate(rsrc); + + font = calloc(1, sizeof(Lth_Font)); + + if(font == NULL) + FontError("Failed to allocate font."); + + FontSetup(font, rsrc); + + Lth_ResourceMapDestroy(rsrc); + + return (Lth_Font *)font; +} + +// +// Lth_FontDestroy +// +void Lth_FontDestroy(Lth_Font *font) +{ + if(font == NULL) return; + + Lth_HashMapDestroy(&font->glyphs); + free(font->glyphV.data); + free(font); +} + +// EOF diff --git a/lithos_c/src/fontrun.c b/lithos_c/src/fontrun.c new file mode 100644 index 0000000..0df3259 --- /dev/null +++ b/lithos_c/src/fontrun.c @@ -0,0 +1,330 @@ +//----------------------------------------------------------------------------- +// +// Copyright © 2016 Project Golan +// +// See "LICENSE" for more information. +// +//----------------------------------------------------------------------------- +// +// Font rendering. +// +//----------------------------------------------------------------------------- + +#include "Lth.h" + +#include +#include +#include "Lth_stdfix.h" + +#define FontCheckASCII(rst) if((rst)->asciiPrint) FontRenderAPr((rst)) + + +// Type Definitions ----------------------------------------------------------| + +typedef struct FontRenderState +{ + Lth_Context *ctx; + Lth_Font *font; + bool asciiPrint; + _Accum ax, ay; + int x, y; + int tmpx; + int origx, origy; +} FontRenderState; + + +// Static Objects ------------------------------------------------------------| + +static Lth_Glyph FontReplacementGlyph = { + .fname = s"lithos_gfx/ReplacementCharacter.png", + .ch = 0xFFFD, + .mb = u8"�", + .w = 32, + .h = 32, + .s = -1 +}; + + +// Static Functions ----------------------------------------------------------| + +// +// ASCII Character +// Advance Line +// ASCII Print +// Advance Space +// Advance Tabulator +// Character +// Finish +// Glyph +// Return Line +// Wide Character +// +static void FontRenderACh(FontRenderState *rst, Lth_Glyph *glyph); +static void FontRenderALn(FontRenderState *rst); +static void FontRenderAPr(FontRenderState *rst); +static void FontRenderASp(FontRenderState *rst, int amt); +static void FontRenderATa(FontRenderState *rst); +static void FontRenderChr(FontRenderState *rst, wchar_t wc); +static void FontRenderFin(FontRenderState *rst); +static void FontRenderGly(FontRenderState *rst, Lth_Glyph *glyph); +static void FontRenderRLn(FontRenderState *rst); +static void FontRenderWCh(FontRenderState *rst, wchar_t wc, bool noascii); + +// +// FontRenderACh +// +static void FontRenderACh(FontRenderState *rst, Lth_Glyph *glyph) +{ + if(!rst->asciiPrint) + { + Lth_HudMessageBegin(); + rst->asciiPrint = true; + } + + rst->tmpx += glyph->w; + ACS_PrintChar(glyph->ch); + +#if Lth_DEBUG_FONTRUN + printf("ASCII_CHAR[%c] ", glyph->ch); +#endif +} + +// +// FontRenderALn +// +static void FontRenderALn(FontRenderState *rst) +{ + FontCheckASCII(rst); + + rst->y += rst->font->height; + +#if Lth_DEBUG_FONTRUN + printf("NEWLINE "); +#endif +} + +// +// FontRenderAPr +// +static void FontRenderAPr(FontRenderState *rst) +{ + rst->asciiPrint = false; + + if(rst->font->baseName) + { + _Accum x = rst->x + rst->ax; + _Accum y = rst->y + rst->ay; + +#if Lth_DEBUG_FONTRUN + printf("ASCII_PRINT[%.2k, %.2k] ", x, y); +#endif + + ACS_SetFont(rst->font->baseName); + Lth_HudMessageEnd(rst->ctx, x, y); + + rst->x += rst->tmpx; + rst->tmpx = 0; + } + else + { + __str s = ACS_EndStrParam(); + int len = ACS_StrLen(s); + + for(int i = 0; i < len; i++) + FontRenderWCh(rst, s[i], true); + } +} + +// +// FontRenderASp +// +static void FontRenderASp(FontRenderState *rst, int amt) +{ + FontCheckASCII(rst); + + rst->x += rst->font->spaceWidth * amt; + +#if Lth_DEBUG_FONTRUN + printf("SPACE[%i] ", amt); +#endif +} + +// +// FontRenderATa +// +static void FontRenderATa(FontRenderState *rst) +{ + FontCheckASCII(rst); + + int tabw = rst->font->spaceWidth * 8; + rst->x = Lth_ceilk(rst->x / (_Accum)tabw) * tabw; + +#if Lth_DEBUG_FONTRUN + printf("TABULATOR "); +#endif +} + +// +// FontRenderChr +// +static void FontRenderChr(FontRenderState *rst, wchar_t wc) +{ + switch(wc) + { + case L' ': FontRenderASp(rst, 1); break; + case 0x3000: FontRenderASp(rst, 2); break; + case L'\t': FontRenderATa(rst); break; + case L'\n': FontRenderALn(rst); + case L'\r': FontRenderRLn(rst); break; + default: FontRenderWCh(rst, wc, false); break; + } +} + +// +// FontRenderFin +// +static void FontRenderFin(FontRenderState *rst) +{ + FontCheckASCII(rst); + +#if Lth_DEBUG_FONTRUN + printf("DONE\n"); +#endif +} + +// +// FontRenderGly +// +static void FontRenderGly(FontRenderState *rst, Lth_Glyph *glyph) +{ + FontCheckASCII(rst); + + _Accum w = glyph->w; + + _Accum scale = 0; + + if(glyph->s != 0) + { + if(glyph->s < 0) scale = rst->font->height / (_Accum)glyph->h; + else scale = glyph->s; + + w *= scale; + } + + if(scale) + Lth_ContextScale(rst->ctx, scale); + + _Accum x = (rst->x + glyph->x) + rst->ax; + _Accum y = (rst->y + glyph->y) + rst->ax; + +#if Lth_DEBUG_FONTRUN + printf("GLYPH[%s][%.2k, %.2k] ", glyph->mb, x, y); +#endif + + Lth_DrawSprite(rst->ctx, glyph->fname, x, y); + + if(scale) + Lth_ContextScale(rst->ctx, 1); + + rst->x += w; +} + +// +// FontRenderRLn +// +static void FontRenderRLn(FontRenderState *rst) +{ + FontCheckASCII(rst); + + rst->x = rst->origx; + +#if Lth_DEBUG_FONTRUN + printf("RET_LINE "); +#endif +} + +// +// FontRenderWCh +// +static void FontRenderWCh(FontRenderState *rst, wchar_t wc, bool noascii) +{ + switch(rst->font->casing) + { + case Lth_Case_Both: default: break; + case Lth_Case_Uppr: if(wc >= L'a' && wc <= L'z') wc -= 0x20; break; + case Lth_Case_Lowr: if(wc >= L'A' && wc <= L'Z') wc += 0x20; break; + } + +#if Lth_DEBUG_FONTRUN + printf("CH "); +#endif + + Lth_Glyph *glyph = Lth_HashMapFind(&rst->font->glyphs, wc); + if(glyph == NULL) glyph = &FontReplacementGlyph; + + if(glyph->ch > 0x7F || noascii) FontRenderGly(rst, glyph); + else FontRenderACh(rst, glyph); +} + + +// Extern Functions ----------------------------------------------------------| + +// +// Lth_FontRunPlain +// +void Lth_FontRunPlain(Lth_Context *ctx, Lth_Font *font, int x, int y, + int ax, int ay) +{ + if(font == NULL) + { + ACS_EndStrParam(); + return; + } + + FontRenderState rst = { + .ctx = ctx, + .font = font, + .x = x, .y = y, + .origx = x, .origy = y + }; + + switch(ax) + { + default: case Lth_AX_Lef: rst.ax = 0.1k; break; + case Lth_AX_Rig: rst.ax = 0.2k; break; + case Lth_AX_Cen: rst.ax = 0.0k; break; + } + + switch(ay) + { + default: case Lth_AY_Top: rst.ay = 0.1k; break; + case Lth_AY_Bot: rst.ay = 0.2k; break; + case Lth_AY_Cen: rst.ay = 0.0k; break; + } + + char *str = Lth_strdup_str(ACS_EndStrParam()); + + Lth_WithMbState() + for(char const *sptr = str; *sptr;) + { + wchar_t wc; + int ret = mbrtowc(&wc, sptr, 4, &state); + +#if Lth_DEBUG_FONTRUN + printf("%i: ", ret); +#endif + + if(ret > 0) FontRenderChr(&rst, wc), sptr += ret; + else FontRenderGly(&rst, &FontReplacementGlyph), sptr += -ret; + +#if Lth_DEBUG_FONTRUN + printf("\n"); +#endif + } + + FontRenderFin(&rst); + + free(str); +} + +// EOF diff --git a/lithos_c/src/main.c b/lithos_c/src/main.c index c1e42b5..fbfced1 100644 --- a/lithos_c/src/main.c +++ b/lithos_c/src/main.c @@ -15,6 +15,8 @@ #include #include +#define Test_Text + // Static Functions ----------------------------------------------------------| @@ -23,28 +25,75 @@ static void main() { Lth_Context *ctx = Lth_ContextNew(320, 200, 0x5000, 0x1000); - Lth_ContextManifestLoad_extern(ctx, "lithos_fs/Base.lthm"); +#if defined(Test_Text) - ctx->mapspace.x = ctx->mapspace.y = 32; + char const *test = + u8" ɢ ᴜ ᴅ\n" + "ASCII test\n" + "!\"#$%&'()*+,-./0123456789:;<=>?@A\n" + "BCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\n\n" + "kanalang test\n" + "ァサラルコ(エワイホロア♥ツレカク\n" + "スノタヘチォメテケウョシヲーキマ\n" + "ドニリヤゥソムフミンィェト、セ\n" + "ュハユヒ。ャオモッヌ〜ヨ)ナネ\n\n" + "Spacing and missing character test\n" + "The quick b\trown fox jumps over\n" + "the lazy, ta\tbulated dog.ᴇᴇ\n\n" + "Iroha\n" + "色はにほへど 散りぬるを\n" + "我が世たれぞ 常ならむ・\n" + "有為の奥山  今日越えて\n" + "浅き夢見じ  酔ひもせず"; - Lth_Window *window[] = { - Lth_WindowNew("test window", -1, -1, 50, 100), - Lth_WindowNew("test window 2", -1, -1, 100, 100), - Lth_WindowNew("test window 3", -1, -1, 100, 30), - Lth_WindowNew("test window 4", -1, -1, 100, 100), - }; - - for(int i = 0; i < sizeof(window) / sizeof(*window); i++) - Lth_ContextMap(ctx, window[i]); - - ACS_Delay(1); + char const **defFont = Lth_ContextResource(ctx, "Base.DefaultFont"); + Lth_Font *font = Lth_FontNew(*defFont); for(;;) { Lth_ContextRun(ctx); + + Lth_FontRunBegin(); + Lth_PrintString(test); + Lth_FontRunPlain(ctx, font, 40, 20); + ACS_Delay(1); } +#elif defined(Test_Windowing) + + Lth_WindowManager *wm = Lth_WMNew(ctx); + + Lth_Window *window[] = { + Lth_WindowNew(ctx, "test window", -1, -1, 50, 100), + Lth_WindowNew(ctx, u8"テスト ウィンドー 2", -1, -1, 100, 100), + Lth_WindowNew(ctx, "test window 3", -1, -1, 100, 30), + Lth_WindowNew(ctx, "test window 4", -1, -1, 100, 100) + }; + + for(int i = 0; i < 4; i++) + Lth_WMMap(wm, window[i]); + + for(;;) + { + Lth_ContextRun(ctx); + Lth_ControlRun(wm); + ACS_Delay(1); + } + +#elif defined(Test_NoWM) + + Lth_Window *window = Lth_WindowNew(ctx, "test window", 20, 20, 100, 100); + + for(;;) + { + Lth_ContextRun(ctx); + Lth_ControlRun(window); + ACS_Delay(1); + } + +#endif + Lth_ContextDestroy(ctx); } diff --git a/lithos_c/src/manifest.c b/lithos_c/src/manifest.c index 4db033c..68e690a 100644 --- a/lithos_c/src/manifest.c +++ b/lithos_c/src/manifest.c @@ -315,7 +315,7 @@ void Lth_ResourceMapDestroy(Lth_ResourceMap *rsrc) { if(rsrc == NULL) return; - Lth_HashMapFree(&rsrc->map); + Lth_HashMapDestroy(&rsrc->map); if(rsrc->vecStrng.data) Lth_VectorForEach(char **, rsrc->vecStrng) diff --git a/lithos_c/src/window.c b/lithos_c/src/window.c index 485a44e..56699f4 100644 --- a/lithos_c/src/window.c +++ b/lithos_c/src/window.c @@ -15,30 +15,28 @@ #include -//----------------------------------------------------------------------------| -// Static Functions | -// +// Static Functions ----------------------------------------------------------| // // Lth_WindowDraw // static void Lth_WindowDraw(Lth_Window *ctrl) { - Lth_DrawRectAndClip(ctrl->ctx, ctrl->x, ctrl->y - 8, ctrl->w, 8, 0.35k); - ACS_SetFont(s"SMALLFNT"); - ACS_BeginPrint(); + Lth_DrawRectAndClip(ctrl->ctx, ctrl->x, ctrl->y, ctrl->w, 8, 0.35k); + + Lth_FontRunBegin(); Lth_PrintString(ctrl->title); - Lth_HudMessagePlain(ctrl->ctx->hid.cur--, - ctrl->x + Lth_A_Lef, - ctrl->y - 8 + Lth_A_Top); + Lth_ControlFontRunPlain(ctrl, ctrl->x, ctrl->y); + Lth_ContextClipPop(ctrl->ctx); - Lth_DrawRectAndClip(ctrl->ctx, ctrl->x, ctrl->y, ctrl->w, ctrl->h, 0.5k); + + Lth_DrawRectAndClip(ctrl->ctx, ctrl->x, ctrl->y + 8, ctrl->w, ctrl->h, 0.5k); } // -// Lth_WindowPostDraw +// Lth_WindowDrawPost // -static void Lth_WindowPostDraw(Lth_Window *ctrl) +static void Lth_WindowDrawPost(Lth_Window *ctrl) { Lth_ContextClipPop(ctrl->ctx); } @@ -58,20 +56,19 @@ static void Lth_WindowDestroy(Lth_Window *ctrl) // // Lth_WindowNew // -Lth_Window *Lth_WindowNew(char const *title, int x, int y, int w, int h) +Lth_Window *Lth_WindowNew(Lth_Context *ctx, char const *title, int x, int y, int w, int h) { - Lth_Window *ctrl = calloc(1, sizeof(Lth_Window)); - Lth_assert(ctrl != NULL); + Lth_ControlInit(Lth_Window); - ctrl->w = w; - ctrl->h = h; ctrl->x = x; ctrl->y = y; + ctrl->w = w; + ctrl->h = h; Lth_WindowSetTitle(ctrl, title); - Lth_ControlConnect(ctrl, Lth_SIGDRAW, Lth_Callback(Lth_WindowDraw)); - Lth_ControlConnect(ctrl, Lth_SIGPSTDRAW, Lth_Callback(Lth_WindowPostDraw)); - Lth_ControlConnect(ctrl, Lth_SIGDESTROY, Lth_Callback(Lth_WindowDestroy)); + Lth_ControlConnect(ctrl, Lth_SigDraw, Lth_Callback(Lth_WindowDraw)); + Lth_ControlConnect(ctrl, Lth_SigDrawPst, Lth_Callback(Lth_WindowDrawPost)); + Lth_ControlConnect(ctrl, Lth_SigDestroy, Lth_Callback(Lth_WindowDestroy)); return ctrl; } @@ -81,8 +78,6 @@ Lth_Window *Lth_WindowNew(char const *title, int x, int y, int w, int h) // void Lth_WindowSetTitle(Lth_Window *ctrl, char const *title) { - Lth_assert(ctrl != NULL); - if(title != NULL) ctrl->title = Lth_strdup(title); else diff --git a/lithos_c/src/winman.c b/lithos_c/src/winman.c new file mode 100644 index 0000000..016bb3f --- /dev/null +++ b/lithos_c/src/winman.c @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------------- +// +// Copyright © 2016 Project Golan +// +// See "LICENSE" for more information. +// +//----------------------------------------------------------------------------- +// +// Window management. +// +//----------------------------------------------------------------------------- + +#include "Lth.h" + + +// Static Functions ----------------------------------------------------------| + +// +// WMFont +// +static Lth_Font *WMFont(Lth_Control *ctrl) +{ + Lth_WindowManager *wm = Lth_VirtControl; + + if(wm->font == NULL) + { + char const **name = Lth_ContextResource(wm->ctx, "Base.DefaultFont"); + if(name != NULL) + wm->font = Lth_FontNew(*name); + } + + return wm->font; +} + + +// Extern Functions ----------------------------------------------------------| + +// +// Lth_WMNew +// +Lth_WindowManager *Lth_WMNew(Lth_Context *ctx) +{ + Lth_ControlInit(Lth_WindowManager); + + ctrl->vtable.getFont = WMFont; + + ctrl->lastmap.x = ctrl->lastmap.y = -1; + ctrl->mapspace.x = 24; + ctrl->mapspace.y = 16; + + return ctrl; +} + +// +// Lth_WMMap +// +void Lth_WMMap(Lth_WindowManager *wm, Lth_Window *ctrl) +{ + if(ctrl->x == -1) ctrl->x = wm->lastmap.x += wm->mapspace.x; + else wm->lastmap.x = ctrl->x; + + if(ctrl->y == -1) ctrl->y = wm->lastmap.y += wm->mapspace.y; + else wm->lastmap.y = ctrl->y; + + Lth_ControlAttachTail(wm, ctrl); +} + +// EOF diff --git a/lithos_fs/fonts/SmallFont.lthm b/lithos_fs/fonts/SmallFont.lthm new file mode 100644 index 0000000..517774a --- /dev/null +++ b/lithos_fs/fonts/SmallFont.lthm @@ -0,0 +1,119 @@ +//----------------------------------------------------------------------------- +// +// Copyright © 2016 Project Golan +// +// See "LICENSE" for more information. +// +//----------------------------------------------------------------------------- +// +// Default small font. +// +//----------------------------------------------------------------------------- + +[Font] + +// +// Base +// +// Base font for ASCII glyphs. +// If not supplied, all glyphs will be treated as Unicode. +// +Base = "SMALLFNT" + +// +// Case +// +// Case-sensitivity for font. +// If not supplied, defaults to Both +// +// Both +// Both upper and lower case supported. +// +// UpperOnly +// Any lower case characters printed will be converted to upper-case. +// +// LowerOnly +// Any upper case characters printed will be converted to lower-case. +// +Case = "UpperOnly" + +// +// Glyphs +// +// A list of all glyphs available in this font. +// +Glyphs = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_" + +// +// Height +// +// Required. +// +Height = 8 + +[Font.GlyphData] +"!_w"=4 +"\"_w"=7 +"#_w"=7 +"$_w"=7 +"%_w"=9 +"&_w"=8 +"'_w"=4 +"(_w"=7 +")_w"=7 +"*_w"=7 +"+_w"=5 +",_w"=4 +"-_w"=6 +"._w"=4 +"/_w"=7 +"0_w"=8 +"1_w"=5 +"2_w"=8 +"3_w"=8 +"4_w"=7 +"5_w"=7 +"6_w"=8 +"7_w"=8 +"8_w"=8 +"9_w"=8 +":_w"=4 +";_w"=4 +"<_w"=5 +"=_w"=5 +">_w"=5 +"?_w"=8 +"@_w"=9 +"A_w"=8 +"B_w"=8 +"C_w"=8 +"D_w"=8 +"E_w"=8 +"F_w"=8 +"G_w"=8 +"H_w"=8 +"I_w"=4 +"J_w"=8 +"K_w"=8 +"L_w"=8 +"M_w"=9 +"N_w"=8 +"O_w"=8 +"P_w"=8 +"Q_w"=8 +"R_w"=8 +"S_w"=7 +"T_w"=8 +"U_w"=8 +"V_w"=7 +"W_w"=9 +"X_w"=9 +"Y_w"=8 +"Z_w"=7 +"[_w"=5 +"\_w"=7 +"]_w"=5 +"^_w"=7 +"__w"=8 + +// EOF diff --git a/lithos_fs/fonts/SmallFontJP.lthm b/lithos_fs/fonts/SmallFontJP.lthm new file mode 100644 index 0000000..80cdb3f --- /dev/null +++ b/lithos_fs/fonts/SmallFontJP.lthm @@ -0,0 +1,274 @@ +//----------------------------------------------------------------------------- +// +// Copyright © 2016 Project Golan +// +// See "LICENSE" for more information. +// +//----------------------------------------------------------------------------- +// +// Default small font, with Japanese Katakana glyphs made by Toooooasty. +// +//----------------------------------------------------------------------------- + +[Font] + +// +// Base +// +// Base font for ASCII glyphs. +// If not supplied, all glyphs will be treated as Unicode. +// +Base = "SMALLFNT" + +// +// Case +// +// Case-sensitivity for font. +// If not supplied, defaults to Both +// +// Both +// Both upper and lower case supported. +// +// UpperOnly +// Any lower case characters printed will be converted to upper-case. +// +// LowerOnly +// Any upper case characters printed will be converted to lower-case. +// +Case = "UpperOnly" + +// +// ExtraDir +// +// Directory for Unicode glyphs. +// If not supplied, no Unicode glyphs will be loaded. +// +ExtraDir = "fonts/SmallFont" + +// +// Suffix +// +// Filename suffix for Unicode glyphs. +// If not supplied, defaults to ".png". +// +Suffix = ".png" + +// +// Type +// +// Filename suffix type for Unicode glyphs. +// If not supplied, defaults to Character. +// +// Character +// Takes the glyph as the suffix. +// Example: た = fonts/SmallFont/STCFNた.png +// +// Codepoint +// Takes the glyph's codepoint as the suffix. +// Example: た = fonts/SmallFont/STCFN305F.png +// +// Digit +// Takes the glyph's base-10 codepoint as the suffix. +// Example: た = fonts/SmallFont/STCFN12383.png +// +Type = "Character" + +// +// Glyphs +// +// A list of all glyphs available in this font. +// +Glyphs = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_" + "ンえョのコドトにイハシォナウッは)ツどてリた" + "カルなゥヒマらサ、ミタエオモれほヌきメホキじテ" + "るク♥ュィぬセ。ずノニヨユへァ(ーが・ャラを" + "ヘせヤレネりワロソヲもェスチむフひアケ" + "〜ぞム世今夢奥山常我散日有浅為色見越酔ɢᴜ" + +// +// SpaceWidth +// +// If not supplied, defaults to 4. +// +SpaceWidth = 4 + +// +// Height +// +// Required. +// +Height = 8 + +[Font.GlyphData] +"!_w"=4 +"\"_w"=7 +"#_w"=7 +"$_w"=7 +"%_w"=9 +"&_w"=8 +"'_w"=4 +"(_w"=7 +")_w"=7 +"*_w"=7 +"+_w"=5 +",_w"=4 +"-_w"=6 +"._w"=4 +"/_w"=7 +"0_w"=8 +"1_w"=5 +"2_w"=8 +"3_w"=8 +"4_w"=7 +"5_w"=7 +"6_w"=8 +"7_w"=8 +"8_w"=8 +"9_w"=8 +":_w"=4 +";_w"=4 +"<_w"=5 +"=_w"=5 +">_w"=5 +"?_w"=8 +"@_w"=9 +"A_w"=8 +"B_w"=8 +"C_w"=8 +"D_w"=8 +"E_w"=8 +"F_w"=8 +"G_w"=8 +"H_w"=8 +"I_w"=4 +"J_w"=8 +"K_w"=8 +"L_w"=8 +"M_w"=9 +"N_w"=8 +"O_w"=8 +"P_w"=8 +"Q_w"=8 +"R_w"=8 +"S_w"=7 +"T_w"=8 +"U_w"=8 +"V_w"=7 +"W_w"=9 +"X_w"=9 +"Y_w"=8 +"Z_w"=7 +"[_w"=5 +"\_w"=7 +"]_w"=5 +"^_w"=7 +"__w"=8 +"ン_w"=8 +"え_w"=32;"え_h"=32;"え_s"=-1 +"ョ_w"=8 +"の_w"=32;"の_h"=32;"の_s"=-1 +"コ_w"=8 +"ド_w"=8 +"ト_w"=8 +"に_w"=32;"に_h"=32;"に_s"=-1 +"イ_w"=8 +"ハ_w"=8 +"シ_w"=8 +"ォ_w"=8 +"ナ_w"=8 +"ウ_w"=8 +"ッ_w"=8 +"は_w"=32;"は_h"=32;"は_s"=-1 +")_w"=8 +"ツ_w"=8 +"ど_w"=32;"ど_h"=32;"ど_s"=-1 +"て_w"=32;"て_h"=32;"て_s"=-1 +"リ_w"=8 +"た_w"=32;"た_h"=32;"た_s"=-1 +"カ_w"=8 +"ル_w"=8 +"な_w"=32;"な_h"=32;"な_s"=-1 +"ゥ_w"=8 +"ヒ_w"=8 +"マ_w"=8 +"ら_w"=32;"ら_h"=32;"ら_s"=-1 +"サ_w"=8 +"、_w"=8 +"ミ_w"=8 +"タ_w"=8 +"エ_w"=8 +"オ_w"=8 +"モ_w"=8 +"れ_w"=32;"れ_h"=32;"れ_s"=-1 +"ほ_w"=32;"ほ_h"=32;"ほ_s"=-1 +"ヌ_w"=8 +"き_w"=32;"き_h"=32;"き_s"=-1 +"メ_w"=8 +"ホ_w"=8 +"キ_w"=8 +"じ_w"=32;"じ_h"=32;"じ_s"=-1 +"テ_w"=8 +"る_w"=32;"る_h"=32;"る_s"=-1 +"ク_w"=8 +"♥_w"=8 +"ュ_w"=8 +"ィ_w"=8 +"ぬ_w"=32;"ぬ_h"=32;"ぬ_s"=-1 +"セ_w"=8 +"。_w"=8 +"ず_w"=32;"ず_h"=32;"ず_s"=-1 +"ノ_w"=8 +"ニ_w"=8 +"ヨ_w"=8 +"ユ_w"=8 +"へ_w"=32;"へ_h"=32;"へ_s"=-1 +"ァ_w"=8 +"(_w"=8 +"ー_w"=8 +"が_w"=32;"が_h"=32;"が_s"=-1 +"・_w"=32;"・_h"=32;"・_s"=-1 +"ャ_w"=8 +"ラ_w"=8 +"を_w"=32;"を_h"=32;"を_s"=-1 +"ヘ_w"=8 +"せ_w"=32;"せ_h"=32;"せ_s"=-1 +"ヤ_w"=8 +"レ_w"=8 +"ネ_w"=8 +"り_w"=32;"り_h"=32;"り_s"=-1 +"ワ_w"=8 +"ロ_w"=8 +"ソ_w"=8 +"ヲ_w"=8 +"も_w"=32;"も_h"=32;"も_s"=-1 +"ェ_w"=8 +"ス_w"=8 +"チ_w"=8 +"む_w"=32;"む_h"=32;"む_s"=-1 +"フ_w"=8 +"ひ_w"=32;"ひ_h"=32;"ひ_s"=-1 +"ア_w"=8 +"ケ_w"=8 +"〜_w"=8 +"ぞ_w"=32;"ぞ_h"=32;"ぞ_s"=-1 +"ム_w"=8 +"世_w"=32;"世_h"=32;"世_s"=-1 +"今_w"=32;"今_h"=32;"今_s"=-1 +"夢_w"=32;"夢_h"=32;"夢_s"=-1 +"奥_w"=32;"奥_h"=32;"奥_s"=-1 +"山_w"=32;"山_h"=32;"山_s"=-1 +"常_w"=32;"常_h"=32;"常_s"=-1 +"我_w"=32;"我_h"=32;"我_s"=-1 +"散_w"=32;"散_h"=32;"散_s"=-1 +"日_w"=32;"日_h"=32;"日_s"=-1 +"有_w"=32;"有_h"=32;"有_s"=-1 +"浅_w"=32;"浅_h"=32;"浅_s"=-1 +"為_w"=32;"為_h"=32;"為_s"=-1 +"色_w"=32;"色_h"=32;"色_s"=-1 +"見_w"=32;"見_h"=32;"見_s"=-1 +"越_w"=32;"越_h"=32;"越_s"=-1 +"酔_w"=32;"酔_h"=32;"酔_s"=-1 +"ɢ_w"=32;"ɢ_h"=32;"ɢ_s"=-1 +"ᴜ_w"=43;"ᴜ_h"=28;"ᴜ_s"=-1 + +// EOF diff --git a/lithos_gfx/ReplacementCharacter.png b/lithos_gfx/ReplacementCharacter.png new file mode 100644 index 0000000000000000000000000000000000000000..a8753fa2a92318284bf7c7ae4f955aa9ce3c3fe0 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^*Hqo~dLWyD;s1YzpS>n$ zfGoz6AirP+hi5m^fSd+T7sn8Z%dQhP@*Ys&VOcxnUQ45liqx&1iK>?_8wf4FaQwV_ zTiaxdC-vPOGTT37{8osS|8nSeg`d|f_N5`}OXJcP20fp2<&}vCC&Nl+E|CWBEQaZm zBITY1sZZhkxTK}+J>QInLLxl|(aIth!g_3GeC6M^*zLy(Vb=1e5r?8qbDuVIs=Xim Q)Cc57Pgg&ebxsLQ07$n`egFUf literal 0 HcmV?d00001