Post without Account — your post will be reviewed, and if appropriate, posted under Anonymous. You can also use this link to report any problems registering or logging in.

[RT 126274] unifont -indent fails if text is not in multiple block

  • 2 Replies
  • 187 Views
*

Offline Phil

  • Global Moderator
  • Sr. Member
  • *****
  • 430
    • View Profile
Tue Aug 14 17:29:32 2018 fcc_del [...] bc.hu - Ticket created
Subject:    unifont -indent fails if text is not in multiple block
Date:    Tue, 14 Aug 2018 22:51:46 +0200 (CEST)
From:    fcc_del [...] bc.hu

methods: text_center, text_right
And at lower level, the value of -indent key and variable $ident does not work properly, if the text can be printed using only one font inside unifont.

The attached unierror.pl can demonstrate it. The result is unierror.pdf

I'm using debian, perl 5.10.1 (not relevant for the bug)

package PDF::API2::Resource::UniFont;
our $VERSION = '2.023'; # VERSION

The following patch can solve this problem.

Patch:
Code: [Select]
--- unifont-old.pm 2014-09-12 00:00:00.000000000 +0200
+++ UniFont.pm 2018-08-14 22:32:16.938551934 +0200
@@ -276,7 +276,15 @@
    if(scalar @codes > 0)
   {
     my $f=$self->fontlist->[$lastfont];
-    $newtext.='/'.$f->name.' '.$size.' Tf '.$f->text(pack('U*',@codes),$size).' ';
+    if(defined($ident) && $ident!=0)
+    {
+       $newtext.='/'.$f->name.' '.$size.' Tf ['.$ident.' '.$f->text(pack('U*',@codes)).'] TJ ';
+       $ident=undef;
+    } 
+    else
+    {
+       $newtext.='/'.$f->name.' '.$size.' Tf '.$f->text(pack('U*',@codes)).' Tj ';
+    }
   }
 
   return($newtext);
}

Thank you for your help

*

Offline Phil

  • Global Moderator
  • Sr. Member
  • *****
  • 430
    • View Profile
Re: [RT 126274] unifont -indent fails if text is not in multiple block
« Reply #1: August 15, 2018, 10:16:25 AM »
A few lines before this patch is another section of code that has almost the same patch applied. Perhaps it should have been done in both places?

Also note that although the option is -indent, the variable is $ident. Need to check if this is a typo.

*

Offline Phil

  • Global Moderator
  • Sr. Member
  • *****
  • 430
    • View Profile
Re: [RT 126274] unifont -indent fails if text is not in multiple block
« Reply #2: August 24, 2018, 10:25:21 PM »
Typo for variable name fixed in BaseFont.pm, CIDFont.pm, UniFont.pm: $ident should be $indent.

Investigated reported bug and found that it was a missing parameter on a recursive call to text(). The last parameter, $indent, was missing. This fix appears to work OK, and is much cleaner than the suggested fix.

This change will appear in PDF::Builder 3.011 (possibly around end of 2018).

A note if you are looking at the supplied test case (unierror.pl). Be aware that in Helvetica (a corefont), the o+Hungarian-umlaut character doesn't have a listed glyph width, so it gets the "missing glyph" default width, which is quite narrow, resulting in incorrect alignment on text_right and text_center. See RT 57248/ #7 for more on this.
« Last Edit: August 24, 2018, 10:33:51 PM by Phil »