diff --git a/demo/js/ttfparse.js b/demo/js/ttfparse.js index 2dd9b3b..39dc197 100644 --- a/demo/js/ttfparse.js +++ b/demo/js/ttfparse.js @@ -41,7 +41,7 @@ define( upFile.addEventListener('change', onUpFileChange); ajaxBinaryFile({ - url: '../font/baiduHealth.ttf', + url: '../test/baiduHealth.ttf', onSuccess: function(binaryData) { var ttfReader = new ttfreader(); var ttfData = ttfReader.read(binaryData); diff --git a/src/common/string.js b/src/common/string.js index 714ee7a..4866265 100644 --- a/src/common/string.js +++ b/src/common/string.js @@ -102,6 +102,7 @@ define( * @return {string} 字符串 */ pad: function(str, size, ch) { + str = String(str); if(str.length > size) { return str.slice(str.length - size); } diff --git a/src/fonteditor/dialog/setting-name.js b/src/fonteditor/dialog/setting-name.js index 79ce2d0..1247a00 100644 --- a/src/fonteditor/dialog/setting-name.js +++ b/src/fonteditor/dialog/setting-name.js @@ -15,7 +15,7 @@ define( + '' + '' + '
' - + '字体子家族' + + '子字体家族' + '' + '
' + '
' @@ -29,34 +29,36 @@ define( + '
' + 'PostScript名称' + '' + + '
' + + '
' + + 'em框大小' + + '' + + '
' + + '
' + + '最小可读尺寸' + + '' + + '
' + + '
' + + '创建日期' + + '' + '
'; return require('./setting').derive({ - title: '命名信息', + title: '字体信息', getTpl: function() { return tpl; }, set: function(setting) { - this.getDialog().find('[data-field]').each(function(i, item) { - item = $(item); - item.val(setting[item.attr('data-field')] || ''); - }); + this.setFields(setting); }, validate: function() { - var name = {}; - this.getDialog().find('[data-field]').each(function(i, item) { - item = $(item); - var val = item.val().trim(); - if (val) { - name[item.attr('data-field')] = val; - } - }); - return name; + var setting = this.getFields(); + return setting; } }); diff --git a/src/fonteditor/dialog/setting.js b/src/fonteditor/dialog/setting.js index 07e3b19..21e9210 100644 --- a/src/fonteditor/dialog/setting.js +++ b/src/fonteditor/dialog/setting.js @@ -11,6 +11,7 @@ define( function(require) { var lang = require('common/lang'); var observable = require('common/observable'); + var pad = require('common/string').pad; /** * 设置框函数 @@ -91,6 +92,21 @@ define( if (item.type == 'checkbox') { item.checked = setting[item.getAttribute('data-field')] ? 'checked' : ''; } + else if (item.type == 'datetime-local') { + var val = setting[item.getAttribute('data-field')]; + var date; + if (typeof(val) === 'string') { + date = new Date(Date.parse(val)); + } + else if(/^\d+$/.test(val)) { + date = new Date(+val); + } + else { + date = val; + } + item.value = date.getFullYear() + '-' + pad(date.getMonth() + 1, 2) + '-' + pad(date.getDate(), 2) + + 'T' + pad(date.getHours(), 2) + ':' + pad(date.getMinutes(), 2); + } else { item = $(item); item.val(setting[item.attr('data-field')]); @@ -113,11 +129,26 @@ define( setting[item.getAttribute('data-field')] = true; } } + else if (item.type == 'datetime-local') { + if (item.value) { + setting[item.getAttribute('data-field')] = Date.parse(item.value.replace('T', ' ')); + } + } + else if (item.type == 'number') { + if (item.value) { + var val = +item.value; + if (item.getAttribute('data-ceil')) { + val = Math.floor(val); + } + setting[item.getAttribute('data-field')] = val; + } + } + else { item = $(item); var val = item.val().trim(); if (val) { - setting[item.attr('data-field')] = item.attr('data-ceil') ? Math.floor(val) : +val ; + setting[item.attr('data-field')] = val; } } }); diff --git a/src/fonteditor/ttf/main.js b/src/fonteditor/ttf/main.js index 0773af9..cf60747 100644 --- a/src/fonteditor/ttf/main.js +++ b/src/fonteditor/ttf/main.js @@ -25,8 +25,8 @@ define( var setting = { 'unicode': require('../dialog/setting-unicode'), 'name': require('../dialog/setting-name'), - 'adjust-pos': require('../dialog/setting-adjust-pos'), - 'adjust-glyf': require('../dialog/setting-adjust-glyf'), + //'adjust-pos': require('../dialog/setting-adjust-pos'), + //'adjust-glyf': require('../dialog/setting-adjust-glyf'), 'online': require('../dialog/font-online') } @@ -152,10 +152,10 @@ define( if (ttf) { var dlg = new setting.name({ onChange: function(setting) { - program.ttfmanager.setName(setting); + program.ttfmanager.setInfo(setting); } }); - dlg.show(ttf.name); + dlg.show($.extend({}, ttf.head, ttf.name)); } }, diff --git a/src/fonteditor/widget/ttfmanager.js b/src/fonteditor/widget/ttfmanager.js index 6e9bc84..59fcd90 100644 --- a/src/fonteditor/widget/ttfmanager.js +++ b/src/fonteditor/widget/ttfmanager.js @@ -234,12 +234,22 @@ define( }; /** - * 撤销 + * 设置名字和头部信息 * @return {this} */ - Manager.prototype.setName = function(name) { - this.ttf.setName(name); - return this; + Manager.prototype.setInfo = function(info) { + var changed = false; + if (this.ttf.get().head.unitsPerEm != info.unitsPerEm) { + changed = true; + } + this.ttf.setName(info); + this.ttf.setHead(info); + + if (changed) { + this.fireChange(false); + } + + return this; }; /** diff --git a/src/ttf/ttf.js b/src/ttf/ttf.js index b838de7..17ef4fc 100644 --- a/src/ttf/ttf.js +++ b/src/ttf/ttf.js @@ -430,6 +430,26 @@ define( return this.ttf.name; }; + /** + * 设置head信息 + * + * @return {Object} 头对象 + */ + TTF.prototype.setHead = function(head) { + if (head) { + + // unitsperem + if (head.unitsPerEm && head.unitsPerEm >= 64 && head.unitsPerEm <= 16384) { + this.ttf.head.unitsPerEm = head.unitsPerEm; + } + + // lowestrecppem + if (head.lowestRecPPEM && head.lowestRecPPEM >= 8 && head.lowestRecPPEM <= 16384) { + this.ttf.head.lowestRecPPEM = head.lowestRecPPEM; + } } + return this.ttf.head; + }; + return TTF; } ); diff --git a/src/ttf/ttfwriter.js b/src/ttf/ttfwriter.js index c0f020d..1f3d0db 100644 --- a/src/ttf/ttfwriter.js +++ b/src/ttf/ttfwriter.js @@ -47,6 +47,11 @@ define( // 重置校验码 ttf.head.checkSumAdjustment = 0; ttf.head.magickNumber = 0x5F0F3CF5; + if (typeof(ttf.head.created) == 'string') { + ttf.head.created = /^\d+$/.test(ttf.head.created) ? +ttf.head.created : Date.parse(ttf.head.created); + } + ttf.head.created = Date.now(); + ttf.head.modified = Date.now(); // 将glyf的代码点按小到大排序 ttf.glyf.forEach(function(glyf) { diff --git a/src/ttf/writer.js b/src/ttf/writer.js index dca1e68..32fb90a 100644 --- a/src/ttf/writer.js +++ b/src/ttf/writer.js @@ -260,12 +260,15 @@ define( var delta = -2077545600000; // new Date(1970, 1, 1).getTime() - new Date(1904, 1, 1).getTime(); - if (typeof value === 'undefined') { + if (typeof(value) === 'undefined') { value = delta; } - else if (typeof value.getTime === 'function') { + else if (typeof(value.getTime) === 'function') { value = value.getTime(); } + else if (/^\d+$/.test(value)){ + value = +value; + } else { value = Date.parse(value); }