Add docstrings to FIGletFontWriter

This commit is contained in:
Isaiah Odhner 2023-05-13 03:18:20 -04:00
parent f89a2353ec
commit e2c5fc9af5
2 changed files with 78 additions and 0 deletions

View File

@ -28,6 +28,7 @@
"Bresenham",
"Bresenham's",
"cmdpxl",
"Deutsch",
"DIALOGEX",
"Figlet",
"Fira",

View File

@ -30,8 +30,67 @@ def blankLines(num: int, width: int) -> str:
return '\n'.join(lines)
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]
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__(
self,
@ -50,20 +109,35 @@ class FIGletFontWriter:
caseInsensitive: bool = False
):
self.fontName = fontName
"""Name of the font."""
self.figChars: dict[int, str] = figChars
"""Dictionary that maps character codes to FIGcharacter strings."""
self.height = height
"""Height of a FIGcharacter, in characters."""
self.baseline = baseline
"""Distance from the top of the character to the baseline. If not specified, defaults to height."""
self.maxLength = maxLength
"""Maximum length of a line INCLUDING two endMark characters."""
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
"""Indicates RTL writing direction (or LTR if False)."""
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
"""Invisible character used to prevent smushing."""
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
"""One of 'Full', 'Fitted', 'Universal Smushing', or 'Controlled Smushing'"""
self.verticalLayout = verticalLayout
"""One of 'Full', 'Fitted', 'Universal Smushing', or 'Controlled Smushing'"""
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
"""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
"""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:
val = 0
@ -177,6 +251,7 @@ class FIGletFontWriter:
self.maxLength = maxWidth + 2
def createFigFileData(self) -> str:
"""Generates the FIGlet file data for the current font."""
output = ''
self.fixFigChars()
@ -193,6 +268,8 @@ class FIGletFontWriter:
return output
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
image = Image.open(image_path)