Merge pull request #192 from yuki-takeichi/big-glyph-metrics
Use big glyph metrics to support vertical text renderingpull/193/head
commit
09d8fd121a
|
@ -100,7 +100,7 @@ class CBDT:
|
||||||
del self.strike_metrics
|
del self.strike_metrics
|
||||||
return glyph_maps
|
return glyph_maps
|
||||||
|
|
||||||
def write_smallGlyphMetrics (self, width, height):
|
def write_bigGlyphMetrics (self, width, height):
|
||||||
|
|
||||||
ascent = self.font_metrics.ascent
|
ascent = self.font_metrics.ascent
|
||||||
descent = self.font_metrics.descent
|
descent = self.font_metrics.descent
|
||||||
|
@ -116,19 +116,29 @@ class CBDT:
|
||||||
if y_bearing == 128:
|
if y_bearing == 128:
|
||||||
y_bearing = 127
|
y_bearing = 127
|
||||||
advance = width
|
advance = width
|
||||||
# print "small glyph metrics h: %d w: %d" % (height, width)
|
|
||||||
# smallGlyphMetrics
|
vert_x_bearing = - width / 2
|
||||||
|
vert_y_bearing = 0
|
||||||
|
vert_advance = height
|
||||||
|
|
||||||
|
# print "big glyph metrics h: %d w: %d" % (height, width)
|
||||||
|
# bigGlyphMetrics
|
||||||
# Type Name
|
# Type Name
|
||||||
# BYTE height
|
# BYTE height
|
||||||
# BYTE width
|
# BYTE width
|
||||||
# CHAR BearingX
|
# CHAR horiBearingX
|
||||||
# CHAR BearingY
|
# CHAR horiBearingY
|
||||||
# BYTE Advance
|
# BYTE horiAdvance
|
||||||
|
# CHAR vertBearingX
|
||||||
|
# CHAR vertBearingY
|
||||||
|
# BYTE vertAdvance
|
||||||
try:
|
try:
|
||||||
self.write (struct.pack ("BBbbB",
|
self.write (struct.pack ("BBbbBbbB",
|
||||||
height, width,
|
height, width,
|
||||||
x_bearing, y_bearing,
|
x_bearing, y_bearing,
|
||||||
advance))
|
advance,
|
||||||
|
vert_x_bearing, vert_y_bearing,
|
||||||
|
vert_advance))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ValueError("%s, h: %d w: %d x: %d y: %d %d a:" % (
|
raise ValueError("%s, h: %d w: %d x: %d y: %d %d a:" % (
|
||||||
e, height, width, x_bearing, y_bearing, advance))
|
e, height, width, x_bearing, y_bearing, advance))
|
||||||
|
@ -164,14 +174,14 @@ class CBDT:
|
||||||
|
|
||||||
png_allowed_chunks = ["IHDR", "PLTE", "tRNS", "sRGB", "IDAT", "IEND"]
|
png_allowed_chunks = ["IHDR", "PLTE", "tRNS", "sRGB", "IDAT", "IEND"]
|
||||||
|
|
||||||
def write_format17 (self, png):
|
def write_format18 (self, png):
|
||||||
|
|
||||||
width, height = png.get_size ()
|
width, height = png.get_size ()
|
||||||
|
|
||||||
if 'keep_chunks' not in self.options:
|
if 'keep_chunks' not in self.options:
|
||||||
png = png.filter_chunks (self.png_allowed_chunks)
|
png = png.filter_chunks (self.png_allowed_chunks)
|
||||||
|
|
||||||
self.write_smallGlyphMetrics (width, height)
|
self.write_bigGlyphMetrics (width, height)
|
||||||
|
|
||||||
png_data = png.data ()
|
png_data = png.data ()
|
||||||
# ULONG data length
|
# ULONG data length
|
||||||
|
@ -180,7 +190,7 @@ class CBDT:
|
||||||
|
|
||||||
def image_write_func (self, image_format):
|
def image_write_func (self, image_format):
|
||||||
if image_format == 1: return self.write_format1
|
if image_format == 1: return self.write_format1
|
||||||
if image_format == 17: return self.write_format17
|
if image_format == 18: return self.write_format18
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -395,7 +405,7 @@ that the font already supports, and writes the new font out.
|
||||||
If -V is given, verbose mode is enabled.
|
If -V is given, verbose mode is enabled.
|
||||||
|
|
||||||
If -U is given, uncompressed images are stored (imageFormat=1).
|
If -U is given, uncompressed images are stored (imageFormat=1).
|
||||||
By default, PNG images are stored (imageFormat=17).
|
By default, PNG images are stored (imageFormat=18).
|
||||||
|
|
||||||
If -O is given, the outline tables ('glyf', 'CFF ') and
|
If -O is given, the outline tables ('glyf', 'CFF ') and
|
||||||
related tables are NOT dropped from the font.
|
related tables are NOT dropped from the font.
|
||||||
|
@ -442,7 +452,7 @@ By default they are dropped.
|
||||||
if not unicode_cmap:
|
if not unicode_cmap:
|
||||||
raise Exception ("Failed to find a Unicode cmap.")
|
raise Exception ("Failed to find a Unicode cmap.")
|
||||||
|
|
||||||
image_format = 1 if 'uncompressed' in options else 17
|
image_format = 1 if 'uncompressed' in options else 18
|
||||||
|
|
||||||
ebdt = CBDT (font_metrics, options)
|
ebdt = CBDT (font_metrics, options)
|
||||||
ebdt.write_header ()
|
ebdt.write_header ()
|
||||||
|
|
Loading…
Reference in New Issue