39 from modules
import glcdsource
40 from modules
import fontgenerator
42 def print_help_and_exit():
43 sys.stderr.write(
"Usage: ttf_fonts.py [args] > outputFile\n")
44 sys.stderr.write(
"args:\n")
45 sys.stderr.write(
" --ttf S use ttf name as source\n")
46 sys.stderr.write(
" --glcd S use glcd file as as source\n")
47 sys.stderr.write(
" -s <N> font size (this is not pixels!) \n")
48 sys.stderr.write(
" -SB <N> limit size in pixels to value (pixels will be cut)\n")
49 sys.stderr.write(
" -fh fixed height\n")
50 sys.stderr.write(
" -fw fixed width\n")
51 sys.stderr.write(
" -g <S> <E> [W] add chars group to the font\n")
52 sys.stderr.write(
" where <S> - first char hex or binary code, or char symbol\n")
53 sys.stderr.write(
" <E> - chars count minus 1 (integer), or char symbol\n")
54 sys.stderr.write(
" <W> - optional exact width in pixels for this group\n")
55 sys.stderr.write(
" (new format only). Narrow chars are padded and\n")
56 sys.stderr.write(
" centered; wider chars are cropped. Do not mix\n")
57 sys.stderr.write(
" with -fw.\n")
58 sys.stderr.write(
" -f old old format 1.7.6 and below\n")
59 sys.stderr.write(
" -f new new format 1.7.8 and above\n")
60 sys.stderr.write(
" -d Print demo text to console\n")
61 sys.stderr.write(
" -t text Use text as demo text\n")
62 sys.stderr.write(
" --demo-only Prints demo text to console and exits\n")
63 sys.stderr.write(
" --output-file Saves the output to a file directly\n")
64 sys.stderr.write(
"Examples:\n")
65 sys.stderr.write(
" [convert ttf font to old format]\n")
66 sys.stderr.write(
" ttf_fonts.py --ttf FreeSans.ttf -s 8 -f old > font.h\n")
67 sys.stderr.write(
" [convert ttf font to new format with demo text and print to console]\n")
68 sys.stderr.write(
" ttf_fonts.py --ttf FreeSans.ttf -d -f new\n")
69 sys.stderr.write(
" [convert GLCD font generated file to new format]\n")
70 sys.stderr.write(
" ttf_fonts.py --glcd font.c -f new > font.h\n")
86 demo_text_ =
"World!q01" 93 while idx < len(sys.argv):
102 fname = sys.argv[idx]
105 fsize = int(sys.argv[idx])
108 flimit_bottom = int(sys.argv[idx])
115 if sys.argv[idx] ==
"old":
119 _start_char = sys.argv[idx]
120 if re.search(
r'0x\d*', _start_char)
is not None:
121 code = int(_start_char, 16)
122 if sys.version_info < (3, 0):
123 _start_char = unichr(code)
125 _start_char = chr(code)
126 elif _start_char.isdigit()
and len(_start_char) > 1:
127 if sys.version_info < (3, 0):
128 _start_char = unichr(int(_start_char))
130 _start_char = chr(int(_start_char))
132 if sys.version_info < (3, 0):
133 _start_char = _start_char.decode(
"utf-8")
135 _end_char = sys.argv[idx]
136 if _end_char.isdigit():
137 char_count = int(_end_char)
139 sys.stderr.write(
"Number of characters in single block cannot be more than 255\n")
141 if sys.version_info < (3, 0):
142 _end_char = unichr(ord(_start_char) + int(_end_char))
144 _end_char = chr(ord(_start_char) + int(_end_char))
146 if sys.version_info < (3, 0):
147 _end_char = _end_char.decode(
"utf-8")
148 if ord(_end_char) - ord(_start_char) + 1 > 255:
149 sys.stderr.write(
"Number of characters in single block cannot be more than 255\n")
155 if idx + 1 < len(sys.argv)
and sys.argv[idx + 1].isdigit():
157 _group_width = int(sys.argv[idx])
158 fgroups.append( (_start_char, _end_char, _group_width) )
163 demo_text_ = sys.argv[idx]
164 elif opt ==
"--demo-only":
165 generate_font =
False 167 elif opt ==
"--output-file":
169 output_file = sys.argv[idx]
171 sys.stderr.write(
"Unknown option: {0}".format(opt))
172 print_help_and_exit()
176 from modules
import ttfsource
177 source = ttfsource.TTFSource(fname, fsize)
178 if len(fgroups) == 0:
179 if sys.version_info < (3, 0):
180 fgroups.append((
' ', unichr(127),
None))
182 fgroups.append((
' ', chr(127),
None))
184 source.add_chars(g[0], g[1])
186 source.set_group_width(source.groups_count() - 1, g[2])
189 source = glcdsource.GLCDSource(fname, fsize,
"utf8")
192 print_help_and_exit()
195 source.expand_chars_h()
197 source.expand_chars_v()
198 if flimit_bottom > 0:
199 source.deflate_chars_bottom( flimit_bottom )
201 font = fontgenerator.Generator( source )
203 source.expand_chars()
206 if sys.version_info < (3, 0):
207 demo_array = source.getString(demo_text_.decode(
"utf-8"))
209 demo_array = source.getString(demo_text_)
211 font.generate_fixed_old(demo_array, output_file)
215 if sys.version_info < (3, 0):
216 demo_array = source.getString(demo_text_.decode(
"utf-8"))
218 demo_array = source.getString(demo_text_)
220 font.generate_new_format(demo_array, output_file)