Compare commits
182 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c2ba9d476 | ||
|
|
9ef8c80fd1 | ||
|
|
e59f404f6e | ||
|
|
5e67f886e8 | ||
|
|
c94dd7c8ba | ||
|
|
7c17b417fa | ||
|
|
0b44a51483 | ||
|
|
67d08e60a2 | ||
|
|
1c55bf5c9c | ||
|
|
3c0f4b2e95 | ||
|
|
d9edca3373 | ||
|
|
427aebec47 | ||
|
|
409b033f4e | ||
|
|
f2397840c1 | ||
|
|
1675cc8a0f | ||
|
|
8c6ab0e2d5 | ||
|
|
d2282e728a | ||
|
|
3d180b5416 | ||
|
|
3f9be35c80 | ||
|
|
7728facbff | ||
|
|
25c31c5762 | ||
|
|
bf10c0bb20 | ||
|
|
39b27b91e6 | ||
|
|
3fc6294075 | ||
|
|
72d7142455 | ||
|
|
7be3adb891 | ||
|
|
3b688895cb | ||
|
|
4c8e3e466f | ||
|
|
eabc1a256b | ||
|
|
95a9acfb52 | ||
|
|
fcf00e513a | ||
|
|
2a6e2b7632 | ||
|
|
f184cc35c3 | ||
|
|
364a42ab44 | ||
|
|
eab3bf1b45 | ||
|
|
46f9615349 | ||
|
|
8be3bb5d49 | ||
|
|
78cf145bc5 | ||
|
|
be77ca5611 | ||
|
|
5458a1cc6e | ||
|
|
2e2904b91b | ||
|
|
c9054769e1 | ||
|
|
37ab35564d | ||
|
|
1999518a3a | ||
|
|
a46f49b93c | ||
|
|
71331cb2ef | ||
|
|
e31c86a4d0 | ||
|
|
49b0de06d1 | ||
|
|
9e882ec4dd | ||
|
|
6dc062aaaf | ||
|
|
fd4ad788fc | ||
|
|
a0cbe27186 | ||
|
|
9d27ca7cee | ||
|
|
0fc7b8d6bc | ||
|
|
0acdf8f382 | ||
|
|
e92d8b8d24 | ||
|
|
d6d51d3fb8 | ||
|
|
09ef213183 | ||
|
|
19d89c34df | ||
|
|
eba1564e52 | ||
|
|
d7608273f8 | ||
|
|
b23a405592 | ||
|
|
de3907f6aa | ||
|
|
2f4f9f08b4 | ||
|
|
336741dbcf | ||
|
|
ea33833702 | ||
|
|
288d198668 | ||
|
|
b24e3193e9 | ||
|
|
37c4a1a57c | ||
|
|
830c2f0473 | ||
|
|
ad1ea15950 | ||
|
|
e2b7be3fbf | ||
|
|
046e1fb08e | ||
|
|
c9b8c035eb | ||
|
|
7d08972393 | ||
|
|
0dfcb40d00 | ||
|
|
5b5c3f2040 | ||
|
|
53edd20d33 | ||
|
|
289f0acd49 | ||
|
|
5725b27bf9 | ||
|
|
b88f1751ba | ||
|
|
f57db8365c | ||
|
|
9887a737dc | ||
|
|
ca0770ce83 | ||
|
|
dc0ab696da | ||
|
|
a5cbc12e91 | ||
|
|
d9106e9aee | ||
|
|
9e7e21221e | ||
|
|
ebef38c546 | ||
|
|
d03a6a3fd0 | ||
|
|
72c150d40c | ||
|
|
bdb901eb6e | ||
|
|
7f2921b729 | ||
|
|
bb49665418 | ||
|
|
9c7816d161 | ||
|
|
2b2c9fbd3f | ||
|
|
905412c1b1 | ||
|
|
686c04de65 | ||
|
|
cbb0e4053d | ||
|
|
e08e9a46f0 | ||
|
|
d5fc566d74 | ||
|
|
7bab03b62a | ||
|
|
7a44609a61 | ||
|
|
f83bd84515 | ||
|
|
361ab13dcc | ||
|
|
27c8135869 | ||
|
|
2affbf23c6 | ||
|
|
5698795990 | ||
|
|
f8f99015dc | ||
|
|
24974d285d | ||
|
|
2908add460 | ||
|
|
44353706ee | ||
|
|
2fbac2ab4d | ||
|
|
fe77749012 | ||
|
|
7e4f0149b8 | ||
|
|
2a3c782b6e | ||
|
|
e462f5bab4 | ||
|
|
8086f4e484 | ||
|
|
fb3430c57a | ||
|
|
8659a2b889 | ||
|
|
2514aebae1 | ||
|
|
7beff7655f | ||
|
|
f1b5b8bad8 | ||
|
|
a68a4b7c96 | ||
|
|
48a9289d5a | ||
|
|
9e16064f87 | ||
|
|
d1ef3c8f53 | ||
|
|
1a706e67b6 | ||
|
|
fd24ba213e | ||
|
|
bd6f6d69a4 | ||
|
|
ba22fc0c7a | ||
|
|
40d695ae91 | ||
|
|
aa4df6d077 | ||
|
|
02241c2002 | ||
|
|
fe21e655cb | ||
|
|
1b1dabad52 | ||
|
|
e5f8c8ed5d | ||
|
|
dd23aa2c95 | ||
|
|
54b616db12 | ||
|
|
e5ff6ac4d3 | ||
|
|
16a4b6e62d | ||
|
|
750f5640bb | ||
|
|
a6fc0895e9 | ||
|
|
9b710c17dd | ||
|
|
c28640b814 | ||
|
|
65013b6742 | ||
|
|
07111ccbdc | ||
|
|
86342eae85 | ||
|
|
7a7ff6619c | ||
|
|
96b3a7a434 | ||
|
|
bf2b2b66b0 | ||
|
|
3591865c23 | ||
|
|
0318435e66 | ||
|
|
e2940d5033 | ||
|
|
f455070ea9 | ||
|
|
ef421a9366 | ||
|
|
2c1cb21b74 | ||
|
|
7d4c903dd9 | ||
|
|
4e0560cb2f | ||
|
|
c3cbe61b13 | ||
|
|
362e095889 | ||
|
|
4103baf130 | ||
|
|
c7cdcf2f2b | ||
|
|
1aaf0e2eaa | ||
|
|
f1823da91c | ||
|
|
ed50a3fb21 | ||
|
|
c3638b2a29 | ||
|
|
fd3c037d0d | ||
|
|
e96ed5f366 | ||
|
|
fab11ddc62 | ||
|
|
9b231a09b9 | ||
|
|
15c4dd3c24 | ||
|
|
d6f09dacaa | ||
|
|
07ae0ce1e3 | ||
|
|
df988356d1 | ||
|
|
2abd9bb52e | ||
|
|
c2a32e0737 | ||
|
|
e1476ef1cc | ||
|
|
80b1a3ae38 | ||
|
|
9abce94585 | ||
|
|
0bd09d4d32 | ||
|
|
aa7eafd73a |
3
.gitignore
vendored
|
|
@ -61,3 +61,6 @@ dmypy.json
|
|||
*.ttf
|
||||
*.otf
|
||||
.vim
|
||||
.direnv
|
||||
.envrc
|
||||
result
|
||||
|
|
|
|||
3201
CHANGELOG.md
30483
Cozette/Cozette.sfd
BIN
Cozette/Mosaics design.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
|
|
@ -3,7 +3,7 @@ FontName: Cozette
|
|||
FullName: Cozette
|
||||
FamilyName: Cozette
|
||||
Weight: Medium
|
||||
Copyright: (c) 2020-2024 Slavfox
|
||||
Copyright: (c) 2020-2025 Ines <ines@moonwit.ch>
|
||||
Version: 1.252
|
||||
ItalicAngle: 0
|
||||
UnderlinePosition: -100
|
||||
|
|
@ -22,7 +22,7 @@ OS2Version: 1
|
|||
OS2_WeightWidthSlopeOnly: 0
|
||||
OS2_UseTypoMetrics: 0
|
||||
CreationTime: -2082812035
|
||||
ModificationTime: 1735604900
|
||||
ModificationTime: 1753860679
|
||||
PfmFamily: 49
|
||||
TTFWeight: 500
|
||||
TTFWidth: 5
|
||||
|
|
@ -55,7 +55,7 @@ OS2StrikeYPos: 512
|
|||
OS2Vendor: 'UNKN'
|
||||
MarkAttachClasses: 1
|
||||
DEI: 91125
|
||||
LangName: 1033 "" "" "" "" "" "" "" "" "" "" "" "" "" "Copyright (c) 2020 Slavfox <slavfoxman@gmail.com>+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"
|
||||
LangName: 1033 "" "" "" "" "" "" "" "" "" "" "" "" "" "Copyright (c) 2020 Ines <ines@moonwit.ch>+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
|
||||
|
|
@ -114,17 +114,19 @@ MATH:RadicalKernAfterDegree: -1137
|
|||
MATH:RadicalDegreeBottomRaisePercent: 60
|
||||
MATH:MinConnectorOverlap: 40
|
||||
Encoding: UnicodeFull
|
||||
Compacted: 1
|
||||
UnicodeInterp: none
|
||||
NameList: AGL with PUA
|
||||
DisplaySize: 13
|
||||
AntiAlias: 1
|
||||
FitToEm: 0
|
||||
WidthSeparation: 307
|
||||
WinInfo: 0 16 12
|
||||
WinInfo: 0 16 20
|
||||
OnlyBitmaps: 1
|
||||
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
|
||||
BeginChars: 1114112 32
|
||||
|
||||
StartChar: seven
|
||||
Encoding: 55 55 0
|
||||
|
|
@ -138,29 +140,224 @@ EndChar
|
|||
StartChar: uni2077
|
||||
Encoding: 8311 8311 1
|
||||
Width: 1024
|
||||
Flags: HW
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni2087
|
||||
Encoding: 8327 8327 2
|
||||
Width: 1024
|
||||
Flags: HW
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uniFF17
|
||||
Encoding: 65303 65303 3
|
||||
Width: 1890
|
||||
Flags: HW
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: u1CCF7
|
||||
Encoding: 118007 118007 4
|
||||
Width: 945
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: u1E0A7
|
||||
Encoding: 123047 123047 5
|
||||
Width: 2048
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: u1F0A7
|
||||
Encoding: 127143 127143 6
|
||||
Width: 945
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: u1F0B7
|
||||
Encoding: 127159 127159 7
|
||||
Width: 945
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: u1F0C7
|
||||
Encoding: 127175 127175 8
|
||||
Width: 945
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: u1F0D7
|
||||
Encoding: 127191 127191 9
|
||||
Width: 945
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni2150
|
||||
Encoding: 8528 8528 10
|
||||
Width: 945
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: seveneighths
|
||||
Encoding: 8542 8542 11
|
||||
Width: 945
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni2466
|
||||
Encoding: 9318 9318 12
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni2470
|
||||
Encoding: 9328 9328 13
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni24FB
|
||||
Encoding: 9467 9467 14
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni24F1
|
||||
Encoding: 9457 9457 15
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni2786
|
||||
Encoding: 10118 10118 16
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni277C
|
||||
Encoding: 10108 10108 17
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni2790
|
||||
Encoding: 10128 10128 18
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni3257
|
||||
Encoding: 12887 12887 19
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni32B2
|
||||
Encoding: 12978 12978 20
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni32BC
|
||||
Encoding: 12988 12988 21
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni247A
|
||||
Encoding: 9338 9338 22
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni2484
|
||||
Encoding: 9348 9348 23
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni2498
|
||||
Encoding: 9368 9368 24
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni248E
|
||||
Encoding: 9358 9358 25
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni32C6
|
||||
Encoding: 12998 12998 26
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni335F
|
||||
Encoding: 13151 13151 27
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni3369
|
||||
Encoding: 13161 13161 28
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni33E6
|
||||
Encoding: 13286 13286 29
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni33F0
|
||||
Encoding: 13296 13296 30
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
|
||||
StartChar: uni33FA
|
||||
Encoding: 13306 13306 31
|
||||
Width: 1890
|
||||
Flags: W
|
||||
LayerCount: 2
|
||||
EndChar
|
||||
EndChars
|
||||
BitmapFont: 13 3599 10 3 1
|
||||
BitmapFont: 13 33 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"
|
||||
FONT 1 "-inesw-Cozette-Medium-R-Normal--13-120-75-75-M-60-ISO10646-1"
|
||||
COMMENT 0 "(c) 2020-2025 Ines <ines@moonwit.ch>"
|
||||
FOUNDRY 16 "inesw"
|
||||
FAMILY_NAME 16 "Cozette"
|
||||
WEIGHT_NAME 16 "Medium"
|
||||
SLANT 16 "R"
|
||||
|
|
@ -177,7 +374,7 @@ CHARSET_ENCODING 16 "1"
|
|||
FONTNAME_REGISTRY 16 ""
|
||||
FONT_NAME 16 "Cozette"
|
||||
FACE_NAME 16 "Cozette"
|
||||
COPYRIGHT 16 "(c) 2020-2024 Slavfox"
|
||||
COPYRIGHT 16 "(c) 2020-2025 Ines <ines@moonwit.ch>"
|
||||
FONT_VERSION 16 "1.252"
|
||||
FONT_ASCENT 18 10
|
||||
FONT_DESCENT 18 3
|
||||
|
|
@ -210,5 +407,61 @@ BDFChar: 2 8327 6 1 4 -2 2
|
|||
n.=MC5QCca
|
||||
BDFChar: 3 65303 12 4 8 0 7
|
||||
p]qERGT]7:
|
||||
BDFChar: 4 118007 6 0 5 0 7
|
||||
r.O]Y6u482
|
||||
BDFChar: 5 123047 6 0 0 0 0
|
||||
z
|
||||
BDFChar: 6 127143 6 1 5 -2 8
|
||||
pk\-if\#uOLoC(K
|
||||
BDFChar: 7 127159 6 1 5 -2 8
|
||||
pk\-if\#ttLtMJ&
|
||||
BDFChar: 8 127175 6 1 5 -2 8
|
||||
pk\-if\#uOLtMJ&
|
||||
BDFChar: 9 127191 6 1 5 -2 8
|
||||
pk\-if\#uOW7^kF
|
||||
BDFChar: 10 8528 6 1 5 0 8
|
||||
Lld^k+BV1%O8o7\
|
||||
BDFChar: 11 8542 6 1 5 0 8
|
||||
aAC6V0PF:]O8o7\
|
||||
BDFChar: 12 9318 12 1 11 -2 8
|
||||
*ro]a5X:>PJfp'rKHPpj5X8_m*rl9@
|
||||
BDFChar: 13 9328 12 1 11 -2 8
|
||||
*ro]a5X:O+Yb72QOW_1W5X8_m*rl9@
|
||||
BDFChar: 14 9467 12 1 11 -2 8
|
||||
*rpf+@).dFJfp'rKHPpj@).9-*rl9@
|
||||
BDFChar: 15 9457 12 2 10 -1 7
|
||||
4og'4fRTQDfRVe.NIZKY4obQ_
|
||||
BDFChar: 16 10118 12 1 11 -2 8
|
||||
*ro]a5X:>PJfp'rKHPpj5X8_m*rl9@
|
||||
BDFChar: 17 10108 12 2 10 -1 7
|
||||
4og'4j+.#Wj+-lSpOI_n4obQ_
|
||||
BDFChar: 18 10128 12 2 10 -1 7
|
||||
4og'4j+.#Wj+-lSpOI_n4obQ_
|
||||
BDFChar: 19 12887 12 1 11 -2 8
|
||||
*ro]a5X;ZKLnKs)Tcglg5X8_m*rl9@
|
||||
BDFChar: 20 12978 12 1 11 -2 8
|
||||
*ro]a5X;ZKLnKs)M'0&G5X8_m*rl9@
|
||||
BDFChar: 21 12988 12 1 11 -2 8
|
||||
*ro]a5X:g3W1^bqM'.Wt5X8_m*rl9@
|
||||
BDFChar: 22 9338 12 1 11 -2 8
|
||||
+Fmfa5sU#EKHQ<uKHQ'n83fF*+FjFl
|
||||
BDFChar: 23 9348 12 1 11 -2 8
|
||||
+Fm6Q8O/[dMBIs&MBId!?9gb@+FjFl
|
||||
BDFChar: 24 9368 12 1 10 0 7
|
||||
:&mT\_>lt(:&mZ^7)7m!
|
||||
BDFChar: 25 9358 12 2 9 0 7
|
||||
p]qERGT]@@
|
||||
BDFChar: 26 12998 12 1 10 -1 7
|
||||
o=tu('>PeWo=uP869mq("Mb!;
|
||||
BDFChar: 27 13151 12 1 11 -1 8
|
||||
!<DZ*&HEK[,!b]a,JZPE6biku
|
||||
BDFChar: 28 13161 12 1 11 -1 8
|
||||
!.\=i7"E7l8O-QH8\djsks,<C
|
||||
BDFChar: 29 13286 12 1 10 0 7
|
||||
pV7J.'L4%]oKXZe8&.MX
|
||||
BDFChar: 30 13296 12 1 11 0 7
|
||||
?/S-o`?7b1>p)]]8`8hU
|
||||
BDFChar: 31 13306 12 1 11 0 7
|
||||
?/VP%,p4Yp>p)]]M;[V@
|
||||
EndBitmapFont
|
||||
EndSplineFont
|
||||
|
|
|
|||
2
LICENSE
|
|
@ -1,6 +1,6 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2020, Slavfox
|
||||
Copyright (c) 2020 Samhain <samhain@moonwit.ch> & contributors <https://github.com/the-moonwitch/Cozette/contributors>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
|||
57
README.md
|
|
@ -1,10 +1,10 @@
|
|||
# Cozette
|
||||
|
||||
[](https://github.com/slavfox/Cozette/releases/latest)
|
||||
[](https://github.com/the-moonwitch/Cozette/releases/latest)
|
||||
[](https://aur.archlinux.org/packages/cozette-otb/)
|
||||

|
||||

|
||||
[](https://github.com/slavfox/Cozette/blob/master/LICENSE)
|
||||

|
||||

|
||||
[](https://github.com/the-moonwitch/Cozette/blob/master/LICENSE)
|
||||
|
||||

|
||||
|
||||
|
|
@ -93,6 +93,13 @@ The preferred format is `.otb` (for bitmaps) or `.ttf`
|
|||
(you probably want to follow your distro's instructions). On Ubuntu you might need to
|
||||
[specifically enable bitmap fonts].
|
||||
|
||||
**If you're on Void**, [ifreund] made [a Void package](https://github.com/void-linux/void-packages/tree/master/srcpkgs/font-cozette) for the .otb! Install it
|
||||
using XBPS:
|
||||
|
||||
```
|
||||
$ sudo xbps-install font-cozette
|
||||
```
|
||||
|
||||
**If you're on Arch**, [ifreund] made [an AUR package] for the .otb! Install it
|
||||
using your AUR helper of choice:
|
||||
|
||||
|
|
@ -149,6 +156,23 @@ will want to use CozetteVector there. In applications that do support bitmap
|
|||
fonts, you will want to use the normal, bitmap Cozette (unless it's too
|
||||
small for you, in which case, CozetteVector scales better).
|
||||
|
||||
#### VSCode Letter Spacing
|
||||
|
||||
Sometimes the font might render without proper space betweening the characters (font size set to 13):
|
||||
|
||||

|
||||
|
||||
To fix this you need to set (in your settings):
|
||||
- terminal.integrated.letterSpacing to 1
|
||||
|
||||

|
||||
|
||||
After that your terminal should look like this (font size set to 13):
|
||||
|
||||

|
||||
|
||||
_Note: VSCode also provides the option editor.letterSpacing which adjusts the spacing for the file editor._
|
||||
|
||||
#### Kitty
|
||||
|
||||
**[4e554c4c](https://github.com/4e554c4c) made [an AUR package for `kitty` patched to support bitmap fonts](https://aur.archlinux.org/packages/kitty-bitmap/).**
|
||||
|
|
@ -164,7 +188,7 @@ explicitly set Cozette(Vector)'s `spacing` to 100, and `scalable` to `true` in `
|
|||
|
||||
You can also make Cozette work flawlessly by uninstalling `kitty` and using a terminal emulator for which _not rendering fonts_ isn't a design principle - I cannot recommend [alacritty](https://github.com/alacritty/alacritty/) enough. it's excellent, has worked flawlessly for me for quite some time, and both configuring and getting bitmap fonts to work in it is a breeze.
|
||||
|
||||
(The support was discussed in [slavfox/Cozette#18](https://github.com/slavfox/Cozette/issues/18). Many thanks to all the participants there, especially to to Luflosi, who brought up flipping the `allow_bitmapped_fonts` flag in [their fork](https://github.com/Luflosi/kitty/commit/e645e0b5ed084c2c57ecfb8acafc07e76f5717bb), and to [4e554c4c](https://github.com/4e554c4c), who made the AUR package.)
|
||||
(The support was discussed in [the-moonwitch/Cozette#18](https://github.com/the-moonwitch/Cozette/issues/18). Many thanks to all the participants there, especially to to Luflosi, who brought up flipping the `allow_bitmapped_fonts` flag in [their fork](https://github.com/Luflosi/kitty/commit/e645e0b5ed084c2c57ecfb8acafc07e76f5717bb), and to [4e554c4c](https://github.com/4e554c4c), who made the AUR package.)
|
||||
|
||||
# Roadmap
|
||||
|
||||
|
|
@ -203,6 +227,8 @@ implemented:
|
|||
report issues/request additions)
|
||||
- [x] Codepoints above U+FFFF in vector fonts
|
||||
- [x] Upscaled hi-dpi variant
|
||||
- [x] Crossed seven variant!
|
||||

|
||||
|
||||
# Recommended alternatives
|
||||
|
||||
|
|
@ -265,6 +291,14 @@ Cozette includes contributions from:
|
|||
- [sungodmoth]
|
||||
- [yoshiyoshyosh]
|
||||
- [bluetoad07]
|
||||
- [PhMajerus]
|
||||
- [theridane]
|
||||
- [supersurviveur]
|
||||
- [breitnw]
|
||||
- [kachick]
|
||||
- [Eejit43]
|
||||
- [WhyNotHugo]
|
||||
- [Mogwump]
|
||||
- [estradiol enantate]
|
||||
|
||||
# License & Acknowledgements
|
||||
|
|
@ -277,10 +311,10 @@ Cozette's builds use [bdfscale](https://github.com/philj56/bdfscale) by [philj56
|
|||
[proggy]: https://github.com/bluescan/proggyfonts
|
||||
[creep]: https://github.com/romeovs/creep
|
||||
[great coverage of all the glyphs i might encounter in the terminal]: #character-map
|
||||
[file an issue]: https://github.com/slavfox/Cozette/issues/new
|
||||
[file an issue]: https://github.com/the-moonwitch/Cozette/issues/new
|
||||
[nerd fonts]: https://www.nerdfonts.com/
|
||||
[the bottom of this readme]: #character-map
|
||||
[you can get cozette over at the releases tab]: https://github.com/slavfox/Cozette/releases
|
||||
[you can get cozette over at the releases tab]: https://github.com/the-moonwitch/Cozette/releases
|
||||
[ifreund]: https://github.com/ifreund
|
||||
[an aur package]: https://aur.archlinux.org/packages/cozette-otb/
|
||||
[specifically enable bitmap fonts]: https://bugs.launchpad.net/ubuntu/+source/fontconfig/+bug/1560114
|
||||
|
|
@ -302,7 +336,14 @@ Cozette's builds use [bdfscale](https://github.com/philj56/bdfscale) by [philj56
|
|||
[laxul]: https://github.com/laxul
|
||||
[sungodmoth]: https://github.com/sungodmoth
|
||||
[bluetoad07]: https://github.com/bluetoad07
|
||||
[PhMajerus]: https://github.com/PhMajerus
|
||||
[theridane]: https://github.com/theridane
|
||||
[supersurviveur]: https://github.com/supersurviveur
|
||||
[breitnw]: https://github.com/breitnw
|
||||
[kachick]: https://github.com/kachick
|
||||
[Eejit43]: https://github.com/Eejit43
|
||||
[WhyNotHugo]: https://github.com/WhyNotHugo
|
||||
[Mogwump]: https://github.com/Mogwump
|
||||
[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]:
|
||||
|
|
|
|||
25
build.py
|
|
@ -106,6 +106,16 @@ def fix_ttf(ttfpath: Path, name: str):
|
|||
if line.startswith("Version "):
|
||||
version = line.split()[1]
|
||||
break
|
||||
|
||||
if name.endswith("Bold"):
|
||||
family_name = name.removesuffix("Bold")
|
||||
style_name = "Bold"
|
||||
weight = 700
|
||||
else:
|
||||
family_name = name
|
||||
style_name = "Regular"
|
||||
weight = 400
|
||||
|
||||
with NamedTemporaryFile() as sfd:
|
||||
subprocess.run(
|
||||
[
|
||||
|
|
@ -128,13 +138,18 @@ def fix_ttf(ttfpath: Path, name: str):
|
|||
"ScaleToEm(2048)",
|
||||
'RenameGlyphs("AGL with PUA")',
|
||||
'Reencode("unicode")',
|
||||
f'SetTTFName(0x409, 3, "{name}")',
|
||||
f'SetTTFName(0x409, 1, "{family_name}")',
|
||||
f'SetTTFName(0x409, 2, "{style_name}")',
|
||||
f'SetTTFName(0x409, 3, "{family_name} {style_name}")', # Unique font identifier
|
||||
f'SetTTFName(0x409, 4, "{family_name} {style_name}")', # Full font name
|
||||
f'SetTTFName(0x409, 5, "{version}")',
|
||||
f'SetTTFName(0x409, 8, "Slavfox")',
|
||||
f'SetTTFName(0x409, 9, "Slavfox")',
|
||||
f'SetTTFName(0x409, 11, "https://github.com/slavfox/Cozette")',
|
||||
f'SetTTFName(0x409, 6, "{family_name}-{style_name}")', # PostScript name
|
||||
f'SetTTFName(0x409, 8, "Ines <ines@moonwit.ch>")',
|
||||
f'SetTTFName(0x409, 9, "Ines <ines@moonwit.ch>")',
|
||||
f'SetTTFName(0x409, 11, "https://github.com/the-moonwitch/Cozette")',
|
||||
f'SetTTFName(0x409, 13, LoadStringFromFile({repr(str((REPO_ROOT / "LICENSE").resolve()))}))',
|
||||
'SetTTFName(0x409, 14, "https://github.com/slavfox/Cozette/blob/master/LICENSE")',
|
||||
'SetTTFName(0x409, 14, "https://github.com/the-moonwitch/Cozette/blob/master/LICENSE")',
|
||||
f'SetOS2Value("Weight", {weight})',
|
||||
f'Generate("{name}.dfont")',
|
||||
f'Generate("{name}.otf")',
|
||||
f'Generate("{name}.ttf")',
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
STARTFONT 2.1
|
||||
FONT -slavfox-CozetteHiDpi-Medium-R-Normal--26-240-75-75-M-120-ISO10646-1
|
||||
FONT -inesw-CozetteHiDpi-Medium-R-Normal--26-240-75-75-M-120-ISO10646-1
|
||||
SIZE 24 75 75
|
||||
FONTBOUNDINGBOX 17 28 -5 -3
|
||||
COMMENT "Generated by fontforge, http://fontforge.sourceforge.net"
|
||||
COMMENT "(c) 2020-2023 Slavfox"
|
||||
COMMENT "(c) 2020-2025 Ines <ines@moonwit.ch>"
|
||||
STARTPROPERTIES 40
|
||||
FOUNDRY "slavfox"
|
||||
FOUNDRY "inesw"
|
||||
FAMILY_NAME "Cozette"
|
||||
WEIGHT_NAME "Medium"
|
||||
SLANT "R"
|
||||
|
|
@ -22,7 +22,7 @@ CHARSET_ENCODING "1"
|
|||
FONTNAME_REGISTRY ""
|
||||
FONT_NAME "Cozette"
|
||||
FACE_NAME "Cozette"
|
||||
COPYRIGHT "(c) 2020-2023 Slavfox"
|
||||
COPYRIGHT "(c) 2020-2025 Ines <ines@moonwit.ch>"
|
||||
FONT_VERSION "1.192"
|
||||
FONT_ASCENT 10
|
||||
FONT_DESCENT 3
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ def wrap_text(src: str, width=79) -> Sample:
|
|||
):
|
||||
idx += len(h)
|
||||
else:
|
||||
running_w += 1 if charwidth(src[idx]) != "W" else 2
|
||||
running_w += 1 if charwidth(src[idx]) not in "FW" else 2
|
||||
idx += 1
|
||||
for idx in reversed(linebreaks):
|
||||
src = src[:idx].rstrip() + "\n" + src[idx:].lstrip()
|
||||
|
|
@ -104,7 +104,7 @@ def save_sample(
|
|||
"-fa",
|
||||
fnt,
|
||||
"-geometry",
|
||||
f"{sample.width}x{sample.height - 1}+100+100",
|
||||
f"{sample.width}x{sample.height}+100+100",
|
||||
"-dc",
|
||||
"-cu",
|
||||
"-cn",
|
||||
|
|
@ -186,7 +186,7 @@ def make_charlist_text(sfd: Path) -> str:
|
|||
text += f" {chr(c)} "
|
||||
else:
|
||||
ch = chr(c)
|
||||
text += ch if charwidth(ch) in "FW" else f"{ch} "
|
||||
text += ch if charwidth(ch) in "FWN" else f"{ch} "
|
||||
else:
|
||||
print("Skipping", c, category(chr(c)))
|
||||
return text
|
||||
|
|
@ -227,14 +227,15 @@ def save_charlist(fnt: str, sfd: Path, output_dir: Path):
|
|||
|
||||
charmap = make_charmap(sfd)
|
||||
with (output_dir / "charmap.txt").open("w") as f:
|
||||
f.write("\n".join(charmap))
|
||||
f.write(" ")
|
||||
f.write("\n ".join(charmap))
|
||||
files = []
|
||||
for chunk in range(0, len(charmap), 50):
|
||||
path = output_dir / f"charmap{chunk//50}_tmp.png"
|
||||
text = "\n".join(charmap[chunk : chunk + 50])
|
||||
text = " \n".join(charmap[chunk : chunk + 50])
|
||||
save_sample(
|
||||
fnt,
|
||||
Sample(text, 40, len(charmap[chunk : chunk + 49])),
|
||||
Sample(text, 41, len(charmap[chunk : chunk + 49])),
|
||||
path,
|
||||
fgcolor="#24292e",
|
||||
bgcolor="#ffffff",
|
||||
|
|
|
|||
61
flake.lock
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1765838191,
|
||||
"narHash": "sha256-m5KWt1nOm76ILk/JSCxBM4MfK3rYY7Wq9/TZIIeGnT8=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c6f52ebd45e5925c188d1a20119978aa4ffd5ef6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-25.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
97
flake.nix
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
{
|
||||
description = "A bitmap programming font optimized for coziness";
|
||||
|
||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
|
||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||
|
||||
outputs =
|
||||
{
|
||||
self,
|
||||
nixpkgs,
|
||||
flake-utils,
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem (
|
||||
system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
inherit (pkgs) lib;
|
||||
in
|
||||
{
|
||||
devShells = {
|
||||
default = pkgs.mkShellNoCC {
|
||||
packages = with pkgs; [
|
||||
# FontForge GUI
|
||||
fontforge-gtk
|
||||
# Python tools
|
||||
python312Packages.black
|
||||
python312Packages.mypy
|
||||
python312Packages.isort
|
||||
python312Packages.ruff
|
||||
];
|
||||
};
|
||||
};
|
||||
packages = rec {
|
||||
# Derivation to build and install cozette
|
||||
cozette = pkgs.stdenvNoCC.mkDerivation {
|
||||
pname = "cozette";
|
||||
version =
|
||||
let
|
||||
sfdLines = lib.strings.splitString "\n" (builtins.readFile ./Cozette/Cozette.sfd);
|
||||
sfdVersionLine = lib.lists.findFirst (l: lib.strings.hasPrefix "Version: " l) null sfdLines;
|
||||
sfdVersion =
|
||||
if sfdVersionLine != null then lib.strings.removePrefix "Version: " sfdVersionLine else "0.00";
|
||||
majorRest = lib.strings.splitString "." sfdVersion;
|
||||
major = builtins.elemAt majorRest 0;
|
||||
minorPatch = builtins.elemAt majorRest 1;
|
||||
minor = builtins.substring 0 2 minorPatch;
|
||||
patch = builtins.substring 2 1 minorPatch;
|
||||
in
|
||||
"${major}.${minor}.${patch}";
|
||||
|
||||
src = ./.;
|
||||
|
||||
buildInputs = with pkgs; [
|
||||
(pkgs.python312.withPackages (
|
||||
ppkgs: with ppkgs; [
|
||||
numpy
|
||||
pillow
|
||||
fonttools
|
||||
crayons
|
||||
gitpython
|
||||
setuptools
|
||||
pip
|
||||
]
|
||||
))
|
||||
fontforge
|
||||
bitsnpicas
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace build.py --replace-fail \
|
||||
'bitsnpicas.sh' '${lib.getExe pkgs.bitsnpicas}'
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
python3 build.py fonts
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
cd build
|
||||
|
||||
install -Dm644 *.ttf -t $out/share/fonts/truetype
|
||||
install -Dm644 *.otf -t $out/share/fonts/opentype
|
||||
install -Dm644 *.bdf -t $out/share/fonts/misc
|
||||
install -Dm644 *.otb -t $out/share/fonts/misc
|
||||
install -Dm644 *.woff -t $out/share/fonts/woff
|
||||
install -Dm644 *.woff2 -t $out/share/fonts/woff2
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
};
|
||||
default = cozette;
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 72 KiB |
BIN
img/charmap.png
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 197 KiB |
1238
img/charmap.txt
BIN
img/crossed_seven.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
img/sample.png
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.8 KiB |