diff --git a/Doc/documentation.html b/Doc/documentation.html index 748f5f749..0c9beadce 100644 --- a/Doc/documentation.html +++ b/Doc/documentation.html @@ -42,7 +42,11 @@ When using TTX from the command line there are a bunch of extra options, these a The following tables are currently supported:
+<<<<<<< HEAD BASE, CFF, DSIG, EBDT, EBLC, GDEF, GMAP, GPKG, GPOS, GSUB, JSTF, LTSH, META, OS/2, SING, TSI0, TSI1, TSI2, TSI3, TSI5, TSIB, TSID, TSIJ, TSIP, TSIS, TSIV, VORG, cmap, cvt, fpgm, gasp, glyf, hdmx, head, hhea, hmtx, kern, loca, maxp, name, post, prep, vhea and vmtx +======= +BASE, CBDT, CBLC, CFF, COLR, CPAL, DSIG, EBDT, EBLC, GDEF, GMAP, GPKG, GPOS, GSUB, JSTF, LTSH, META, OS/2, SING, TSI0, TSI1, TSI2, TSI3, TSI5, TSIB, TSID, TSIJ, TSIP, TSIS, TSIV, VORG, cmap, cvt, fpgm, gasp, glyf, hdmx, head, hhea, hmtx, kern, loca, maxp, name, post, prep, vhea and vmtx +>>>>>>> 305bad8... Add support for Google CBLC/CBDT color bitmapsOther tables are dumped as hexadecimal data. diff --git a/Lib/fontTools/ttLib/tables/C_B_D_T_.py b/Lib/fontTools/ttLib/tables/C_B_D_T_.py new file mode 100644 index 000000000..676f0be81 --- /dev/null +++ b/Lib/fontTools/ttLib/tables/C_B_D_T_.py @@ -0,0 +1,88 @@ + +import E_B_D_T_ +import string +import struct +import sstruct +from BitmapGlyphMetrics import BigGlyphMetrics, bigGlyphMetricsFormat, SmallGlyphMetrics, smallGlyphMetricsFormat +from E_B_D_T_ import BitmapGlyph, BitmapPlusSmallMetricsMixin, BitmapPlusBigMetricsMixin + +class table_C_B_D_T_(E_B_D_T_.table_E_B_D_T_): + + # Change the data locator table being referenced. + locatorName = 'CBLC' + + # Modify the format class accessor for color bitmap use. + def getImageFormatClass(self, imageFormat): + try: + return E_B_D_T_.table_E_B_D_T_.getImageFormatClass(self, imageFormat) + except KeyError: + return cbdt_bitmap_classes[imageFormat] + +# Helper method for removing export features not supported by color bitmaps. +# Write data in the parent class will default to raw if an option is unsupported. +def _removeUnsupportedForColor(dataFunctions): + dataFunctions = dict(dataFunctions) + del dataFunctions['row'] + return dataFunctions + +class ColorBitmapGlyph(BitmapGlyph): + + fileExtension = '.png' + xmlDataFunctions = _removeUnsupportedForColor(BitmapGlyph.xmlDataFunctions) + +class cbdt_bitmap_format_17(BitmapPlusSmallMetricsMixin, ColorBitmapGlyph): + + def decompile(self): + self.metrics = SmallGlyphMetrics() + dummy, data = sstruct.unpack2(smallGlyphMetricsFormat, self.data, self.metrics) + (dataLen,) = struct.unpack(">L", data[:4]) + data = data[4:] + + # For the image data cut it to the size specified by dataLen. + assert dataLen <= len(data), "Data overun in format 17" + self.imageData = data[:dataLen] + + def compile(self, ttFont): + dataList = [] + dataList.append(sstruct.pack(smallGlyphMetricsFormat, self.metrics)) + dataList.append(struct.pack(">L", len(self.imageData))) + dataList.append(self.imageData) + return string.join(dataList, "") + +class cbdt_bitmap_format_18(BitmapPlusBigMetricsMixin, ColorBitmapGlyph): + + def decompile(self): + self.metrics = BigGlyphMetrics() + dummy, data = sstruct.unpack2(bigGlyphMetricsFormat, self.data, self.metrics) + (dataLen,) = struct.unpack(">L", data[:4]) + data = data[4:] + + # For the image data cut it to the size specified by dataLen. + assert dataLen <= len(data), "Data overun in format 18" + self.imageData = data[:dataLen] + + def compile(self, ttFont): + dataList = [] + dataList.append(sstruct.pack(bigGlyphMetricsFormat, self.metrics)) + dataList.append(struct.pack(">L", len(self.imageData))) + dataList.append(self.imageData) + return string.join(dataList, "") + +class cbdt_bitmap_format_19(ColorBitmapGlyph): + + def decompile(self): + (dataLen,) = struct.unpack(">L", self.data[:4]) + data = self.data[4:] + + assert dataLen <= len(data), "Data overun in format 19" + self.imageData = data[:dataLen] + + def compile(self, ttFont): + return struct.pack(">L", len(self.imageData)) + self.imageData + +# Dict for CBDT extended formats. +cbdt_bitmap_classes = { + 17: cbdt_bitmap_format_17, + 18: cbdt_bitmap_format_18, + 19: cbdt_bitmap_format_19, +} diff --git a/Lib/fontTools/ttLib/tables/C_B_L_C_.py b/Lib/fontTools/ttLib/tables/C_B_L_C_.py new file mode 100644 index 000000000..1bd666d46 --- /dev/null +++ b/Lib/fontTools/ttLib/tables/C_B_L_C_.py @@ -0,0 +1,6 @@ + +import E_B_L_C_ + +class table_C_B_L_C_(E_B_L_C_.table_E_B_L_C_): + + dependencies = ['CBDT'] diff --git a/Lib/fontTools/ttLib/tables/__init__.py b/Lib/fontTools/ttLib/tables/__init__.py index 76f363edf..2d92bba47 100644 --- a/Lib/fontTools/ttLib/tables/__init__.py +++ b/Lib/fontTools/ttLib/tables/__init__.py @@ -4,6 +4,8 @@ def _moduleFinderHint(): dynamically imported. Generated by MetaTools/buildTableList.py. """ import B_A_S_E_ + import C_B_D_T_ + import C_B_L_C_ import C_F_F_ import D_S_I_G_ import E_B_D_T_