Pablo Arantes wrote:
> I contacted the author of Pragmata to share my concerns but he
> couldn't help me much in this respect. I explained him the problem but
> I'm not sure he understood it.
I emailed him too. We share our first language, so maybe he will
understand me better.
> I wonder if there is a feasible way to change this specification myself.
I had a look at the TTF file format[1] and it's quite easy. I have
attached a small Python script that will query, set or clear the
monospaced flag on a TTF file. Run it with no arguments to get help.
Remember to operate on a copy of the font file and to install/uninstall
the font through Windows's Control Panel. That is: make a copy of the
font file; set the flag on it; uninstall the currently installed font;
install the modified version; profit.
Tobia
[1]
http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6.html
http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6post.html
#!/usr/bin/python
import sys, getopt, struct
def get_post_off(f):
f.seek(0)
data = f.read(512)
post_off = None
for i in range(30):
off = 12 + 16 * i
tag = data[off : off + 4]
if tag == 'post':
post_off = struct.unpack('>I', data[off + 8 : off +
12])[0]
break
if not post_off:
raise 'ERROR: cannot find table "post" in the font directory'
return post_off
def get_mono(f):
post_off = get_post_off(f)
f.seek(post_off + 12)
mono = struct.unpack('>i', f.read(4))[0]
return mono
def set_mono(f, n):
post_off = get_post_off(f)
f.seek(post_off + 12)
f.write(struct.pack('>i', n))
if __name__ == '__main__':
def usage():
print 'usage: ttfmono [-su] <file.ttf>'
print ' -s set the monospaced flag'
print ' -u unset the monospaced flag'
print ' otherwise: query the monospaced flag'
sys.exit(1)
opts, args = getopt.getopt(sys.argv[1:], 'su')
opts = dict(opts)
opt_set = '-s' in opts
opt_unset = '-u' in opts
if len(args) != 1: usage()
if opt_set and opt_unset: usage()
if opt_set or opt_unset:
ttf_file = open(args[0], 'r+')
else:
ttf_file = open(args[0])
if not ttf_file: usage()
if opt_set:
set_mono(ttf_file, 1)
elif opt_unset:
set_mono(ttf_file, 0)
print 'monospaced flag =', get_mono(ttf_file)
print >>sys.stderr, '(0 = variable-width, otherwise = monospaced)'
ttf_file.close()