mirror of
https://github.com/1j01/textual-paint.git
synced 2024-09-11 23:57:12 +03:00
Add docstrings to FIGletFontWriter
This commit is contained in:
parent
f89a2353ec
commit
e2c5fc9af5
@ -28,6 +28,7 @@
|
|||||||
"Bresenham",
|
"Bresenham",
|
||||||
"Bresenham's",
|
"Bresenham's",
|
||||||
"cmdpxl",
|
"cmdpxl",
|
||||||
|
"Deutsch",
|
||||||
"DIALOGEX",
|
"DIALOGEX",
|
||||||
"Figlet",
|
"Figlet",
|
||||||
"Fira",
|
"Fira",
|
||||||
|
@ -30,8 +30,67 @@ def blankLines(num: int, width: int) -> str:
|
|||||||
return '\n'.join(lines)
|
return '\n'.join(lines)
|
||||||
|
|
||||||
class FIGletFontWriter:
|
class FIGletFontWriter:
|
||||||
|
"""Used to write FIGlet fonts.
|
||||||
|
|
||||||
|
createFigFileData() returns a string that can be written to a .flf file.
|
||||||
|
|
||||||
|
It can automatically fix some common problems with FIGlet fonts, such as
|
||||||
|
incorrect character widths/heights, and missing lowercase characters.
|
||||||
|
"""
|
||||||
|
|
||||||
charOrder: list[int] = [ii for ii in range(32, 127)] + [196, 214, 220, 228, 246, 252, 223]
|
charOrder: list[int] = [ii for ii in range(32, 127)] + [196, 214, 220, 228, 246, 252, 223]
|
||||||
|
R"""Character codes that are required to be in any FIGlet font.
|
||||||
|
|
||||||
|
Printable portion of the ASCII character set:
|
||||||
|
32 (blank/space) 64 @ 96 `
|
||||||
|
33 ! 65 A 97 a
|
||||||
|
34 " 66 B 98 b
|
||||||
|
35 # 67 C 99 c
|
||||||
|
36 $ 68 D 100 d
|
||||||
|
37 % 69 E 101 e
|
||||||
|
38 & 70 F 102 f
|
||||||
|
39 ' 71 G 103 g
|
||||||
|
40 ( 72 H 104 h
|
||||||
|
41 ) 73 I 105 i
|
||||||
|
42 * 74 J 106 j
|
||||||
|
43 + 75 K 107 k
|
||||||
|
44 , 76 L 108 l
|
||||||
|
45 - 77 M 109 m
|
||||||
|
46 . 78 N 110 n
|
||||||
|
47 / 79 O 111 o
|
||||||
|
48 0 80 P 112 p
|
||||||
|
49 1 81 Q 113 q
|
||||||
|
50 2 82 R 114 r
|
||||||
|
51 3 83 S 115 s
|
||||||
|
52 4 84 T 116 t
|
||||||
|
53 5 85 U 117 u
|
||||||
|
54 6 86 V 118 v
|
||||||
|
55 7 87 W 119 w
|
||||||
|
56 8 88 X 120 x
|
||||||
|
57 9 89 Y 121 y
|
||||||
|
58 : 90 Z 122 z
|
||||||
|
59 ; 91 [ 123 {
|
||||||
|
60 < 92 \ 124 |
|
||||||
|
61 = 93 ] 125 }
|
||||||
|
62 > 94 ^ 126 ~
|
||||||
|
63 ? 95 _
|
||||||
|
Additional required Deutsch FIGcharacters, in order:
|
||||||
|
196 Ä (umlauted "A" -- two dots over letter "A")
|
||||||
|
214 Ö (umlauted "O" -- two dots over letter "O")
|
||||||
|
220 Ü (umlauted "U" -- two dots over letter "U")
|
||||||
|
228 ä (umlauted "a" -- two dots over letter "a")
|
||||||
|
246 ö (umlauted "o" -- two dots over letter "o")
|
||||||
|
252 ü (umlauted "u" -- two dots over letter "u")
|
||||||
|
223 ß ("ess-zed" -- see FIGcharacter illustration below)
|
||||||
|
___
|
||||||
|
/ _ \
|
||||||
|
| |/ /
|
||||||
|
Ess-zed >>---> | |\ \
|
||||||
|
| ||_/
|
||||||
|
|_|
|
||||||
|
|
||||||
|
Additional characters must use code tagged characters, which are not yet supported.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@ -50,20 +109,35 @@ class FIGletFontWriter:
|
|||||||
caseInsensitive: bool = False
|
caseInsensitive: bool = False
|
||||||
):
|
):
|
||||||
self.fontName = fontName
|
self.fontName = fontName
|
||||||
|
"""Name of the font."""
|
||||||
self.figChars: dict[int, str] = figChars
|
self.figChars: dict[int, str] = figChars
|
||||||
|
"""Dictionary that maps character codes to FIGcharacter strings."""
|
||||||
self.height = height
|
self.height = height
|
||||||
|
"""Height of a FIGcharacter, in characters."""
|
||||||
self.baseline = baseline
|
self.baseline = baseline
|
||||||
|
"""Distance from the top of the character to the baseline. If not specified, defaults to height."""
|
||||||
self.maxLength = maxLength
|
self.maxLength = maxLength
|
||||||
|
"""Maximum length of a line INCLUDING two endMark characters."""
|
||||||
self.commentLines: list[str] = commentLines
|
self.commentLines: list[str] = commentLines
|
||||||
|
"""List of comment lines to be included in the header. It's recommended to include at least the name of the font and the name of the author."""
|
||||||
self.rightToLeft = rightToLeft
|
self.rightToLeft = rightToLeft
|
||||||
|
"""Indicates RTL writing direction (or LTR if False)."""
|
||||||
self.codeTagCount = codeTagCount
|
self.codeTagCount = codeTagCount
|
||||||
|
"""Number of extra characters included in the font (in addition to the required 102 untagged characters). Outputting tagged characters is not yet supported."""
|
||||||
self.hardBlank = hardBlank
|
self.hardBlank = hardBlank
|
||||||
|
"""Invisible character used to prevent smushing."""
|
||||||
self.endMark = endMark
|
self.endMark = endMark
|
||||||
|
"""Denotes the end of a line. Two of these characters in a row denotes the end of a FIGcharacter."""
|
||||||
self.horizontalLayout = horizontalLayout
|
self.horizontalLayout = horizontalLayout
|
||||||
|
"""One of 'Full', 'Fitted', 'Universal Smushing', or 'Controlled Smushing'"""
|
||||||
self.verticalLayout = verticalLayout
|
self.verticalLayout = verticalLayout
|
||||||
|
"""One of 'Full', 'Fitted', 'Universal Smushing', or 'Controlled Smushing'"""
|
||||||
self.hRule = [False] * 7
|
self.hRule = [False] * 7
|
||||||
|
"""Horizontal Smushing Rules, 1-6 (0 is not used, so that indices correspond with the names of the parameters). horizontalLayout must be 'Controlled Smushing' for these to take effect."""
|
||||||
self.vRule = [False] * 6
|
self.vRule = [False] * 6
|
||||||
|
"""Vertical Smushing Rules, 1-5 (0 is not used, so that indices correspond with the names of the parameters). verticalLayout must be 'Controlled Smushing' for these to take effect."""
|
||||||
self.caseInsensitive = caseInsensitive
|
self.caseInsensitive = caseInsensitive
|
||||||
|
"""Makes lowercase same as uppercase. Note that this is one-way overwrite. It doesn't check if a character already exists, and it won't fill in uppercase using lowercase."""
|
||||||
|
|
||||||
def getOldLayoutValue(self) -> int:
|
def getOldLayoutValue(self) -> int:
|
||||||
val = 0
|
val = 0
|
||||||
@ -177,6 +251,7 @@ class FIGletFontWriter:
|
|||||||
self.maxLength = maxWidth + 2
|
self.maxLength = maxWidth + 2
|
||||||
|
|
||||||
def createFigFileData(self) -> str:
|
def createFigFileData(self) -> str:
|
||||||
|
"""Generates the FIGlet file data for the current font."""
|
||||||
output = ''
|
output = ''
|
||||||
self.fixFigChars()
|
self.fixFigChars()
|
||||||
|
|
||||||
@ -193,6 +268,8 @@ class FIGletFontWriter:
|
|||||||
return output
|
return output
|
||||||
|
|
||||||
def extract_textures(image_path: str):
|
def extract_textures(image_path: str):
|
||||||
|
"""Removes the border around glyphs in an image, saves a new image without the border, and converts the image into FIGlet format font files."""
|
||||||
|
|
||||||
# Open the image
|
# Open the image
|
||||||
image = Image.open(image_path)
|
image = Image.open(image_path)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user