diff options
Diffstat (limited to 'src/devices')
-rw-r--r-- | src/devices/gropdf/Makefile.sub | 17 | ||||
-rw-r--r-- | src/devices/gropdf/gropdf.pl | 15 | ||||
-rw-r--r-- | src/devices/gropdf/pdfmom.man | 140 | ||||
-rw-r--r-- | src/devices/gropdf/pdfmom.pl | 82 |
4 files changed, 244 insertions, 10 deletions
diff --git a/src/devices/gropdf/Makefile.sub b/src/devices/gropdf/Makefile.sub index 30991e52..6aa409d4 100644 --- a/src/devices/gropdf/Makefile.sub +++ b/src/devices/gropdf/Makefile.sub @@ -1,4 +1,4 @@ -# Copyright (C) 2011 Free Software Foundation, Inc. +# Copyright (C) 2011-2012 Free Software Foundation, Inc. # Written by Deri James <deri@chuzzlewit.demon.co.uk> # # This file is part of groff. @@ -17,10 +17,12 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. MAN1=\ - gropdf.n + gropdf.n \ + pdfmom.n CMDFILES=\ - gropdf + gropdf \ + pdfmom MOSTLYCLEANADD=\ gropdf \ @@ -30,7 +32,7 @@ MOSTLYCLEANADD=\ RM=rm -f -all: gropdf +all: gropdf pdfmom gropdf: gropdf.pl $(SH_DEPS_SED_SCRIPT) @@ -42,6 +44,13 @@ gropdf: gropdf.pl $(SH_DEPS_SED_SCRIPT) -e "s|@RT_SEP@|$(RT_SEP)|" $(srcdir)/gropdf.pl >$@ chmod +x $@ +pdfmom: pdfmom.pl $(SH_DEPS_SED_SCRIPT) + $(RM) $@ + sed -f $(SH_DEPS_SED_SCRIPT) \ + -e "s|@VERSION@|$(version)$(revision)|" \ + -e "s|@PERLPATH@|$(PERLPATH)|" $(srcdir)/pdfmom.pl >$@ + chmod +x $@ + install_data: -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir) for f in $(CMDFILES); do \ diff --git a/src/devices/gropdf/gropdf.pl b/src/devices/gropdf/gropdf.pl index 0084b952..d8a21e25 100644 --- a/src/devices/gropdf/gropdf.pl +++ b/src/devices/gropdf/gropdf.pl @@ -907,13 +907,13 @@ sub do_x { IsGraphic(); my $bbox=$incfil{$fil}->[1]; - my $xscale=$wid/($bbox->[2]-$bbox->[0]+1); - my $yscale=($hgt<=0)?$xscale:($hgt/($bbox->[3]-$bbox->[1]+1)); + my $xscale=$wid/($bbox->[2]-$bbox->[0]); + my $yscale=($hgt<=0)?$xscale:($hgt/($bbox->[3]-$bbox->[1])); $xscale=($wid<=0)?$yscale:$xscale; $xscale=$yscale if $yscale < $xscale; $yscale=$xscale if $xscale < $yscale; - $wid=($bbox->[2]-$bbox->[0]+1)*$xscale; - $hgt=($bbox->[3]-$bbox->[1]+1)*$yscale; + $wid=($bbox->[2]-$bbox->[0])*$xscale; + $hgt=($bbox->[3]-$bbox->[1])*$yscale; if ($flag eq '-C' and $ll > $wid) { @@ -2978,7 +2978,7 @@ sub do_V } - $nomove=$pendmv=0; +# $nomove=$pendmv=0; $poschg=1; } @@ -2997,6 +2997,7 @@ sub TextWid { my $txt=shift; my $w=0; + my $ck=0; foreach my $c (split('',$txt)) { @@ -3005,7 +3006,9 @@ sub TextWid $w+=$widtbl->[$cn]; } - return($w/$unitwidth); + $ck=length($txt)*$curkern; + + return(($w/$unitwidth)+$ck); } sub do_t diff --git a/src/devices/gropdf/pdfmom.man b/src/devices/gropdf/pdfmom.man new file mode 100644 index 00000000..ef05d5e9 --- /dev/null +++ b/src/devices/gropdf/pdfmom.man @@ -0,0 +1,140 @@ +.ig +Copyright (C) 2012 + Free Software Foundation, Inc. +written by Deri James <deri@chuzzlewit.demon.co.uk> +and Peter Schaffter <peter@schaffter.ca) + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. +.. +. +.TH PDFMOM @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" +. +. +.SH NAME +. +pdfmom \- Produce PDF documents using the mom macro set +. +. +.SH SYNOPSIS +. +.SY pdfmom +.OP \-Tps "\fR[pdfroff options]" +[groff options] +.I files .\|.\|. +.YS +. +.SY pdfmom +.OP \-Tpdf +[groff options] +.I files .\|.\|. +.YS +. +. +.SH DESCRIPTION +. +.B pdfmom +is a wrapper around +.B groff +that facilitates the production of PDF documents from files +formatted with the mom macros. +. +.P +.B pdfmom +prints to stdout, so output must be redirected to a destination +file. The size of the final PDF can be reduced by piping the output +through +.BR ps2pdf . +. +.P +If called with the +.B \-Tpdf +option (which is the default), +.B pdfmom +processes files using groff's native PDF driver, +.BR gropdf . +If +.B \-Tps +is given, processing is passed over to +.BR pdfroff , +which uses +.BR groff 's +PostScript driver. +In either case, multiple runs of the source file are peformed in +order to satisfy any forward references in the document. +. +.P +.B pdfmom +accepts all the same options as +.BR groff . +If +.B \-Tps +is given, the options associated with +.B pdfroff +are accepted as well. +Please note that when +.B pdfmom +calls +.BR pdfroff , +the +. +.P +.RS +.B -mpdfmark -mom --no-toc +.RE +. +.P +options are implied and should not be given on the +command line. +Equally, it is not necessary to supply the +.B -mom +or +.B "-m\~mom" +options when +.B \-Tps +is absent. +. +.P +PDF integration with the +.B mom +macros is discussed in full in the PDF manual, +.IR "Producing PDFs with groff and mom" . +. +. +.SH BUGS +. +.B pdfmom +sometimes issues warnings of the type +. +.P +.RS 2 +\&.\|.\|.: +.B can't transparently output node at top level +.RE +. +.P +This is more of an annoyance than a bug, and may safely be ignored. +. +. +.SH "SEE ALSO" +. +.BR groff (@MAN1EXT@), +.BR pdfroff (@MAN1EXT@), +.BR ps2pdf (@MAN1EXT@) +. +. +.\" Local Variables: +.\" mode: nroff +.\" End: diff --git a/src/devices/gropdf/pdfmom.pl b/src/devices/gropdf/pdfmom.pl new file mode 100644 index 00000000..a03bc83d --- /dev/null +++ b/src/devices/gropdf/pdfmom.pl @@ -0,0 +1,82 @@ +#!@PERLPATH@ -w +# +# pdfmom : Frontend to run groff -mom to produce PDFs +# Deri James : Friday 16 Mar 2012 +# + +# Copyright (C) 2012 Free Software Foundation, Inc. +# Written by Deri James <deri@chuzzlewit.demon.co.uk> +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +use strict; +my @cmd; +my $dev='pdf'; + +while (my $c=shift) +{ + if (substr($c,0,2) eq '-T') + { + if (length($c) > 2) + { + $dev=substr($c,2); + } + else + { + $dev=shift; + } + + next; + } + elsif ($c eq '-z' or $c eq '-Z') + { + $dev=$c; + next; + } + + elsif ($c eq '-v') + { + print "GNU pdfmom (groff) version @VERSION@\n"; + exit; + } + + push(@cmd,$c); +} + +my $cmdstring=join(' ',@cmd); + +if ($dev eq 'pdf') +{ + system("groff -Tpdf -dPDF.EXPORT=1 -mom -z $cmdstring 2>&1 | grep '^.ds' | groff -Tpdf -mom - $cmdstring"); +} +elsif ($dev eq 'ps') +{ + system("pdfroff -mpdfmark -mom --no-toc $cmdstring"); +} +elsif ($dev eq '-z') # pseudo dev - just compile for warnings +{ + system("groff -Tpdf -mom -z $cmdstring"); +} +elsif ($dev eq '-Z') # pseudo dev - produce troff output +{ + system("groff -Tpdf -mom -Z $cmdstring"); +} +else +{ + print STDERR "Not compatible with device '-T $dev'\n"; + exit 1; +} + |