[ 
https://issues.apache.org/jira/browse/PDFBOX-3759?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tilman Hausherr updated PDFBOX-3759:
------------------------------------
    Description: 
When using the TTFSubsetter as *standalone software* and subsetting an 
OpenType/TrueType font, the {{liga}} OpenType ligature table gets scrambled 
"randomly".

E.g. when viewing the source font "DejaVuSans.ttf" in FontLab Studio, the 
OpenType {{liga}} table is shown as follows:

{code}
feature liga {
 script arab;
lookup liga33 {
lookupflag IgnoreMarks RightToLeft;
    sub uniFEDF uniFE88 by uniFEF9;
    sub uniFEDF uniFE84 by uniFEF7;
    sub uniFEDF uniFE82 by uniFEF5;
    sub uniFEE0 uniFE88 by uniFEFA;
    sub uniFEE0 uniFE84 by uniFEF8;
    sub uniFEE0 uniFE82 by uniFEF6;
} liga33;
lookup liga35 {
lookupflag RightToLeft;
    sub space uni0652 by uniFE7E;
    sub space uni0651 by uniFE7C;
    sub space uni0650 by uniFE7A;
    sub space uni064F by uniFE78;
    sub space uni064E by uniFE76;
    sub space uni064D by uniFE74;
    sub space uni064C by uniFE72;
    sub space uni064B by uniFE70;
    sub uni0627 uni0655 by uni0625;
    sub uni0627 uni0654 by uni0623;
    sub uni0627 uni0653 by uni0622;
    sub uni0640 uni0652 by uniFE7F;
    sub uni0640 uni0651 by uniFE7D;
    sub uni0640 uni0650 by uniFE7B;
    sub uni0640 uni064F by uniFE79;
    sub uni0640 uni064E by uniFE77;
    sub uni0640 uni064B by uniFE71;
    sub uni0648 uni0654 by uni0624;
    sub uni064A uni0654 by uni0626;
} liga35;
 language SND ;
 language URD ;
 language KUR ;
 script latn;
    sub f f l by uniFB04;
    sub f f i by uniFB03;
    sub f l by fl;
    sub f i by fi;
    sub f f by uniFB00;
 language MOL ;
 language ROM ;
 language ISM ;
 language KSM ;
 language LSM ;
 language NSM ;
 language SSM ;
 language SKS ;
} liga;
{code}

This ligature table shows for example, in the {{latn}} section, the {{ffl}} 
substitution with the ffl ligature {{\uFB04}}.

However, when viewing a subsetted version of the font (like the one attached), 
the {{liga}} table is scrambled:

{code}
feature liga {
 script arab;
lookup liga33 {
lookupflag IgnoreMarks RightToLeft;
    sub _5337 _5250 by _5363;
    sub _5337 _5246 by _5361;
    sub _5337 _5244 by _5359;
    sub _5338 _5250 by _5364;
    sub _5338 _5246 by _5362;
    sub _5338 _5244 by _5360;
} liga33;
lookup liga35 {
lookupflag RightToLeft;
    sub numbersign _1403 by _5240;
    sub numbersign _1402 by _5238;
    sub numbersign _1401 by _5236;
    sub numbersign _1400 by _5234;
    sub numbersign _1399 by _5232;
    sub numbersign _1398 by _5231;
    sub numbersign _1397 by _5229;
    sub numbersign _1396 by _5227;
    sub _1365 _1406 by _1363;
    sub _1365 _1405 by _1361;
    sub _1365 _1404 by _1360;
    sub _1385 _1403 by _5241;
    sub _1385 _1402 by _5239;
    sub _1385 _1401 by _5237;
    sub _1385 _1400 by _5235;
    sub _1385 _1399 by _5233;
    sub _1385 _1396 by _5228;
    sub _1393 _1405 by _1362;
    sub _1395 _1405 by _1364;
} liga35;
 language SND ;
 language URD ;
 language KUR ;
 script latn;
    sub o o u by _5045;
    sub o o r by _5044;
    sub o u by _5043;
    sub o r by _5042;
    sub o o by _5041;
 language MOL ;
 language ROM ;
 language ISM ;
 language KSM ;
 language LSM ;
 language NSM ;
 language SSM ;
 language SKS ;
} liga;
{code}

The {{liga}} table of the subsetted font now want's to replace "oou" instead of 
"ffl".

The result, for example in InDesign, is devastating:
!fontbox-2.0.5-ttfsubsetter_scrambled-OpenType-ligatures.png!

The subsetted font indeed tries to replace "oou" with a non-existing glyph and 
scrambles the whole text in the rendering. The font subset is unusable.

I know that it's hard to maintain OpenType features in a font subset, but I 
would at least expect that the OpenType tables are kept "as-is"...

  was:
When using the TTFSubsetter as standalone software and subsetting an 
OpenType/TrueType font, the {{liga}} OpenType ligature table gets scrambled 
"randomly".

E.g. when viewing the source font "DejaVuSans.ttf" in FontLab Studio, the 
OpenType {{liga}} table is shown as follows:

{code}
feature liga {
 script arab;
lookup liga33 {
lookupflag IgnoreMarks RightToLeft;
    sub uniFEDF uniFE88 by uniFEF9;
    sub uniFEDF uniFE84 by uniFEF7;
    sub uniFEDF uniFE82 by uniFEF5;
    sub uniFEE0 uniFE88 by uniFEFA;
    sub uniFEE0 uniFE84 by uniFEF8;
    sub uniFEE0 uniFE82 by uniFEF6;
} liga33;
lookup liga35 {
lookupflag RightToLeft;
    sub space uni0652 by uniFE7E;
    sub space uni0651 by uniFE7C;
    sub space uni0650 by uniFE7A;
    sub space uni064F by uniFE78;
    sub space uni064E by uniFE76;
    sub space uni064D by uniFE74;
    sub space uni064C by uniFE72;
    sub space uni064B by uniFE70;
    sub uni0627 uni0655 by uni0625;
    sub uni0627 uni0654 by uni0623;
    sub uni0627 uni0653 by uni0622;
    sub uni0640 uni0652 by uniFE7F;
    sub uni0640 uni0651 by uniFE7D;
    sub uni0640 uni0650 by uniFE7B;
    sub uni0640 uni064F by uniFE79;
    sub uni0640 uni064E by uniFE77;
    sub uni0640 uni064B by uniFE71;
    sub uni0648 uni0654 by uni0624;
    sub uni064A uni0654 by uni0626;
} liga35;
 language SND ;
 language URD ;
 language KUR ;
 script latn;
    sub f f l by uniFB04;
    sub f f i by uniFB03;
    sub f l by fl;
    sub f i by fi;
    sub f f by uniFB00;
 language MOL ;
 language ROM ;
 language ISM ;
 language KSM ;
 language LSM ;
 language NSM ;
 language SSM ;
 language SKS ;
} liga;
{code}

This ligature table shows for example, in the {{latn}} section, the {{ffl}} 
substitution with the ffl ligature {{\uFB04}}.

However, when viewing a subsetted version of the font (like the one attached), 
the {{liga}} table is scrambled:

{code}
feature liga {
 script arab;
lookup liga33 {
lookupflag IgnoreMarks RightToLeft;
    sub _5337 _5250 by _5363;
    sub _5337 _5246 by _5361;
    sub _5337 _5244 by _5359;
    sub _5338 _5250 by _5364;
    sub _5338 _5246 by _5362;
    sub _5338 _5244 by _5360;
} liga33;
lookup liga35 {
lookupflag RightToLeft;
    sub numbersign _1403 by _5240;
    sub numbersign _1402 by _5238;
    sub numbersign _1401 by _5236;
    sub numbersign _1400 by _5234;
    sub numbersign _1399 by _5232;
    sub numbersign _1398 by _5231;
    sub numbersign _1397 by _5229;
    sub numbersign _1396 by _5227;
    sub _1365 _1406 by _1363;
    sub _1365 _1405 by _1361;
    sub _1365 _1404 by _1360;
    sub _1385 _1403 by _5241;
    sub _1385 _1402 by _5239;
    sub _1385 _1401 by _5237;
    sub _1385 _1400 by _5235;
    sub _1385 _1399 by _5233;
    sub _1385 _1396 by _5228;
    sub _1393 _1405 by _1362;
    sub _1395 _1405 by _1364;
} liga35;
 language SND ;
 language URD ;
 language KUR ;
 script latn;
    sub o o u by _5045;
    sub o o r by _5044;
    sub o u by _5043;
    sub o r by _5042;
    sub o o by _5041;
 language MOL ;
 language ROM ;
 language ISM ;
 language KSM ;
 language LSM ;
 language NSM ;
 language SSM ;
 language SKS ;
} liga;
{code}

The {{liga}} table of the subsetted font now want's to replace "oou" instead of 
"ffl".

The result, for example in InDesign, is devastating:
!fontbox-2.0.5-ttfsubsetter_scrambled-OpenType-ligatures.png!

The subsetted font indeed tries to replace "oou" with a non-existing glyph and 
scrambles the whole text in the rendering. The font subset is unusable.

I know that it's hard to maintain OpenType features in a font subset, but I 
would at least expect that the OpenType tables are kept "as-is"...


> TTFSubsetter scrambles OpenType ligature and kerning tables (and probably 
> others as well)
> -----------------------------------------------------------------------------------------
>
>                 Key: PDFBOX-3759
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-3759
>             Project: PDFBox
>          Issue Type: Bug
>          Components: FontBox
>    Affects Versions: 2.0.5
>            Reporter: Tobias Fischer
>            Priority: Critical
>         Attachments: Subset-DejaVuSans_scrambled-OpenType-tables.ttf, 
> fontbox-2.0.5-ttfsubsetter_scrambled-OpenType-kerning.png, 
> fontbox-2.0.5-ttfsubsetter_scrambled-OpenType-ligatures.png
>
>
> When using the TTFSubsetter as *standalone software* and subsetting an 
> OpenType/TrueType font, the {{liga}} OpenType ligature table gets scrambled 
> "randomly".
> E.g. when viewing the source font "DejaVuSans.ttf" in FontLab Studio, the 
> OpenType {{liga}} table is shown as follows:
> {code}
> feature liga {
>  script arab;
> lookup liga33 {
> lookupflag IgnoreMarks RightToLeft;
>     sub uniFEDF uniFE88 by uniFEF9;
>     sub uniFEDF uniFE84 by uniFEF7;
>     sub uniFEDF uniFE82 by uniFEF5;
>     sub uniFEE0 uniFE88 by uniFEFA;
>     sub uniFEE0 uniFE84 by uniFEF8;
>     sub uniFEE0 uniFE82 by uniFEF6;
> } liga33;
> lookup liga35 {
> lookupflag RightToLeft;
>     sub space uni0652 by uniFE7E;
>     sub space uni0651 by uniFE7C;
>     sub space uni0650 by uniFE7A;
>     sub space uni064F by uniFE78;
>     sub space uni064E by uniFE76;
>     sub space uni064D by uniFE74;
>     sub space uni064C by uniFE72;
>     sub space uni064B by uniFE70;
>     sub uni0627 uni0655 by uni0625;
>     sub uni0627 uni0654 by uni0623;
>     sub uni0627 uni0653 by uni0622;
>     sub uni0640 uni0652 by uniFE7F;
>     sub uni0640 uni0651 by uniFE7D;
>     sub uni0640 uni0650 by uniFE7B;
>     sub uni0640 uni064F by uniFE79;
>     sub uni0640 uni064E by uniFE77;
>     sub uni0640 uni064B by uniFE71;
>     sub uni0648 uni0654 by uni0624;
>     sub uni064A uni0654 by uni0626;
> } liga35;
>  language SND ;
>  language URD ;
>  language KUR ;
>  script latn;
>     sub f f l by uniFB04;
>     sub f f i by uniFB03;
>     sub f l by fl;
>     sub f i by fi;
>     sub f f by uniFB00;
>  language MOL ;
>  language ROM ;
>  language ISM ;
>  language KSM ;
>  language LSM ;
>  language NSM ;
>  language SSM ;
>  language SKS ;
> } liga;
> {code}
> This ligature table shows for example, in the {{latn}} section, the {{ffl}} 
> substitution with the ffl ligature {{\uFB04}}.
> However, when viewing a subsetted version of the font (like the one 
> attached), the {{liga}} table is scrambled:
> {code}
> feature liga {
>  script arab;
> lookup liga33 {
> lookupflag IgnoreMarks RightToLeft;
>     sub _5337 _5250 by _5363;
>     sub _5337 _5246 by _5361;
>     sub _5337 _5244 by _5359;
>     sub _5338 _5250 by _5364;
>     sub _5338 _5246 by _5362;
>     sub _5338 _5244 by _5360;
> } liga33;
> lookup liga35 {
> lookupflag RightToLeft;
>     sub numbersign _1403 by _5240;
>     sub numbersign _1402 by _5238;
>     sub numbersign _1401 by _5236;
>     sub numbersign _1400 by _5234;
>     sub numbersign _1399 by _5232;
>     sub numbersign _1398 by _5231;
>     sub numbersign _1397 by _5229;
>     sub numbersign _1396 by _5227;
>     sub _1365 _1406 by _1363;
>     sub _1365 _1405 by _1361;
>     sub _1365 _1404 by _1360;
>     sub _1385 _1403 by _5241;
>     sub _1385 _1402 by _5239;
>     sub _1385 _1401 by _5237;
>     sub _1385 _1400 by _5235;
>     sub _1385 _1399 by _5233;
>     sub _1385 _1396 by _5228;
>     sub _1393 _1405 by _1362;
>     sub _1395 _1405 by _1364;
> } liga35;
>  language SND ;
>  language URD ;
>  language KUR ;
>  script latn;
>     sub o o u by _5045;
>     sub o o r by _5044;
>     sub o u by _5043;
>     sub o r by _5042;
>     sub o o by _5041;
>  language MOL ;
>  language ROM ;
>  language ISM ;
>  language KSM ;
>  language LSM ;
>  language NSM ;
>  language SSM ;
>  language SKS ;
> } liga;
> {code}
> The {{liga}} table of the subsetted font now want's to replace "oou" instead 
> of "ffl".
> The result, for example in InDesign, is devastating:
> !fontbox-2.0.5-ttfsubsetter_scrambled-OpenType-ligatures.png!
> The subsetted font indeed tries to replace "oou" with a non-existing glyph 
> and scrambles the whole text in the rendering. The font subset is unusable.
> I know that it's hard to maintain OpenType features in a font subset, but I 
> would at least expect that the OpenType tables are kept "as-is"...



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: dev-h...@pdfbox.apache.org

Reply via email to