diff --git a/CHANGELOG.md b/CHANGELOG.md index 2841dab..11d63e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,129 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog], and this project adheres to [Semantic Versioning]. +## [1.26.0] + +The 2025 update! Big thanks to [bluetoad07 for fixing the Kana!](https://github.com/slavfox/Cozette/pull/136) + +### Added + +- ▕ (U+2595 RIGHT ONE EIGHTH BLOCK) +-  (U+EA76) +-  (U+F007) +-  (U+F0A8) +-  (U+F0A9) +-  (U+F0AA) +-  (U+F0AB) +-  (U+F128) +-  (U+F1AE) +-  (U+F322) +- 📌 (U+1F4CC PUSHPIN) +- 󰁌 (U+F004C) +- 󰁹 (U+F0079) +- 󰁺 (U+F007A) +- 󰁻 (U+F007B) +- 󰁼 (U+F007C) +- 󰁽 (U+F007D) +- 󰁾 (U+F007E) +- 󰁿 (U+F007F) +- 󰂀 (U+F0080) +- 󰂁 (U+F0081) +- 󰂂 (U+F0082) +- 󰂃 (U+F0083) +- 󰂄 (U+F0084) +- 󰂅 (U+F0085) +- 󰂆 (U+F0086) +- 󰂇 (U+F0087) +- 󰂈 (U+F0088) +- 󰂉 (U+F0089) +- 󰂊 (U+F008A) +- 󰂋 (U+F008B) +- 󰂌 (U+F008C) +- 󰂍 (U+F008D) +- 󰂎 (U+F008E) +- 󰂏 (U+F008F) +- 󰂐 (U+F0090) +- 󰂑 (U+F0091) +- 󰂚 (U+F009A) +- 󰂛 (U+F009B) +- 󰂜 (U+F009C) +- 󰂝 (U+F009D) +- 󰂞 (U+F009E) +- 󰂟 (U+F009F) +- 󰂠 (U+F00A0) +- 󰂤 (U+F00A4) +- 󰂾 (U+F00BE) +- 󰃀 (U+F00C0) +- 󰃁 (U+F00C1) +- 󰃂 (U+F00C2) +- 󰃃 (U+F00C3) +- 󰃄 (U+F00C4) +- 󰃅 (U+F00C5) +- 󰃆 (U+F00C6) +- 󰃰 (U+F00F0) +- 󰊚 (U+F029A) +- 󰊢 (U+F02A2) +- 󰒋 (U+F048B) +- 󰔟 (U+F051F) +- 󰖯 (U+F05AF) +- 󰖰 (U+F05B0) +- 󰚥 (U+F06A5) +- 󱃾 (U+F10FE) +- 󱅫 (U+F116B) +- 󱈑 (U+F1211) + +### Changed + +- ぉ (U+3049 HIRAGANA LETTER SMALL O) +- き (U+304D HIRAGANA LETTER KI) +- ぎ (U+304E HIRAGANA LETTER GI) +- け (U+3051 HIRAGANA LETTER KE) +- げ (U+3052 HIRAGANA LETTER GE) +- こ (U+3053 HIRAGANA LETTER KO) +- ご (U+3054 HIRAGANA LETTER GO) +- せ (U+305B HIRAGANA LETTER SE) +- ぜ (U+305C HIRAGANA LETTER ZE) +- そ (U+305D HIRAGANA LETTER SO) +- ぞ (U+305E HIRAGANA LETTER ZO) +- た (U+305F HIRAGANA LETTER TA) +- だ (U+3060 HIRAGANA LETTER DA) +- ち (U+3061 HIRAGANA LETTER TI) +- ぢ (U+3062 HIRAGANA LETTER DI) +- っ (U+3063 HIRAGANA LETTER SMALL TU) +- つ (U+3064 HIRAGANA LETTER TU) +- づ (U+3065 HIRAGANA LETTER DU) +- な (U+306A HIRAGANA LETTER NA) +- に (U+306B HIRAGANA LETTER NI) +- ね (U+306D HIRAGANA LETTER NE) +- ひ (U+3072 HIRAGANA LETTER HI) +- び (U+3073 HIRAGANA LETTER BI) +- ぴ (U+3074 HIRAGANA LETTER PI) +- ま (U+307E HIRAGANA LETTER MA) +- み (U+307F HIRAGANA LETTER MI) +- ゃ (U+3083 HIRAGANA LETTER SMALL YA) +- や (U+3084 HIRAGANA LETTER YA) +- ゅ (U+3085 HIRAGANA LETTER SMALL YU) +- ゆ (U+3086 HIRAGANA LETTER YU) +- れ (U+308C HIRAGANA LETTER RE) +- ん (U+3093 HIRAGANA LETTER N) +- ゕ (U+3095 HIRAGANA LETTER SMALL KA) +- ゖ (U+3096 HIRAGANA LETTER SMALL KE) +- ウ (U+30A6 KATAKANA LETTER U) +- カ (U+30AB KATAKANA LETTER KA) +- ガ (U+30AC KATAKANA LETTER GA) +- ス (U+30B9 KATAKANA LETTER SU) +- ズ (U+30BA KATAKANA LETTER ZU) +- ソ (U+30BD KATAKANA LETTER SO) +- ゾ (U+30BE KATAKANA LETTER ZO) +- ッ (U+30C3 KATAKANA LETTER SMALL TU) +- ミ (U+30DF KATAKANA LETTER MI) +- ラ (U+30E9 KATAKANA LETTER RA) +- ワ (U+30EF KATAKANA LETTER WA) +- ン (U+30F3 KATAKANA LETTER N) +- ヴ (U+30F4 KATAKANA LETTER VU) +- ヵ (U+30F5 KATAKANA LETTER SMALL KA) +- ー (U+30FC KATAKANA-HIRAGANA PROLONGED SOUND MARK) + ## [1.25.2] ### Added @@ -2911,8 +3034,9 @@ Still broken on Windows. [keep a changelog]: https://keepachangelog.com/en/1.0.0/ [semantic versioning]: https://semver.org/spec/v2.0.0.html -[unreleased]: https://github.com/slavfox/Cozette/compare/v.1.25.2...HEAD -[1.25.1]: https://github.com/slavfox/Cozette/compare/v.1.25.1...v.1.25.2 +[unreleased]: https://github.com/slavfox/Cozette/compare/v.1.26.0...HEAD +[1.26.0]: https://github.com/slavfox/Cozette/compare/v.1.25.2...v.1.26.0 +[1.25.2]: https://github.com/slavfox/Cozette/compare/v.1.25.1...v.1.25.2 [1.25.1]: https://github.com/slavfox/Cozette/compare/v.1.25.0...v.1.25.1 [1.25.0]: https://github.com/slavfox/Cozette/compare/v.1.24.1...v.1.25.0 [1.24.1]: https://github.com/slavfox/Cozette/compare/v.1.24.0...v.1.24.1 diff --git a/Cozette/Cozette.sfd b/Cozette/Cozette.sfd index 16c8ea9..d905ffd 100644 --- a/Cozette/Cozette.sfd +++ b/Cozette/Cozette.sfd @@ -22,7 +22,7 @@ OS2Version: 1 OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 0 CreationTime: -2082812035 -ModificationTime: 1729195911 +ModificationTime: 1735602132 PfmFamily: 49 TTFWeight: 500 TTFWidth: 5 @@ -120,11 +120,11 @@ DisplaySize: 13 AntiAlias: 1 FitToEm: 0 WidthSeparation: 307 -WinInfo: 12354 29 17 +WinInfo: 0 16 12 BeginPrivate: 0 EndPrivate TeXData: 1 0 0 524288 262144 174762 0 -1048576 174762 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144 -BeginChars: 1114112 3536 +BeginChars: 1114112 3597 StartChar: uni0000 Encoding: 0 0 0 @@ -30704,8 +30704,435 @@ Width: 1024 Flags: HW LayerCount: 2 EndChar + +StartChar: uniF007 +Encoding: 61447 61447 3536 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uniF1AE +Encoding: 61870 61870 3537 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF004C +Encoding: 983116 983116 3538 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0079 +Encoding: 983161 983161 3539 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF007A +Encoding: 983162 983162 3540 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF007B +Encoding: 983163 983163 3541 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF007C +Encoding: 983164 983164 3542 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF007D +Encoding: 983165 983165 3543 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF007E +Encoding: 983166 983166 3544 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF007F +Encoding: 983167 983167 3545 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0080 +Encoding: 983168 983168 3546 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0081 +Encoding: 983169 983169 3547 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0082 +Encoding: 983170 983170 3548 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0083 +Encoding: 983171 983171 3549 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0084 +Encoding: 983172 983172 3550 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF008E +Encoding: 983182 983182 3551 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0085 +Encoding: 983173 983173 3552 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0086 +Encoding: 983174 983174 3553 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0087 +Encoding: 983175 983175 3554 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0088 +Encoding: 983176 983176 3555 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0089 +Encoding: 983177 983177 3556 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF008A +Encoding: 983178 983178 3557 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF008B +Encoding: 983179 983179 3558 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF008C +Encoding: 983180 983180 3559 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF008D +Encoding: 983181 983181 3560 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF008F +Encoding: 983183 983183 3561 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0090 +Encoding: 983184 983184 3562 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF0091 +Encoding: 983185 983185 3563 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF009A +Encoding: 983194 983194 3564 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF009B +Encoding: 983195 983195 3565 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF009C +Encoding: 983196 983196 3566 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF009D +Encoding: 983197 983197 3567 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF009E +Encoding: 983198 983198 3568 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF009F +Encoding: 983199 983199 3569 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF00A0 +Encoding: 983200 983200 3570 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF00C0 +Encoding: 983232 983232 3571 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF00C1 +Encoding: 983233 983233 3572 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF00C2 +Encoding: 983234 983234 3573 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF00C3 +Encoding: 983235 983235 3574 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF00C4 +Encoding: 983236 983236 3575 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF00C5 +Encoding: 983237 983237 3576 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF00C6 +Encoding: 983238 983238 3577 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF00F0 +Encoding: 983280 983280 3578 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF029A +Encoding: 983706 983706 3579 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF02A2 +Encoding: 983714 983714 3580 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF048B +Encoding: 984203 984203 3581 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF051F +Encoding: 984351 984351 3582 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF05AF +Encoding: 984495 984495 3583 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF05B0 +Encoding: 984496 984496 3584 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF06A5 +Encoding: 984741 984741 3585 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF10FE +Encoding: 987390 987390 3586 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF116B +Encoding: 987499 987499 3587 +Width: 945 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uF1211 +Encoding: 987665 987665 3588 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uni2595 +Encoding: 9621 9621 3589 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uniEA76 +Encoding: 60022 60022 3590 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uniF0A9 +Encoding: 61609 61609 3591 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uniF0A8 +Encoding: 61608 61608 3592 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uniF0AA +Encoding: 61610 61610 3593 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uniF0AB +Encoding: 61611 61611 3594 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uniF128 +Encoding: 61736 61736 3595 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: u1F4CC +Encoding: 128204 128204 3596 +Width: 1890 +Flags: HW +LayerCount: 2 +EndChar EndChars -BitmapFont: 13 3537 10 3 1 +BitmapFont: 13 3601 10 3 1 BDFStartProperties: 42 FONT 1 "-slavfox-Cozette-Medium-R-Normal--13-120-75-75-M-60-ISO10646-1" COMMENT 0 "(c) 2020-2024 Slavfox" @@ -37823,6 +38250,134 @@ BDFChar: 3534 120399 6 1 6 0 6 r;86&?sm@B BDFChar: 3535 128498 6 1 5 0 6 &7E:m(be2T +BDFChar: -1 62242 6 0 0 0 0 +z +BDFChar: 3536 61447 6 0 5 0 7 +0R.gr!-nG> +BDFChar: 3537 61870 6 1 5 -1 7 ++E/G'E;4BK:]LIq +BDFChar: 3538 983116 6 0 6 0 6 +m`)7,WlFH, +BDFChar: 3539 983161 6 0 5 -2 9 +Gl7L;r;?Kjr;?Kj +BDFChar: 3540 983162 6 0 5 -2 9 +Gg(hoKS5#3KS9:$ +BDFChar: 3541 983163 6 0 5 -2 9 +Gg(hoKS5#3K`(cG +BDFChar: 3542 983164 6 0 5 -2 9 +Gg(hoKS5#3r;?Kj +BDFChar: 3543 983165 6 0 5 -2 9 +Gg(hoKS5$Vr;?Kj +BDFChar: 3544 983166 6 0 5 -2 9 +Gg(hoKS9:$r;?Kj +BDFChar: 3545 983167 6 0 5 -2 9 +Gg(hoK`(cGr;?Kj +BDFChar: 3546 983168 6 0 5 -2 9 +Gg(hor;?Kjr;?Kj +BDFChar: 3547 983169 6 0 5 -2 9 +Gg(j=r;?Kjr;?Kj +BDFChar: 3548 983170 6 0 5 -2 9 +Gg-*`r;?Kjr;?Kj +BDFChar: 3549 983171 6 0 5 -2 9 +Gl5e0bfn +BDFChar: 3553 983174 6 0 6 -2 9 +@$$J3P*D8qP`YD( +BDFChar: 3554 983175 6 0 6 -2 9 +@$$J3P*D8qPjn23 +BDFChar: 3555 983176 6 0 6 -2 9 +@$$J3P*D8qo^MA> +BDFChar: 3556 983177 6 0 6 -2 9 +@$$J3P*G\2o^MA> +BDFChar: 3557 983178 6 0 6 -2 9 +@$$J3o(;YHo^MA> +BDFChar: 3558 983179 6 0 6 -2 9 +@$'mIo(;YHo^MA> +BDFChar: 3559 983180 6 0 5 -2 9 +Gl7L;r.Kb$r;?Kj +BDFChar: 3560 983181 6 0 6 -2 9 +@$$J3OHB2*nF5r: +BDFChar: 3561 983183 6 0 5 -2 9 +Gl7L;b_1Ynr;?Kj +BDFChar: 3562 983184 6 0 6 -2 9 +@$$J3OHfb:nF5r: +BDFChar: 3563 983185 6 0 5 -2 9 +Gl5dmoZZ+Gr7q5J +BDFChar: 3564 983194 6 0 6 -1 6 +&3,&bI!ko) +BDFChar: 3565 983195 6 0 6 -1 6 +&@bsr<+tn: +BDFChar: 3566 983196 6 0 6 -1 6 +&1Bq76q%"c +BDFChar: 3567 983197 6 0 6 -1 6 +&3,&R6u;i6 +BDFChar: 3568 983198 6 0 6 -1 7 +7$>-/I!g>@&-)\1 +BDFChar: -1 983230 6 0 0 0 0 +z +BDFChar: 3569 983199 6 0 6 -1 7 +7$=Q<6psHB&-)\1 +BDFChar: 3570 983200 6 0 6 -1 6 +&3*'g9LSjk +BDFChar: 3571 983232 6 1 5 -1 7 +q"XXZq"XX:L]@DT +BDFChar: 3572 983233 6 1 5 -1 7 +q"X@B=Le.YL]@DT +BDFChar: 3573 983234 6 1 5 -1 7 +prM+?R$d[$L]@DT +BDFChar: 3574 983235 6 1 5 -1 7 +pkX`^Lo@9)L]@DT +BDFChar: 3575 983236 6 1 5 -1 7 +pkYmDW/.D)L]@DT +BDFChar: 3576 983237 6 1 5 -1 7 +q"WKtf_G6oL]@DT +BDFChar: 3577 983238 6 1 5 -1 7 +q"Uf?W;-/?L]@DT +BDFChar: 3578 983280 6 0 6 -1 7 +7(WALS>tj$)uos= +BDFChar: 3579 983706 6 0 6 0 6 +3(/@UP'f4h +BDFChar: 3580 983714 6 0 6 0 6 +&1D)SCcDt+ +BDFChar: 3581 984203 6 0 6 -2 8 +reg[Treg[Treg[T +BDFChar: 3582 984351 6 0 6 -1 8 +rdq^\-n%K8K)P`M +BDFChar: 3583 984495 6 0 6 0 6 +rr.M$JqEt% +BDFChar: 3584 984496 6 0 6 3 4 +rr)lt +BDFChar: 3585 984741 6 0 5 -1 7 +84Z;Lr;:dn0E;(Q +BDFChar: 3586 987390 6 0 6 0 6 +I&b2L`n#M; +BDFChar: 3587 987499 6 0 6 -1 6 +'J=KPI!ko) +BDFChar: 3588 987665 6 0 5 -2 9 +Gl7L;e:>L(r;?Kj +BDFChar: 3589 9621 6 6 6 -3 9 +J:N0#J:N0#J:N0#J,fQL +BDFChar: 3590 60022 6 1 5 1 5 +Leo3jL]@DT +BDFChar: 3591 61609 6 0 6 0 6 +3,J;?p1u\g +BDFChar: 3592 61608 6 0 6 0 6 +3,IH'hJ>.O +BDFChar: 3593 61610 6 0 6 0 6 +3,HU7mVFi_ +BDFChar: 3594 61611 6 0 6 0 6 +3,J#_`b[U7 +BDFChar: 3595 61736 6 1 5 -1 7 +E/9;U0H_J<+92BA +BDFChar: 3596 128204 12 1 10 -1 8 +!WW<&#CnJCIfMY4)uqSk6i_`; BDFRefChar: 1999 1944 0 0 N BDFRefChar: 2000 1943 0 0 N BDFRefChar: 2001 1941 0 0 N diff --git a/Cozette/variants/CozetteCrossedSeven.sfd b/Cozette/variants/CozetteCrossedSeven.sfd new file mode 100644 index 0000000..58c7668 --- /dev/null +++ b/Cozette/variants/CozetteCrossedSeven.sfd @@ -0,0 +1,214 @@ +SplineFontDB: 3.2 +FontName: Cozette +FullName: Cozette +FamilyName: Cozette +Weight: Medium +Copyright: (c) 2020-2024 Slavfox +Version: 1.252 +ItalicAngle: 0 +UnderlinePosition: -100 +UnderlineWidth: 50 +Ascent: 1575 +Descent: 473 +InvalidEm: 0 +sfntRevision: 0x00010000 +LayerCount: 2 +Layer: 0 0 "Back" 1 +Layer: 1 0 "Fore" 0 +XUID: [1021 693 57709195 13213585] +StyleMap: 0x0040 +FSType: 0 +OS2Version: 1 +OS2_WeightWidthSlopeOnly: 0 +OS2_UseTypoMetrics: 0 +CreationTime: -2082812035 +ModificationTime: 1735604900 +PfmFamily: 49 +TTFWeight: 500 +TTFWidth: 5 +LineGap: 102 +VLineGap: 0 +Panose: 0 0 0 9 0 0 0 0 0 0 +OS2TypoAscent: 1655 +OS2TypoAOffset: 0 +OS2TypoDescent: 472 +OS2TypoDOffset: 0 +OS2TypoLinegap: 2127 +OS2WinAscent: 1655 +OS2WinAOffset: 0 +OS2WinDescent: 472 +OS2WinDOffset: 0 +HheadAscent: 1655 +HheadAOffset: 0 +HheadDescent: -472 +HheadDOffset: 0 +OS2SubXSize: 409 +OS2SubYSize: 409 +OS2SubXOff: 0 +OS2SubYOff: 409 +OS2SupXSize: 409 +OS2SupYSize: 409 +OS2SupXOff: 0 +OS2SupYOff: 409 +OS2StrikeYSize: 2048 +OS2StrikeYPos: 512 +OS2Vendor: 'UNKN' +MarkAttachClasses: 1 +DEI: 91125 +LangName: 1033 "" "" "" "" "" "" "" "" "" "" "" "" "" "Copyright (c) 2020 Slavfox +AAoACgAA-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the +ACIA-Software+ACIA), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:+AAoACgAA-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.+AAoACgAA-THE SOFTWARE IS PROVIDED +ACIA-AS IS+ACIA, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." "https://opensource.org/licenses/MIT" +MATH:ScriptPercentScaleDown: 80 +MATH:ScriptScriptPercentScaleDown: 60 +MATH:DelimitedSubFormulaMinHeight: 3072 +MATH:DisplayOperatorMinHeight: 0 +MATH:MathLeading: 0 +MATH:AxisHeight: 0 +MATH:AccentBaseHeight: 0 +MATH:FlattenedAccentBaseHeight: 0 +MATH:SubscriptShiftDown: 409 +MATH:SubscriptTopMax: 0 +MATH:SubscriptBaselineDropMin: 0 +MATH:SuperscriptShiftUp: 409 +MATH:SuperscriptShiftUpCramped: 0 +MATH:SuperscriptBottomMin: 0 +MATH:SuperscriptBaselineDropMax: 0 +MATH:SubSuperscriptGapMin: 200 +MATH:SuperscriptBottomMaxWithSubscript: 0 +MATH:SpaceAfterScript: 85 +MATH:UpperLimitGapMin: 0 +MATH:UpperLimitBaselineRiseMin: 0 +MATH:LowerLimitGapMin: 0 +MATH:LowerLimitBaselineDropMin: 0 +MATH:StackTopShiftUp: 0 +MATH:StackTopDisplayStyleShiftUp: 0 +MATH:StackBottomShiftDown: 0 +MATH:StackBottomDisplayStyleShiftDown: 0 +MATH:StackGapMin: 150 +MATH:StackDisplayStyleGapMin: 350 +MATH:StretchStackTopShiftUp: 0 +MATH:StretchStackBottomShiftDown: 0 +MATH:StretchStackGapAboveMin: 0 +MATH:StretchStackGapBelowMin: 0 +MATH:FractionNumeratorShiftUp: 0 +MATH:FractionNumeratorDisplayStyleShiftUp: 0 +MATH:FractionDenominatorShiftDown: 0 +MATH:FractionDenominatorDisplayStyleShiftDown: 0 +MATH:FractionNumeratorGapMin: 50 +MATH:FractionNumeratorDisplayStyleGapMin: 150 +MATH:FractionRuleThickness: 50 +MATH:FractionDenominatorGapMin: 50 +MATH:FractionDenominatorDisplayStyleGapMin: 150 +MATH:SkewedFractionHorizontalGap: 0 +MATH:SkewedFractionVerticalGap: 0 +MATH:OverbarVerticalGap: 150 +MATH:OverbarRuleThickness: 50 +MATH:OverbarExtraAscender: 50 +MATH:UnderbarVerticalGap: 150 +MATH:UnderbarRuleThickness: 50 +MATH:UnderbarExtraDescender: 50 +MATH:RadicalVerticalGap: 50 +MATH:RadicalDisplayStyleVerticalGap: 50 +MATH:RadicalRuleThickness: 50 +MATH:RadicalExtraAscender: 50 +MATH:RadicalKernBeforeDegree: 568 +MATH:RadicalKernAfterDegree: -1137 +MATH:RadicalDegreeBottomRaisePercent: 60 +MATH:MinConnectorOverlap: 40 +Encoding: UnicodeFull +UnicodeInterp: none +NameList: AGL with PUA +DisplaySize: 13 +AntiAlias: 1 +FitToEm: 0 +WidthSeparation: 307 +WinInfo: 0 16 12 +BeginPrivate: 0 +EndPrivate +TeXData: 1 0 0 524288 262144 174762 0 -1048576 174762 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144 +BeginChars: 1114112 4 + +StartChar: seven +Encoding: 55 55 0 +Width: 1024 +Flags: W +LayerCount: 2 +Fore +Validated: 1 +EndChar + +StartChar: uni2077 +Encoding: 8311 8311 1 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uni2087 +Encoding: 8327 8327 2 +Width: 1024 +Flags: HW +LayerCount: 2 +EndChar + +StartChar: uniFF17 +Encoding: 65303 65303 3 +Width: 1890 +Flags: HW +LayerCount: 2 +EndChar +EndChars +BitmapFont: 13 3599 10 3 1 +BDFStartProperties: 42 +FONT 1 "-slavfox-Cozette-Medium-R-Normal--13-120-75-75-M-60-ISO10646-1" +COMMENT 0 "(c) 2020-2024 Slavfox" +FOUNDRY 16 "slavfox" +FAMILY_NAME 16 "Cozette" +WEIGHT_NAME 16 "Medium" +SLANT 16 "R" +SETWIDTH_NAME 16 "Normal" +ADD_STYLE_NAME 16 "" +PIXEL_SIZE 18 13 +POINT_SIZE 18 120 +RESOLUTION_X 19 75 +RESOLUTION_Y 19 75 +SPACING 16 "M" +AVERAGE_WIDTH 18 60 +CHARSET_REGISTRY 16 "ISO10646" +CHARSET_ENCODING 16 "1" +FONTNAME_REGISTRY 16 "" +FONT_NAME 16 "Cozette" +FACE_NAME 16 "Cozette" +COPYRIGHT 16 "(c) 2020-2024 Slavfox" +FONT_VERSION 16 "1.252" +FONT_ASCENT 18 10 +FONT_DESCENT 18 3 +UNDERLINE_POSITION 18 -19 +UNDERLINE_THICKNESS 18 13 +X_HEIGHT 18 5 +CAP_HEIGHT 18 7 +DEFAULT_CHAR 19 0 +RAW_ASCENT 18 769 +RAW_DESCENT 18 230 +NORM_SPACE 18 6 +RELATIVE_WEIGHT 19 50 +RELATIVE_SETWIDTH 19 50 +SUPERSCRIPT_X 18 0 +SUPERSCRIPT_Y 18 2 +SUPERSCRIPT_SIZE 18 2 +SUBSCRIPT_X 18 0 +SUBSCRIPT_Y 18 2 +SUBSCRIPT_SIZE 18 2 +FIGURE_WIDTH 18 6 +AVG_LOWERCASE_WIDTH 18 60 +AVG_UPPERCASE_WIDTH 18 60 +BDFEndProperties +Resolution: 75 +BDFChar: 0 55 6 1 5 0 7 +p]qERGT]7: +BDFChar: 1 8311 6 1 4 4 8 +n.=MC5QCca +BDFChar: 2 8327 6 1 4 -2 2 +n.=MC5QCca +BDFChar: 3 65303 12 4 8 0 7 +p]qERGT]7: +EndBitmapFont +EndSplineFont diff --git a/README.md b/README.md index 046e52c..8b836c0 100644 --- a/README.md +++ b/README.md @@ -193,13 +193,12 @@ implemented: date) - [x] "True" TTF version - [x] Windows support -- [x] Full [vim-airline] support! +- [x] Full [vim-airline] and [bufferline.nvim] support! - [x] Full [ranger_devicons] support! - [x] [starship] supported out of the box! - [x] Full [powerlevel10k] support! (if it doesn't work, try setting `POWERLEVEL9K_MODE` to `nerdfont-complete`) -- [x] All glyphs used by [maturin](https://github.com/PyO3/maturin) and - many other CLI tools! +- [x] All glyphs used by [maturin](https://github.com/PyO3/maturin) and many other CLI tools! - [x] Charmap including the code points (to make it easier for users to report issues/request additions) - [x] Codepoints above U+FFFF in vector fonts @@ -305,3 +304,5 @@ Cozette's builds use [bdfscale](https://github.com/philj56/bdfscale) by [philj56 [bluetoad07]: https://github.com/bluetoad07 [estradiol enantate]: https://en.wikipedia.org/wiki/Estradiol_enantate [port]: https://cgit.freebsd.org/ports/tree/x11-fonts/cozette +[bufferline.nvim]: https://github.com/akinsho/bufferline.nvim +[tmux]: diff --git a/build.py b/build.py index e749b1b..de81fa3 100644 --- a/build.py +++ b/build.py @@ -1,7 +1,9 @@ import argparse +import re import subprocess from dataclasses import dataclass from pathlib import Path +from pickle import BUILD from shlex import quote from shutil import rmtree from typing import Optional, Sequence, cast @@ -75,24 +77,24 @@ def rename_single(dir: Path, pattern: str, newname: str) -> Path: return cast(Path, next(dir.glob(pattern)).rename(dir / newname)) -def gen_bitmap_formats() -> Path: +def gen_bitmap_formats(sfd_path: Path, prefix: str) -> Path: fontforge( - open=REPO_ROOT / "Cozette" / "Cozette.sfd", + open=sfd_path, generate=[ - Generate("cozette.", bitmap_fmt="bdf"), + Generate(f"{prefix}.", bitmap_fmt="bdf"), ], ) - bdf_path = rename_single(BUILD_DIR, "*.bdf", "cozette.bdf") + bdf_path = rename_single(BUILD_DIR, f"{prefix}-*.bdf", f"{prefix}.bdf") fontforge( - open=REPO_ROOT / "Cozette" / "Cozette.sfd", + open=sfd_path, generate=[ - Generate("cozette.", "otb"), - Generate("cozette.", "psf"), - Generate("cozette.", "fnt"), - Generate("cozette.dfont", "sbit"), + Generate(f"{prefix}.", "otb"), + Generate(f"{prefix}.", "psf"), + Generate(f"{prefix}.", "fnt"), + Generate(f"{prefix}.dfont", "sbit"), ], ) - rename_single(BUILD_DIR, "*.fnt", "cozette.fnt") + rename_single(BUILD_DIR, f"{prefix}-*.fnt", f"{prefix}.fnt") return bdf_path @@ -163,8 +165,39 @@ def make_hidpi(bdf_path: Path, out_path: Path): print(crayons.green("Done!")) -def gen_variants(bdf_path: Path): - hidpi_path = BUILD_DIR / "cozette_hidpi.bdf" +BDF_CODEPOINT_RE = re.compile(r"BDFChar: \S+ (\d+)") + + +def variant( + sfd_path: Path, variant_name: str, variant_source: Path +) -> tuple[Path, str]: + outpath = BUILD_DIR / f"{variant_name}.sfd" + replacements = {} + with variant_source.open() as f: + for line in f: + if codepoint := BDF_CODEPOINT_RE.match(line): + replacements[int(codepoint.group(1))] = next(f) + + with outpath.open("w") as f: + with sfd_path.open() as src: + replacement = None + for line in src: + if replacement is not None: + f.write(replacement) + replacement = None + elif line.startswith("FAMILY_NAME"): + f.write(line) + else: + f.write(line.replace("Cozette", variant_name)) + if codepoint := BDF_CODEPOINT_RE.match(line): + if int(codepoint.group(1)) in replacements: + replacement = replacements[int(codepoint.group(1))] + + return (outpath, variant_name) + + +def gen_versions(bdf_path: Path, font_name: str, filename_prefix: str): + hidpi_path = BUILD_DIR / f"{filename_prefix}_hidpi.bdf" def bnp_invoc_ttf(name: str, format: str): return [ @@ -188,21 +221,23 @@ def bnp_invoc_ttf(name: str, format: str): "-f", "psf", "-o", - BUILD_DIR / f"cozette.psf", + BUILD_DIR / f"{filename_prefix}.psf", bdf_path, ], check=True, ) subprocess.run( - bnp_invoc_ttf("CozetteVector", "ttf") + [bdf_path], check=True + bnp_invoc_ttf(f"{font_name}Vector", "ttf") + [bdf_path], check=True ) subprocess.run( - bnp_invoc_ttf("CozetteVectorBold", "ttf") + ["-b", bdf_path], + bnp_invoc_ttf(f"{font_name}VectorBold", "ttf") + ["-b", bdf_path], check=True, ) print(crayons.yellow("Fixing TTF variants...")) - fix_ttf(BUILD_DIR / "CozetteVector_tmp.ttf", "CozetteVector") - fix_ttf(BUILD_DIR / "CozetteVectorBold_tmp.ttf", "CozetteVectorBold") + fix_ttf(BUILD_DIR / f"{font_name}Vector_tmp.ttf", f"{font_name}Vector") + fix_ttf( + BUILD_DIR / f"{font_name}VectorBold_tmp.ttf", f"{font_name}VectorBold" + ) print(crayons.green("Done!")) make_hidpi(bdf_path, hidpi_path) fontforge( @@ -213,7 +248,7 @@ def bnp_invoc_ttf(name: str, format: str): Generate(f"{hidpi_path.stem}.dfont", "sbit"), ], ) - rename_single(BUILD_DIR, "*-26.fnt", "cozette_hidpi.fnt") + rename_single(BUILD_DIR, "*-26.fnt", f"{filename_prefix}_hidpi.fnt") subprocess.run( [ BUILD_DIR.parent / "bitsnpicas.sh", @@ -265,11 +300,19 @@ def bnp_invoc_ttf(name: str, format: str): elif args.action == "fonts": rmtree(BUILD_DIR, ignore_errors=True) BUILD_DIR.mkdir(exist_ok=True) - print(crayons.blue("Building bitmap formats...")) - bdf_path = gen_bitmap_formats() - print(crayons.green("Done!", bold=True)) - print(crayons.blue("Building variants...")) - gen_variants(bdf_path) + for sfd_path, font_name in ( + (SFDPATH, "Cozette"), + variant( + SFDPATH, + "CozetteCrossedSeven", + SFDPATH.parent / "variants" / "CozetteCrossedSeven.sfd", + ), + ): + print(crayons.blue(f"Building bitmap formats for {font_name}...")) + bdf_path = gen_bitmap_formats(sfd_path, font_name.lower()) + print(crayons.green("Done!", bold=True)) + print(crayons.blue(f"Building versions for {font_name}...")) + gen_versions(bdf_path, font_name, font_name.lower()) print(crayons.green("Done!", bold=True)) elif args.action == "changelog": get_changelog() diff --git a/cozette_builder/changeloggen.py b/cozette_builder/changeloggen.py index 0c71698..f222bbd 100644 --- a/cozette_builder/changeloggen.py +++ b/cozette_builder/changeloggen.py @@ -17,6 +17,7 @@ def get_last_cozette_sfd() -> str: content = get_last_ver().commit.tree["Cozette/Cozette.sfd"] return content.data_stream.read().decode("utf-8") + char_regex = re.compile( r"BDFChar: (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+)" ) diff --git a/cozette_builder/hidpi.py b/cozette_builder/hidpi.py index 0f24d4a..c7b161e 100644 --- a/cozette_builder/hidpi.py +++ b/cozette_builder/hidpi.py @@ -90,4 +90,7 @@ def double_size(src: TextIO, out: TextIO): line = "FONT " + "-".join(xlfd) + "\n" elif line.startswith("BITMAP"): bitmap = True + if line.startswith("FAMILY_NAME"): + out.write(line) + continue out.write(line.replace("Cozette", "CozetteHiDpi")) diff --git a/pyproject.toml b/pyproject.toml index 8b06059..51b2f88 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,6 +5,6 @@ force_grid_wrap = 0 use_parentheses = true line_length = 79 -[tool.black] -target-version = ['py38'] -line_length = 79 +[tool.ruff] +target-version = "py312" +line-length = 79