diff --git a/index.html b/index.html index afc2e0e..45bb5fe 100644 --- a/index.html +++ b/index.html @@ -73,8 +73,8 @@
diff --git a/src/ttf/svg/path2contours.js b/src/ttf/svg/path2contours.js index c8fa9f9..1b761a4 100644 --- a/src/ttf/svg/path2contours.js +++ b/src/ttf/svg/path2contours.js @@ -23,14 +23,20 @@ define( */ function cubic2Points(cubicList, contour) { + var i; + var l; var q2List = []; + cubicList.forEach(function (c) { - q2List = q2List.concat(bezierCubic2Q2(c[0], c[1], c[2], c[3])); + var list = bezierCubic2Q2(c[0], c[1], c[2], c[3]); + for (i = 0, l = list.length; i < l; i++) { + q2List.push(list[i]); + } }); var q2; var prevq2; - for (var i = 0, l = q2List.length; i < l; i++) { + for (i = 0, l = q2List.length; i < l; i++) { q2 = q2List[i]; if (i === 0) { contour.push({ diff --git a/src/ttf/table/DSIG.js b/src/ttf/table/DSIG.js deleted file mode 100644 index fc95517..0000000 --- a/src/ttf/table/DSIG.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @file DSIG.js - * @author mengke01 - * @date - * @description - * DSIG表 - * Digital Signature Table - * - * 暂不支持数字签名解析 - * http://www.microsoft.com/typography/otspec/dsig.htm - */ - - -define( - function (require) { - var table = require('./table'); - var struct = require('./struct'); - var DSIG = table.create( - 'DSIG', - [ - ['ulVersion', struct.Uint32], - ['usNumSigs', struct.Uint16], - ['usFlag', struct.Uint16] - ] - ); - - return DSIG; - } -); diff --git a/src/ttf/table/GDEF.js b/src/ttf/table/GDEF.js deleted file mode 100644 index fe3dfca..0000000 --- a/src/ttf/table/GDEF.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @file GDEF.js - * @author mengke01 - * @date - * @description - * GDEF表 - * The Glyph Definition Table - * 暂不支持解析子表,因此四个offset为0 - * http://www.microsoft.com/typography/otspec/gdef.htm - */ - - -define( - function (require) { - var table = require('./table'); - var struct = require('./struct'); - var GDEF = table.create( - 'GDEF', - [ - ['Version', struct.Uint32], - ['GlyphClassDef', struct.Uint16], - ['AttachList', struct.Uint16], - ['LigCaretList', struct.Uint16], - ['MarkAttachClassDef', struct.Uint16] - ] - ); - - return GDEF; - } -); diff --git a/src/ttf/table/GPOS.js b/src/ttf/table/GPOS.js deleted file mode 100644 index 78ad90e..0000000 --- a/src/ttf/table/GPOS.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @file GPOS.js - * @author mengke01 - * @date - * @description - * GPOS表 - * The Glyph Positioning Table - * 暂不支持解析 ScriptList,FeatureList,LookupList 表 - * - * http://www.microsoft.com/typography/otspec/gpos.htm - * http://www.microsoft.com/typography/otspec/chapter2.htm - */ - - -define( - function (require) { - - var table = require('./table'); - - var GPOS = table.create( - 'GPOS', - [], - { - - read: function (reader) { - reader.seek(this.offset); - var gpos = {}; - gpos.Version = reader.readFixed(); - gpos.ScriptList = reader.readUint16(); - gpos.FeatureList = reader.readUint16(); - gpos.LookupList = reader.readUint16(); - // 脚本表 - gpos.ScriptTbl = { - ScriptCount: reader.readUint16(this.offset + gpos.ScriptList) - }; - - // 特征表 - gpos.FeatureTbl = false; - // 查找表 - gpos.LookupTbl = false; - - return gpos; - } - } - ); - - return GPOS; - } -); diff --git a/src/ttf/table/GSUB.js b/src/ttf/table/GSUB.js deleted file mode 100644 index 1e927fd..0000000 --- a/src/ttf/table/GSUB.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @file GSUB.js - * @author mengke01 - * @date - * @description - * GSUB表 - * The Glyph Substitution Table - * 暂不支持解析 ScriptList,FeatureList,LookupList 表 - * - * http://www.microsoft.com/typography/otspec/gsub.htm - * http://www.microsoft.com/typography/otspec/chapter2.htm - */ - - -define( - function (require) { - var table = require('./table'); - var ScriptList = require('./ScriptList'); - var GSUB = table.create( - 'GSUB', - [], - { - - read: function (reader) { - reader.seek(this.offset); - var gsub = {}; - gsub.Version = reader.readFixed(); - gsub.ScriptList = reader.readUint16(); - gsub.FeatureList = reader.readUint16(); - gsub.LookupList = reader.readUint16(); - - // 读取脚本表 - var scriptList = new ScriptList(this.offset + gsub.ScriptList); - gsub.ScriptTbl = scriptList.read(reader, { - gsub: gsub - }); - - // 特征表 - gsub.FeatureTbl = false; - - // 查找表 - gsub.LookupTbl = false; - - return gsub; - } - } - ); - - return GSUB; - } -); diff --git a/src/ttf/table/ScriptList.js b/src/ttf/table/ScriptList.js deleted file mode 100644 index ef0e447..0000000 --- a/src/ttf/table/ScriptList.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @file ScriptList.js - * @author mengke01 - * @date - * @description - * 脚本表 - * 仅完成语言系统解析 - * http://www.microsoft.com/typography/otspec/chapter2.htm - */ - - -define( - function (require) { - var table = require('./table'); - - var scriptList = table.create( - 'ScriptList', - [], - { - - read: function (reader) { - reader.seek(this.offset); - var ScriptCount = reader.readUint16(); - - // script records - var records = []; - var record; - var i; - var j; - var l; - - for (i = 0, l = ScriptCount; i < l; i++) { - record = { - ScriptTag: reader.readUint32(), - Offset: reader.readUint16() - }; - records.push(record); - } - - // script table - var offset = this.offset; - for (i = 0, l = records.length; i < l; i++) { - record = records[i]; - reader.seek(offset + record.Offset); - record.DefaultLangSys = reader.readUint16(); - var LangSysCount = reader.readUint16(); - record.LangSysRecord = []; - - // 此处解析语言系统 - for (j = 0, l = LangSysCount; j < l; j++) { - var langSysRecord = { - LangSysTag: reader.readUint32(), - LangSys: reader.readUint16() - }; - record.LangSysRecord.push(langSysRecord); - } - } - - return records; - } - } - ); - - return scriptList; - } -); diff --git a/src/ttf/table/directory.js b/src/ttf/table/directory.js index 477cdc7..1d3b2ab 100644 --- a/src/ttf/table/directory.js +++ b/src/ttf/table/directory.js @@ -4,6 +4,8 @@ * @date * @description * directory 表, 读取ttf表索引 + * + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html */ @@ -13,8 +15,7 @@ define( var directory = table.create( 'directory', - [ - ], + [], { read: function (reader, ttf) { var tables = {}; diff --git a/src/ttf/table/gasp.js b/src/ttf/table/gasp.js deleted file mode 100644 index 5d6a42d..0000000 --- a/src/ttf/table/gasp.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @file gasp.js - * @author mengke01 - * @date - * @description - * gasp表 - * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6gasp.html - */ - -define( - function (require) { - var table = require('./table'); - - var gasp = table.create( - 'gasp', - [], - { - - read: function (reader) { - var offset = this.offset; - var gasp = {}; - - reader.seek(offset); - - gasp.version = reader.readUint16(); - gasp.numRanges = reader.readUint16(); - - var GASPRangeTbl = []; - for (var i = 0; i < gasp.numRanges; ++i) { - var GASPRange = {}; - GASPRange.rangeMaxPPEM = reader.readUint16(); - GASPRange.rangeGaspBehavior = reader.readUint16(); - GASPRangeTbl.push(GASPRange); - } - - gasp.GASPRangeTbl = GASPRangeTbl; - return gasp; - } - } - ); - - return gasp; - } -); diff --git a/src/ttf/table/glyfwriter.js b/src/ttf/table/glyfwriter.js index 359969d..6e035d9 100644 --- a/src/ttf/table/glyfwriter.js +++ b/src/ttf/table/glyfwriter.js @@ -27,10 +27,8 @@ define( return 0; } - // fixed header + instructions + endPtsOfContours - var result = 10 - + 2 - // + (glyf.instructions ? glyf.instructions.length : 0) + // fixed header + endPtsOfContours + var result = 12 + glyf.contours.length * 2 + glyfSupport.flags.length; @@ -81,9 +79,6 @@ define( }); - // if (glyf.instructions) { - // size += 2 + glyf.instructions.length; - // } return size; } @@ -267,8 +262,6 @@ define( var g = glyf.glyfs[i]; - // instructions - // flags += glyf.instructions ? componentFlag.WE_HAVE_INSTRUCTIONS : 0; // use my metrics flags += g.useMyMetrics ? componentFlag.USE_MY_METRICS : 0; // overlap compound @@ -328,14 +321,6 @@ define( } } - // if (glyf.instructions) { - // var instructions = glyf.instructions; - // writer.writeUint16(instructions.length); - // for (var i = 0, l = instructions.length; i < l; i++) { - // writer.writeUint8(instructions[i] & 0xFF); - // } - // } - } else { @@ -346,16 +331,7 @@ define( }); // not support instruction - // if (glyf.instructions) { - // var instructions = glyf.instructions; - // writer.writeUint16(instructions.length); - // for (var i = 0, l = instructions.length; i < l; i++) { - // writer.writeUint8(instructions[i] & 0xFF); - // } - // } - // else { writer.writeUint16(0); - // } // 获取暂存中的flags flags = ttf.support.glyf[index].flags; diff --git a/src/ttf/table/struct.js b/src/ttf/table/struct.js index a26e757..b680738 100644 --- a/src/ttf/table/struct.js +++ b/src/ttf/table/struct.js @@ -4,6 +4,8 @@ * @date * @description * 基本数据结构 + * + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html */ @@ -19,22 +21,19 @@ define( Uint32: 6, Fixed: 7, // 32-bit signed fixed-point number (16.16) FUnit: 8, // Smallest measurable distance in the em space - // 16-bit signed integer (SHORT) that describes a quantity in FUnits. - // FWord: 9, - // Unsigned 16-bit integer (USHORT) that describes a quantity in FUnits - // UFWord: 10, // 16-bit signed fixed number with the low 14 bits of fraction F2Dot14: 11, // The long internal format of a date in seconds since 12:00 midnight, // January 1, 1904. It is represented as a signed 64-bit integer. LongDateTime: 12, + // extend data type Char: 13, String: 14, Bytes: 15 }; - // 翻转名字查找 + // 反转名字查找 var names = {}; Object.keys(struct).forEach(function (key) { names[struct[key]] = key;