From a5e34a31e83fe483882c1e28cda4f27f62f66796 Mon Sep 17 00:00:00 2001 From: kekee000 Date: Mon, 29 Sep 2014 19:42:46 +0800 Subject: [PATCH] modify glyf writer --- demo/js/ttfparse.js | 7 ++++++- font/baiduHealth-ascii.ttf | Bin 0 -> 5040 bytes src/ttf/table/cmap.js | 13 ++++++++++++- src/ttf/table/glyfwriter.js | 37 ++++++++++++++++++++---------------- src/ttf/ttfwriter.js | 2 +- 5 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 font/baiduHealth-ascii.ttf diff --git a/demo/js/ttfparse.js b/demo/js/ttfparse.js index 6e3f1fc..086c7d4 100644 --- a/demo/js/ttfparse.js +++ b/demo/js/ttfparse.js @@ -17,7 +17,12 @@ define( var file = e.target.files[0]; var reader = new FileReader(); reader.onload = function(e) { - var ttf = new ttfreader().read(e.target.result); + + var ttfReader = new ttfreader(); + ttfReader.read(e.target.result); + var ttfData = ttfReader.resolve(); + console.log(ttfData); + } reader.onerror = function(e) { diff --git a/font/baiduHealth-ascii.ttf b/font/baiduHealth-ascii.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dab31b9cd2ea04f2de3c9273ec865c0fa215e591 GIT binary patch literal 5040 zcmbtYYiwM{b)GYK=FYvld-v}9a=Az%{|Jl#w(QhKYc+6@21OqTkQPk? zvftb#X{kl~r@MRS&N*}DoHOT~Idf(iF~(f>JTutx?5QJjfPjf#!rPjgJ$Oh%fS1vP z=1v?x#nLPU_;&!u=1x8N$l{k)zX@miSGGpP@OY{Bn?BqYchOuAc>0Sat9N@2jUmI}w z(&g3b`38Lj@J|5GE?zm;AMR%FU_L-rzTCgQ%qF>s@iTz)Oa069H?RNEpEDNKb6!}! za&?t`mOTggTAx{eZCGFCv2Tuk!kzvl3v$hez3~^{|116e@#8<=$=Jp{zKiYwwAf%6 ztnj;W1*AJ41oDm}?^`r!#S?Bf`V@JVLSuUPH8`Z~Z{{L5v+d;J#C6}+`gax6$)`W7t1;>uHAum8yH+mGC( zZ_V7kJ#$y<_5jU(s)FWgw`bmdd*&Vp?#^I*c;jC5@3 zdOmCFDl$Yu~3emFB64pYRD_gYVtO0gJGwN#p%tk+K$@=>rED-Ya;5-u`BF(;*_O4jUyJ8 z=tcSidWG)LYxHOIm-It=lm3o=PXESrj5NJe(kvCL?P}N4{e;p`r`=ON zt)8y|RIHKN@D=r0A_kJJj!d?iy-uan@&{Bh;bBK~ptXmA!2`8?wJ{&Od*H0CF_7i= zwlJOcwtY%ay9-7Yf6l-}1GBWHzv_L|@}>I=+Ehx5>viO|IlEA>yN@&v%^1t@tqjpg zZ6%m{FLfnU)~l5RBuwWuds=_3zE9t-u7^w#Zdj6-wJjbtjR=pPaTG;lLsn@qzJc(??>!P^6M?6!JLHlxiK`GqD87DDrH4&=iKGHs;-Vbj26{XI4s;}H%3+W5jEG3# zgm_YfL*5V^agx5i0TQ}eK;3}a=3N$J z!>l#PSvu7H7$0OFFM*(LSBol%P1W>N3LB-{F-w(BS8v{;`j7t6{R{hNtWOGtC zWIT}>+MhL{;DnJbXJ|y36)uwLF?#pt;g7176V<04Jz_s|Y~S-Kkxj|pc8cQV;f5{C zT>Ngp@^Q;)Jb$Z*KX%c zBqavtQ2x-s-^Q$yM(>0x4Dn6c1mCY6KQenUh{{=gy5A> zfF@nq5qQl@hl{Z!uezdZuK#Qz&1pw4QV%C$w8p2Ra%R$%UoachPG`87F3Wr`?m9=q zQNAaUI`~l7-5IX)QYmQ|Rwi+bXU5J}j9i%K=X0FrJ(c0~-ekb5r_BQa+4hXkXfj?X zxRtQe%JB9@I+H>>T}wYP#Bq7t}P}dYx*oKZqw)An`ig z(gXMys8$7?rZu)774NwZVcL2X=BoKkT;ZBC{NdNh3rUGW)7Pw>6jtI2#HwxoM}f5zeYi2BE4aJ8_ z$xtC0^-N*7K{JI{JRoRo)KokuRlHuEYE(1%3CT13h_p*po*gCA3QCHUE3@58WQFDf zt=;mGc747Sb!jB!W@E{cXFr+@l55#K9^?rHdk`x12;IOvVVCd69Ccg%E`~o{6vf)D z358nGEPd$RUZta}iSC#TdaGX$(vZQZk-YH|Pq?A%m77Q|h}bMGzeH(+UdXK6d^5=S2My29 zwv%(GQf(k(wNfZJTJ36~Sc*1vj!tNs>X28kmX73lHHvygJ9RJBL7}{czZXiKcBfew zp;E)&#tlC^>aC8s+q-?McJ;TAZ)(k<(Q35diAJ(lBg`8VZ@VF~UTSyfU^rz5aY~Y1 zo5y*B$dz0=w&cc~J3{L}RnCypcFnM11k-Ul8Fg_kQ7nL<{C4tQk%lEe6ehM6p|^h= zHYqH`bLDAtT=AxhR?0UtV2Ce!NjKstIx)rHM{yA+L>=8FOGTyO(V^Y_fJHmb30Lsh zM8%L%C5gZM^!keq4tA|zBosn*r6+FR#vDes+E(-`u@3->f&!~s z_*t|I>^$JZ!1sY&WtZ3oG3d3MSV`&G1;!Bx-B= -0xFF && g.e <= 0xFF && g.f >= 0xFF && g.f <= 0xFF) { + if(t.e >= -0xFF && t.e <= 0xFF && t.f >= 0xFF && t.f <= 0xFF) { size += 2; } else { @@ -65,12 +66,12 @@ define( } // scale - if (g.a != 1 || g.d != 1) { - size += g.a == g.d ? 2 : 4; + if (t.a != 1 || t.d != 1) { + size += t.a == t.d ? 2 : 4; } // 01 , 10 - if (g.b || g.c) { + if (t.b || t.c) { size += 4; } }); @@ -230,7 +231,7 @@ define( } // header - writer.writeUint16(glyf.compound ? -1 : glyf.contours.length); + writer.writeInt16(glyf.compound ? -1 : glyf.contours.length); writer.writeInt16(glyf.xMin); writer.writeInt16(glyf.yMin); writer.writeInt16(glyf.xMax); @@ -239,9 +240,10 @@ define( // 复合图元 if (glyf.compound) { - for (var i = 0, l = glyf.glyfs; i < l; i++) { + for (var i = 0, l = glyf.glyfs.length; i < l; i++) { - var flags = componentFlag.ARGS_ARE_XY_VALUES; // xy values + var flags = componentFlag.ARGS_ARE_XY_VALUES + + componentFlag.ROUND_XY_TO_GRID; // xy values // more components if (i < l - 1) { @@ -257,15 +259,16 @@ define( // overlap compound flags += g.overlapCompound ? componentFlag.OVERLAP_COMPOUND : 0; - var a = g.a; - var b = g.b; - var c = g.c; - var d = g.d; - var e = g.e; - var f = g.f; + var transform = g.transform; + var a = transform.a; + var b = transform.b; + var c = transform.c; + var d = transform.d; + var e = transform.e; + var f = transform.f; // xy values or points - if(e < -0xFF || e > 0xFF || f < 0xFF || f > 0xFF) { + if(e < -0xFF || e > 0xFF || f < -0xFF || f > 0xFF) { flags += componentFlag.ARG_1_AND_2_ARE_WORDS; } @@ -281,7 +284,8 @@ define( } } - writer.writeUint16(e); + writer.writeUint16(flags); + writer.writeUint16(g.glyphIndex); if (componentFlag.ARG_1_AND_2_ARE_WORDS & flags) { writer.writeInt16(e); @@ -404,6 +408,7 @@ define( // 设置其他表的信息 var xMin = 16384, yMin = 16384, xMax = -16384, yMax = -16384; + ttf.glyf.forEach(function(glyf) { if (glyf.xMin < xMin) { xMin = glyf.xMin; diff --git a/src/ttf/ttfwriter.js b/src/ttf/ttfwriter.js index ed6c91b..f7456a4 100644 --- a/src/ttf/ttfwriter.js +++ b/src/ttf/ttfwriter.js @@ -79,7 +79,7 @@ define( glyfTbl.offset = 0; ttf.glyfReaded = glyfTbl.read(glyfReader, ttf); - console.log(ttf.glyfReaded); + //console.log(ttf.glyfReaded); // var ttfSize = 20 + tableList.length * 16; // ttf.tables = [];