From ad41a2d57459f53fbf7010c057d540acaf068577 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sun, 11 Jan 2015 14:54:12 +0100 Subject: [PATCH] Add support for TrueType (0, 0) cmap tables (issue 5501 and 5574) --- src/core/fonts.js | 12 +++++++++++- test/pdfs/.gitignore | 1 + test/pdfs/issue5501.pdf | Bin 0 -> 15180 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test/pdfs/issue5501.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index bd2850f72..95d30dcbf 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -3175,7 +3175,11 @@ var Font = (function FontClosure() { var offset = font.getInt32() >>> 0; var useTable = false; - if (platformId === 1 && encodingId === 0) { + if (platformId === 0 && encodingId === 0) { + useTable = true; + // Continue the loop since there still may be a higher priority + // table. + } else if (platformId === 1 && encodingId === 0) { useTable = true; // Continue the loop since there still may be a higher priority // table. @@ -4148,6 +4152,12 @@ var Font = (function FontClosure() { } } } + } else if (cmapPlatformId === 0 && cmapEncodingId === 0) { + // Default Unicode semantics, use the charcodes as is. + for (i = 0; i < cmapMappingsLength; ++i) { + charCodeToGlyphId[cmapMappings[i].charCode] = + cmapMappings[i].glyphId; + } } else { // For (3, 0) cmap tables: // The charcode key being stored in charCodeToGlyphId is the lower diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index e612c39cf..d1d03af43 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -70,6 +70,7 @@ !issue5291.pdf !issue5421.pdf !issue5470.pdf +!issue5501.pdf !issue5599.pdf !gradientfill.pdf !bug903856.pdf diff --git a/test/pdfs/issue5501.pdf b/test/pdfs/issue5501.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2441554a5b535af325cc751783a4ce1beb18312c GIT binary patch literal 15180 zcmdUWd3aPs)^}B%TeolD-aFk1**hd5ge_}l0faW}ix}Ai6ipxri%NiiECItZ5Kt5q z5)=_40)?H4W zI(3%cIdwZRfAG-WX??Qw#IG)YdR9;KrTR*z&Gza2`|ByAi|5Q(Fw>Wok&~I(*-GnZ z4j7=9Etp?i_=vt>{=#BnBP$4y{JY1cq^B?KaStKnB5o6>KTOd%`VvAscFpF6*JZb`Fp0ow-&;WG(U?DT2E@i>D& zk3GZ$_wZk>>7P78O8K7*np1IqknEZS8tOL9#-8*8GwoMI=Cc?d_^Zc<5HsBlL0s zq3xHjFXNAP?5#*u?Ks6i9w;2!Ce5r{tTsaI4m{-~#N`el9&cz^mv9mhDQ}C4CNZ%- z64x~z8wn&4zq=)MPwvsPSMNS4scGpMnf|QooZP@00yx z8{LDg5@dNEo~dDn$r`c{&wNNv(eOUcgN^z za-KW~3hMfHdLGAhiu_1c!+2If2xPDlxt)(d+ckP@f{7l z`FZ2hOe(PF@nn};r+Q5B*o&0d9{M3|Qa6zrau)7~dGHxsqr@wF(V{j6B>)9vBhua~ zpHWNb5*)kyluPPtky1eSlW&v)(=??0ksJ~Be1wg~5tWbz+!m=$98*8K2G%2|@@h0W zV;ZTX;PXhqv>ZoGNGbTqY&-1hq-2a&&E`MiliQRpam*X(lk7)w1_qO4 zQleZ(SrZQ-)r7ohQn><*l3qS%ElV6xR2#TwlJDcmalL!}Q`6@(`D#git!;^~uDv~f zk`l=$*Yc=ZNYrYT#P~1&)5R})_ZpQy$yeJpWN-)7Aq9i++_*{D0shO=*xL|17d$bd zmM7x>h=N+*^qIcLosY-&ecV~xw>OH7l!$7jgzrMHXCe^+t8$a5H>t)em_kw-&o!kH z=eeeHO{pQSI9FnvE3QN#tz{6|dR0`L>_7c&zM4!JYCIC+=aGh)_yZ0TS*@&Onu$|D zP1BvNqiQYVC)E?u{$9@H{!Qt*xoITjO6%!VdX!jvmV66LP0aAdyE0r557d9^)G5zS zuMqrv+dT0CEyhVf@*lx|_KnepiR1+woc>B7D>dn3I8!v)hkN{}+K}=0VMk1M)Ot}e ze*^nVr2$8(IbhB=7ntXoYs~MOO;f2W9!C`KqNV#;!hY=PJnJbp?2F32XsOXxc0i}U zA}dj+nWFrgPK+*^umf9w=ko$Smp{#GxN49`(m}cg&06s{R<61+!ej>=>T_g^-DV=- zR!N9%cV3j7BjdVcd{nK&I3|Id$yd^wTvA-lR_sJ&UXMF0z8mvry0cmN+EuI9)Kph( z-lDp{76Yzb6aB7!OOJnXi8eOj74s#4y1gD| ziqCTUGubXASyf%LX7y^--6Z;7`a<;m_A348+BJ&N4(V=hche7vz*rI0#un)ZVO|qIv@+f?ibxKnz(vJV^>{%i3KGL4Y4jc2-JK!M^lu;G| z1oGGpoH9lzq%<1ByU~=2#$j^u@8mYQE6t$sOxxe~6Hd@S9>HOuepR+#RyOixVj*E9 zJ`keTxJixm8TW=R<|s!DM0q2-AO|<(d|$cIp|t{pL;acWUPO;*2zn zr{H*W5(s$nphjUee5Hxhn6+3n3P>!qIL~!x2bJ2<)EE>>`VDEKI7A%U5eGOFHZ?oW z#r=sHE|jdGBgONy_!By^b=Q8SY%TJ#m~z2|aE({4h3ZWB5G zj@CvwU17P%T_AmeGLcU-EmfBCMcWV!$OTcW$lCB#5vw9s zMeQYfBVAL;)I=PHKZ|4!p#IEm@m*Due*n!$SG*q8q!J9I@3)RdL1q-*^~%}@&n{ki zZqi?P~{`xnt?`aZH{#G>lFL8sHw|MJ28yXQuWZ##7PvQmWdjwTNT;*|)K zYppXnqQ>N@ajv(q8nV*1!L%zTEQ;z7g>FoZakf%9@Xm2NZ?jgXoDY2yo-$6zC?V=$jXcw0@cNxfQVf;cC>f8fKJQ{H>%)lWWo z^`4i;^Yi<~vkr&2{@;HUKlps7(o&CZ+jcaeo1wECQD>_SolPK<0tq21v8}a|nozYS zDs;EA#=5@iGf^87tzFGg;V~gm5EmPnh)RrebHz~OE3H?Y*X2jD81Nuwp=a0`IHR26 zr&JvI;TSfRPNiK{uO~FfE%o-H@m(2o4kg|vRX#2~l@4Z>#dh|9%D=D61s`MiSO^7D!%{rYw_QP5lo}IV{lk# zi_K^ZA1d)^|0WU@u&b+;J?I9EaMA@`J-T$MWvF7(8Mtt3K8t@sDDlF0{sJxFpTW+K z=WXb2)NP8!sY2rA)6n~b_^FrrsnMsR zLi16PvPYyGrP2{GvI#L&EzT(*7A_9-Oo%b7iXI)J5YO6>b*4 ze`eM|`b+x?Mf-A4J2lyn;mT8|K6*E2%9PxU)eqnOM&SeRdJe9EMhBu!O?pwDbA zUNv#D|ADm0bA}FT$j$j+$LRGFC#Lwrz5Ov`!f_$==QGjP7<#u40(TM@1^})w>1(J< z2c5VW0nkn8fK++X>;her7xD<0swk{9bF+pRSRyMk*U=L;hDm4B|H`>0RNqej9(3_0 zxs!75XyWnYu7`bAN~Z?$9Mr)aCWq!AlgOiFF4;iLCaN(N%t|N?XA|ipmT#RwXR^ig zQML@`D~n8vwMx2prGaS+cM#C4V^%CEBA->++XaNT)sZwrS* zEj?+4Sczi?#N$M1!m(?_MSNsXAU>Q_>ELWkcd_&{b3CCdX)G$x`_^c`NbDs77euL z=4YPSEG(GYwX9fHwOcgbZ2Jp4+4gzm6C2jB5;353{=B(+-g|xhPLJ=@b07Z+<4{@q zWuAmO7*4VR5w@4?hx95JeTf`WQ2ksRB23{nlIn3rNESN+qU7zz>#0W^k+G2s*^_>v z!#8AQd+oOxp**SN+NyRUnyHhLRo6;pfA=f#s#r?b(s66Q*QOHwnE}~s%AKHtC?GanV3h|i0NQrWh z^Y{ezZz0&bTBWcmgrHT*t2(D<6UGR|Dn)Xxu~E7wW4=-k$J(%W327F-xPmo><0&YXDSdWn7UJ{5gxg?HrVPwxUVIko)jjPneqLeHXl9w`Q4MNwH{xXvY z8h+5dqKU^!kpxn+SdM8p8)lltN=z%5Nu_4hOC!{wbcA{@oun4iS?UsX4Sig#!fbMf z#fb(T5=U{o_!WPWI$3q2Xl|R`$j{%5RlaQLseE}e7WGfs#RVhY1~Foln^XlcVz?s% z!o5z35hWzMg%M?V#Hf$oNkR29z9H$NXrplPBBi4JBJE2Ti*@3-_()XJC497~6IaF8 zqK*!y5j2tx-zDx7+rp00vV1 z#^-VI&LIDoVB>gx_piff`BZ%VJ;u!4v``Mh7*wlxs?)9!>5vdaqOS-1=;uLKT{7Uh zFyQ84;lm4xx616PvaPgW$_Fm=k)d|3hleY!fgU}|svs^!f7vMAr8Iu2%@P#5acI9B zoPk3R2V$h29g)k+NB+^9I4U*Jurfym{vo9u#X0f4kD4WR_ zDhv6dkag-h({t)`rdZS*8biZE;-L@iX(W|C>4s64g8mtvyt913nG5fZd}8s%Pw2;# zw61PjFP^QcdX_bWKK+=ONh_+SwXNsp|M15rkFmSku2-&Jy++!E%tv;jt|gJj0{v}P zX1B1I*ci>sOgf8=jmgt3F|mr567Nf%&0VToN)_3hh|altjBbgIG?A{6;r8C9a8K9n z&WnvW;a3m>7;-_?ykaG(+}=`W6_?aU;UT(TwI&|{fhFY`L8xqZY}@n6B_oztUvKx zA7y8)cyxMkYPU#jHF(60~hM-vUHK}vc2=stq$}m0!mcwem{KdpHMfxWX zi%=qX57LcxW64S~PgH$c4#9kp^;i1yY;`ypLWi&s$_PG8olGXGC2W>5i!UXQB1~DL zEa3~)6&mLGYBK61f)g|16E?E#_*r^^{^|E^C(xILDc_*OrDQNxyY`@rt+YHaf=8&_ ztecex-3$@BMQ4~tTP$dQCamDN6s~C|<^pELyIq7>^K_1)K)-C!tQOs@1&du46R|nZ zoemyY=ooLHFqc*Z`iXr|P5GT|7?@ z=#$xO_7I<;7wF|!Mp(ux_zJz6Rq<#OF*6N_qM{)aj1-DSG?ST_6nK_o+UUPm4Dv=!q7e-DmI5`hs7{;Hg@cIoC4Knra_PhSHHNpbWuqm4^W+PYY-P z^I-ihYrr0`Phu0b$<};(37Y|h$~0b}7MKdOB6E>mWLbpsP|g;^B4q(zqAoEl(&lQ5 ztrgY^`&w2B>y-6;jrnoQM*9|Jhy6ACeKO+6DU!1kZ>I5sPovw+y)3`Zi1h+}=?7Q< zyXjW0%dMp+ceY?wgmWkBNRw0#W=8!24rQNunC&C4BSe5fM7xy%5E*-KuZS6?x7O1# z@sU*wnUKoFDXy08ZEhAwZ{t5&HyZR$7RoSr_1x`bwp?i?dkE27NfGF?R%k4`->Cp9`X zCN(zIml~Jabzo8;IuH|x4fq0afv)+{`7!yi`M&(P{I2;)bCcFYSH@JvR{ARA)^vS3 zsV1p8DW>z$&WAc5D2OSDE$|h@&5fBGJJ&ZiZbi(B*cHANab0fDh3}x*I8Y3VUAtl8 zlo5A(St69ZbLrs9(&y{z>IOEfJ9w(?CS|W|DL6X5_?;>L)66nT%BPiGIFdZNZRP%w z!uNN+{hqtxi9UVyCndGYSa=L&wF~FhLZV1cAROwg4s(4M?*>O*aiA0OD_>N)k-lF{v}cI742O+4y{scY9x;l{=m6^aJ&6Mh;Bi}oTnl+0_t4A*cD!^yxvBw0(>DfYFt zb$Y!^sSm@+i!ixuWVmMtCIwitL^YGZLZ+KPTu%*H9Ffk*6_HOz)#Hq7O=43YA>fy#7CUX8zymxQ{;bYf8t0b3~T ztaxCt33k@i^?iNWsdmzSYT4^;Cs1;G_oDRRD0|=^O?!(9>0qkiXKjO4vcDO!rTmtIOrX(=o9mPVSV&XXdJGYU*Ur(UQ6 zCd|pObf#3a9=4u&bM}d8(|`MrxFJr^jZiOkGHJ$lg`s?!iU zNPOP7<;bD!()XmGz<)wnhmgsEDDI?IZJ$ajv9zo<=q$uUOlGdx9G1}@8KHHV1XzNO z$Zj0VXx+aN>o1LnMQ|dnV7lSFo{kL++5vCAx5g{s1~M5xd+2S|^L+ly=^I;9;CCCxymdgzT1-@?psX#VI~j@DwKdx8UK;oLfQ$Hx~hethEM z#c#z|;+yE0H+uDW``!DdPeXSPRH1#RO~(X~l4F?v6&do)M9Vi5uv4|t?y9qH(J9l& z80i~_qHtw_73J5z2@T)n##no}z>9HI!q1@L<3WZ|Zwyt6>Xt35I#^$y_r}8akF#BE z_p|Lgw!gEhty1;0Z7(kRUfR(6*!dFdSJvBlV!iDh<#p14^)^i*LvPjFu3&B$usCn6 zqo5_rG)|V^-mk+yrQl|b>iGugwSOii8uTp0K?Vn+EX+jg?^sQh{B6=;ech=!xq7#a zYF0ATX;kyBpgTvGf%Aa+U`zsbE_#b;BRt z+gA9z+8w*@kl{8Qi;j^dS(Dh!hz7JWwurA{>-kgKCRWY2XfHE2)~i%z z!HQOQNK(4O2V! zToN3_j%~@S$Y80FMITducXSpv`wlk+rIOK zcVBL+R0tPQ$@L<);~sE(hy2reQ6PR`csVIoD@+wyg}Fknu#{UXY!&tj zM}@P(Rqn0{Zw_}MH=ThI5ydZ-mC80BJW#di;K5DJ)Ge+z|5bcXU2y5z$&=Uq^6`mp zwuz5LllTsuc`o{F56v-R<1zG$yO2j28wUg;J7Z&=eFJ?P8lo{S4l^R;ZD<0QE(|z< z;W1zi;)yR}6goB0u=LxY#4jL5S$+M_NP^{b;)}g)hg5z4ZCHYS+ZiAY{(kn`27jGc zr_Qk<^6l`3XangCL(Fqq^zP&j;m$AkyFFlcdS@BP(L1~1X-a3zW@SG|^1gL-w-8U; zq1(cE(f)t@*r{7E66NPYEbLJ+$8lMp(q3n7FzG6$8ACA>Mdg=~>_$`LxzlJ9sYmiL z^^{s=1Y4=~9V!(DBV$MO+V%=c>e!l)K2dPQ?K<^N+hJ6wlIffq{goodI)VKqk!u|} z|G18nf85V0KVq--if65NeHV$n5)pfK=KNzLHM>dkbRE)N@^$VPIX{B2A0!x)(ZZ;e z2Xp?;l%FKYJnWGuJ<1Yg?Sp`#m!+4rpShpj&(hCo@evMM!2RI=dA|Mi?lxTBOO7g(u2a_w3S0q23 zT$9|K+yzshdBFuGxxf@GE~pZu-dY?B78kN`8sUjCd#9{lKW+2C#@&DaZ};sJ(e*T<%fDD4$KYe)s^&H?yA)Lo^)3s7};-CH9ArddPoNOSL^Bq zy}t1MkLjoM7~9iUxMRmVyIA?nnu8_Nn_;i?m3JV%s89-UP3vYL32PZLB2tEnEi%DZ zF?+@YU(Lg!>$|e#!6>c;V_l;I%8?+H^I-btHPSyLrwlH_{KujP4Lmg*Gk2M@uVpLP zGi(>rWJhLPY?1Z02#8R+VZ|dEk`{(2xTZAt_HM;WFnmmla+j} zgp|-(FiV-iXQ~C-Lb8CCLpfIDma1#W8oD0VV`N>cR+DPFg>8lBl;`*sbuWKKt<~Ps zE@|!BfX=*|#^3QFeSkjjp}4rblc$5}wISdC=aLEyv~w29 zLU~u+ua96O_)x5#+{f`{F?F-35x`Zu<#maJ=-wJi9sR9?`mY6Hd<@%$R<JY!@6*4)A^IKGOkhm-RLKui5MHw(=IQGrwzZWFNw5)i3p>|rGJT}&K5vF#Q**bmsKUdj)*_N+eJf|y)9-(;kZu%Wcnm$3f*EC5l z(I2Htl}Akr^e2^7`t!;TWsB)q{b_v<-KV^!>^8lu*XU6?C>-m97ObRkuQ|e!4BdF5 zxrfDP!%`Jw^GuVhou%4Fz)(KKJkk=dVQrF5W|QGwK2e=)ny5`QPqyUSN^Og2h3y5p z*>r&JGS%8XwOz8c+fq>WW+n?@MlDP!5)aY+7sN4f>;ip5%)daBX|ht#cB$=sS|^6H zkt|fqqgbdyUxwI5`Z5Q7A~49LF|&&}q?ieD*j*0du({-0r?|7*&~U9TENSN1EM_OM z@Je{wZfS7ZZC2fkl}yc{I4sW23D69a?8sX^xANA;pwyk{kg?8e)So(+oNuf08jH@j zfRZj{-i)uNX{s4)p?a9jX^Xe{Z6ox%^)a?7<|+DYz0$VAw#nwknx|PsOS9N5jxg$F zPQ}T?bdSYjjj%^Jl1KtZUZ3LQ$y#@FqMl$$uqN4h*n2p9u59#{ewM1F@*F+Ol4Z@Y z<=S%{sjfRofCg9q0!pC60`ts6^kKFU_7RSNYdpD!-oqw9zLJmgGXdx4Uh}eyx3Wj$a& z;HY(d>bm4=cNODYayzbq$TV#rHENq|)0oZ6Ha$Fgd`6t;7j(EYKVG_Z_}cNxnAXkk zF#0~6%SpIM{u$1tnY+}M zX-vliPG)ejzQ^RtomEezs{ZB+9X1 ztiM;^<9Xr92Oa%?AhDVpA^FXuA1uZJe#z|EvmhePBemO(y(SW=7IEuZ)-DwPQ*NnTPv%N)wsKen(Q|F?W+=ESJ2`a@#*sb_S14r^qpRUb$-Ae@xy7 zBeC5R-@T0|*?8@c(m?J|pCA))-%lPZ8B#|uPwk3t4L?qfkS1K9&!i(Ug8zyhr-D7k z{tP2wHf(^8l}zO@*YREGYJQwIt1)VxTCH9*<(W=v!?nk?7V{ron_e8?*JW&9r@C6ZQi8Hv4tQ0LN2~*7K(cX?_eaRWA0R9$2P7PDQ0xzQN%tTe_=3w$=u>`3#XM8FTjz^Cksh2 z?w8G1bz_|XnO2)H5O ze-hzucKB;GG$+FMkKf6^7jV5AzN?0&7WlRW{#(E|ec>;8a81D1>2USRIDWMnuHcPV z#=+&UQuyT-_$mdy6!3+BOX=`u4}4w?7X^IghCeNb3va<61^fYT|HE=Pe{L8*zZ}jD zgR{Sn;I{%k74RDYXR6`!sTh7*z^NGcBppr)IKIZkk4M2rq0lJcLjfNM zcwfMK0^Swyj)1oXGzfT0z%dupuTA9j0_xtxcrD<~qf_~tZ^4@@l%u~+35%5Me92W4pfLZ~s2{=>)uiD|@fkb|=2oCIb^8<;n-wpea>3uD*SHLR*_6XSR zhFt<)-f8DAr^8M=yi^1=cuP$+>=3a1MJpnCc+m>mUI^#gir|H5WtQ({I7kE0m2-CGw3^VPimf zDiNL(u;Gb5e1m`|`oQBj%*XG9_3JEry$9A|iisyGi(oBEYHcE{alx+ytX}2fs|Bob z!Ab!u1XKtJv_H0dIe$#R^5w9s2+GHMd3ho%6|h9WVmmCd!lODY6tJKL%35H43(RYQ zxdKWB%n|T#96Tgowkwa%9tX1o%v=sLuu&qQSU{10=>nz+DC`RbE%1O9rV6-Ez!U+K zC+U203ry1C-q3JkO$+vFpfI;xGpf(1NV#!;r9r@cf0QvFy<~NA0yx{ zCyW*_3a^Y3Fmi;Gj|_nk(KbH93BzqLOu*1;7*Y*`1q@=n`JfiadkgLy1pxsA1q`^u z%?Ehkj{XjQha39$v+@3cb_evcL0Cm%BBJWuQJ(AtLM!f}Oj%Jh_R3yL3^=u1mY)l=jRLuWl)obHo9NgJ!D z+*vlgc+LV}Zh8)0e7JB%nGb)HHn=!=Ha)|yr;J!o`0%Xhcg~sdaIvq0LSA0!V&8qe z(^At@eZ4c&{JylToK#<0T2|InJw=8TpV5&dGk@0H1*P-#ltG1ahZoP9F*Dc|{>-hD z|BT!D&o7)&j2r}63lbVsi2aw&&~JN0UcdEgy1R;tW)&Lz;KHjfJvG(mPem?9%_=JM z-RGB-ur;W3Ar3OFlR2ZC+bPQXZc)rHoG(Sv!Nq@|Keo86bm9Ez$gT04J}K9ZqcmTZ z>{XJ-f9!hB0wh=F%Qnt-h(~g8I|K5OTMUdYEL$*WX5oBaF3v?>VOg<3J>^d0ujemj zcHy)IhPXRpxt?CDKgGFz)sHC4GDjRWAdn8^;-$IIbLH z^JnK8``m2g3D0Mxb>8FmWu~S1{OLH>TzM|j=f`~x%1G{wE!~d_BPIT``ue1ip|J!_ zYiN2#ry|MQ@a9?bJ0>jk_BoX!{CQ4;Kl=0=cXa&3GjF_}CRNrqelQZjpMd80#+T^b z`;8tl$#SnUWUO-6*hwQMP8pIPpX?hyTOTrB|2Ga`@%-Wv9VbIiz4hnI^5a6Kuf%uj z9LmYK>YLMXE-fQB17}12{d_JnEgc8?&*!qyLjUPpy8mD3W#X?{|K+|MoSR$EE|_14 vj%U7Z*vr_`(gi+g`Y6?Lvz8Vk|7a{_3kv5iFb0&Cnd{Hg6BCErJyiccw`a&l literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index 1e05ff5a7..b92a41cbb 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -499,6 +499,13 @@ "link": false, "type": "eq" }, + { "id": "issue5501", + "file": "pdfs/issue5501.pdf", + "md5": "55a60699728fc92f491a2d7d490474e4", + "rounds": 1, + "link": false, + "type": "eq" + }, { "id": "issue5509", "file": "pdfs/issue5509.pdf", "md5": "1975ef8db7355b1d691bc79d0749574b",