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);
}