deri pushed a commit to branch master in repository groff. commit 6a241192be60d0cc1a2ab5464281e297b2c0243d Author: Deri James <d...@chuzzlewit.myzen.co.uk> Date: Mon Jul 31 17:02:02 2017 +0100
See bug at: https://savannah.gnu.org/bugs/?51568 * src/devices/gropdf/gropdf: previous 'fix' was too narrow, all '\' characters should be escaped. Also there was an unwanted interaction with code in routine 'do_t'. Sometimes, do_C, when the named glyph is mapped to a chr < 32, this is encoded as octal \nnn, so in this case the '\' must not be escaped. --- ChangeLog | 10 ++++++++++ src/devices/gropdf/gropdf.pl | 32 ++++++++++++-------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index caa5498..bc6f07b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2017-07-31 Deri James <d...@chuzzlewit.myzen.co.uk> + + See bug at: https://savannah.gnu.org/bugs/?51568 + + * src/devices/gropdf/gropdf: previous 'fix' was too narrow, all + '\' characters should be escaped. Also there was an unwanted + interaction with code in routine 'do_t'. Sometimes, do_C, when + the named glyph is mapped to a chr < 32, this is encoded as octal + \nnn, so in this case the '\' must not be escaped. + 2017-07-25 Deri James <d...@chuzzlewit.myzen.co.uk> If input text contained string which could be interpreted as diff --git a/src/devices/gropdf/gropdf.pl b/src/devices/gropdf/gropdf.pl index 8f0a320..608864d 100644 --- a/src/devices/gropdf/gropdf.pl +++ b/src/devices/gropdf/gropdf.pl @@ -2942,11 +2942,18 @@ sub PutLine $pendmv-=$nomove; $lin[$#lin]->[1]=-$pendmv/$cftsz if ($pendmv != 0); + foreach my $wd (@lin) + { + next if $wd->[0]=~s/\\\|!\|/\\/g; + $wd->[0]=~s/\\/\\\\/g; + $wd->[0]=~s/\(/\\(/g; + $wd->[0]=~s/\)/\\)/g; + } + if (0) { if (scalar(@lin) == 1 and (!defined($lin[0]->[1]) or $lin[0]->[1] == 0)) { - $lin[0]->[0]=~s/\\\d{1,3}/\\${&}/g; $stream.="($lin[0]->[0]) Tj\n"; } else @@ -2955,12 +2962,7 @@ sub PutLine foreach my $wd (@lin) { - if (defined($wd->[0])) - { - $wd->[0]=~s/\\\d{1,3}/\\${&}/g; - $stream.="($wd->[0]) "; - } - + $stream.="($wd->[0]) " if defined($wd->[0]); $stream.="$wd->[1] " if defined($wd->[1]) and $wd->[1] != 0; } @@ -2971,7 +2973,6 @@ sub PutLine { if (scalar(@lin) == 1 and (!defined($lin[0]->[1]) or $lin[0]->[1] == 0)) { - $lin[0]->[0]=~s/\\\d{1,3}/\\${&}/g; $stream.="0 Tw ($lin[0]->[0]) Tj\n"; } else @@ -2982,12 +2983,7 @@ sub PutLine foreach my $wd (@lin) { - if (defined($wd->[0])) - { - $wd->[0]=~s/\\\d{1,3}/\\${&}/g; - $stream.="($wd->[0]) "; - } - + $stream.="($wd->[0]) " if defined($wd->[0]); $stream.="$wd->[1] " if defined($wd->[1]) and $wd->[1] != 0; } @@ -3026,7 +3022,6 @@ sub PutLine foreach my $wd (@lin) { my $wwt=$wd->[1]||0; - $wd->[0]=~s/\\\d{1,3}/\\${&}/g; while ($wwt <= $wt+.1) { @@ -3118,7 +3113,7 @@ sub TextWid my $txt=shift; my $w=0; my $ck=0; - $txt=~s/^\\(\d\d\d)/chr($1)/e; + $txt=~s/^\\\|!\|(\d\d\d)/chr($1)/e; foreach my $c (split('',$txt)) { @@ -3159,9 +3154,6 @@ sub do_t $xpos+=($pendmv-$nomove)/$unitwidth; $stream.="% == '$par'=$wid 'xpos=$xpos\n" if $debug; - $par=~s/\\(?!\d\d\d)/\\\\/g; - $par=~s/\)/\\)/g; - $par=~s/\(/\\(/g; # $pendmv = 'h' move since last 't' # $nomove = width of char(s) added by 'C', 'N' or 'c' @@ -3289,7 +3281,7 @@ sub FindChar my $ch=$fnt->{GNM}->{$chnm}; $ch=RemapChr($ch,$fnt,$chnm) if ($ch > 255); - return(($ch<32)?sprintf("\\%03o",$ch):chr($ch),$fnt->{WID}->[$ch]*$cftsz); + return(($ch<32)?sprintf("\\|!|%03o",$ch):chr($ch),$fnt->{WID}->[$ch]*$cftsz); } else { _______________________________________________ Groff-commit mailing list Groff-commit@gnu.org https://lists.gnu.org/mailman/listinfo/groff-commit