summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwlemb <wlemb>2001-08-10 22:16:11 +0000
committerwlemb <wlemb>2001-08-10 22:16:11 +0000
commit5559a2d8e74e6a83aa23a10cc3f3b146773fded7 (patch)
treee5acd84ceda20f903d53c8d0294cae8b38e91d9a
parentdda32cf9b49e1ec2536e150a69a396ea806c8a78 (diff)
downloadgroff-5559a2d8e74e6a83aa23a10cc3f3b146773fded7.tar.gz
Initial revision
-rw-r--r--contrib/pic2graph/Makefile.sub19
-rw-r--r--contrib/pic2graph/pic2graph.man141
-rw-r--r--contrib/pic2graph/pic2graph.sh111
3 files changed, 271 insertions, 0 deletions
diff --git a/contrib/pic2graph/Makefile.sub b/contrib/pic2graph/Makefile.sub
new file mode 100644
index 00000000..d01a4353
--- /dev/null
+++ b/contrib/pic2graph/Makefile.sub
@@ -0,0 +1,19 @@
+MAN1=pic2graph.n
+CLEANADD=pic2graph
+
+all: pic2graph
+
+pic2graph: pic2graph.sh
+ rm -f $@; \
+ sed -e "s|@g@|$(g)|g" \
+ -e "s|@VERSION@|$(version)$(revision)|" \
+ -e $(SH_SCRIPT_SED_CMD) $(srcdir)/pic2graph.sh >$@; \
+ chmod +x $@
+
+install_data: pic2graph
+ -test -d $(bindir) || $(mkinstalldirs) $(bindir)
+ -rm -f $(bindir)/pic2graph
+ $(INSTALL_SCRIPT) pic2graph $(bindir)/pic2graph
+
+uninstall_sub:
+ -rm -f $(bindir)/pic2graph
diff --git a/contrib/pic2graph/pic2graph.man b/contrib/pic2graph/pic2graph.man
new file mode 100644
index 00000000..4697d7e2
--- /dev/null
+++ b/contrib/pic2graph/pic2graph.man
@@ -0,0 +1,141 @@
+.ig
+Copyright (C) 2001 Free Software Foundation, Inc.
+
+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 PIC2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.IX pic2graph
+.SH NAME
+pic2graph \- convert a PIC diagram into a cropped image
+.
+.
+.SH SYNOPSIS
+.nr a \n(.j
+.ad l
+.nr i \n(.i
+.in +\w'\fBpic2graph 'u
+.ti \niu
+.B pic2graph
+.de OP
+.ie \\n(.$-1 .RI "[\ \fB\%\\$1\fP\ " "\\$2" "\ ]"
+.el .RB "[\ " "\\$1" "\ ]"
+..
+.ds b \fR|\fP
+.
+.OP \-unsafe
+.OP \-resolution "M \*b MxN"
+.OP \-format \
+"ddif \*b fiasco \*b fits \*b plainpnm \*b png \*b rast \*b rle \
+\*b sgi \*b sir \*b tiff \*b tiffcmyk \*b xwd"
+.OP \-eqn delim
+.
+.ad \na
+.
+.
+.SH DESCRIPTION
+Reads a PIC program as input; produces an image file (by default in
+Portable Network Graphics format) suitable for the Web as output.
+Also translates
+.BR @g@eqn (@MAN1EXT@)
+constructs, so it can be used for generating images of mathematical
+formulae.
+.P
+PIC is a rather expressive graphics minilanguage suitable for
+producing box-and-arrow diagrams of the kind frequently used in
+technical papers and textbooks. The language is sufficiently flexible
+to be quite useful for state charts, Petri-net diagrams, flow charts,
+simple circuit schematics, jumper layouts, and other kinds of
+illustration involving repetitive uses of simple geometric forms and
+splines. Because PIC descriptions are procedural and object-based,
+they are both compact and easy to modify.
+.P
+The PIC language is fully documented in "\fIMaking Pictures With GNU
+PIC\fP", a document which is part of the
+.BR groff (@MAN1EXT@)
+distribution.
+.P
+Your input PIC code should \fInot\fR be wrapped with the .PS and .PE macros
+that normally guard it within
+.BR groff (@MAN1EXT@)
+macros. The output image will be a black-on-white graphic clipped to the
+smallest possible bounding box that contains all the black pixels.
+.P
+This program uses
+.BR @g@pic (@MAN1EXT@),
+.BR @g@eqn (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+.BR gs (1),
+and the PNM graphics tools.
+These programs must be installed on your system and accessible on your
+$PATH for \fBpic2graph\fR to work.
+.
+.
+.SH OPTIONS
+.TP
+.B -unsafe
+Run
+.BR @g@pic (@MAN1EXT@)
+and
+.BR groff (@MAN1EXT@)
+in the `unsafe' mode enabling the PIC macro
+.B sh
+to execute arbitrary commands. The default is to forbid this.
+.TP
+.BI -resolution\ MxN
+Specify the pixels-per-inch resolution of the image as
+.I MxN
+(two numerals for horizontal and vertical dot pitch separated by an `x';
+a single numeral is interpreted as a constant dot pitch for both axes).
+Increasing this will increase the image's pixel size, and make fonts
+render better.
+.TP
+.BI -format\ fmt
+Specify an output format; the default is PNG (Portable Network Graphics).
+Any format for which there is a PNM converter is supported.
+.TP
+.BI -eqn\ delim
+Change the fencepost characters that delimit
+.BR @g@eqn (@MAN1EXT@)
+directives (
+.B $
+and
+.BR $ ,
+by default). This option requires an argument, but an empty string is
+accepted as a directive to disable
+.BR @g@eqn (@MAN1EXT@)
+processing.
+.PP
+Command-line switches and arguments not listed above are passed to
+the format converter selected by the format option (which is
+.BR pnmtopng (1)
+by default).
+.
+.
+.SH "SEE ALSO"
+.BR @g@pic (@MAN1EXT@),
+.BR @g@eqn (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+.BR gs (1),
+.BR pnmcrop (1),
+.BR pnmtopng (5)
+.
+.
+.SH AUTHORS
+Eric S. Raymond <esr@thyrsus.com>, based on a recipe by W. Richard Stevens.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/pic2graph/pic2graph.sh b/contrib/pic2graph/pic2graph.sh
new file mode 100644
index 00000000..3b15c721
--- /dev/null
+++ b/contrib/pic2graph/pic2graph.sh
@@ -0,0 +1,111 @@
+#!/bin/sh
+#
+# pic2graph -- compile PIC image descriptions to bitmap images
+#
+# by Eric S. Raymond <esr@thyrsus.com>, July 2001
+#
+#
+# Copyright (C) 2001 Free Software Foundation, Inc.
+#
+# 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 2, 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 groff; see the file COPYING. If not, write to the Free Software
+# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+# In Unixland, the magic is in knowing what to string together...
+#
+# Take a pic/eqn diagram on stdin, emit cropped bitmap on stdout.
+# The pic markup should *not* be wrapped in .PS/.PE, this script will do that.
+# A -U option on the command line enables gpic/groff "unsafe" mode.
+# All other options are passed to pnmtopng (or whichever back end is selected
+# by the format option). The default format in PNG.
+#
+# Requires groff, ghostscript, and the pnm tools. All are open source.
+# Use, modify, and redistribute freely. Send me fixes and enhancements.
+#
+# Here are the assumptions behind the option processing:
+#
+# 1. Only the -U option of gpic(1) is relevant. -C doesn't matter because
+# we're generating our own .PS/.PE, -[ntcz] are irrelevant because we're
+# generating Postscript.
+#
+# 2. Ditto for groff(1), though it's a longer and more tedious demonstration.
+#
+# 3. No options of pnmcrop are relevant. We can assume the generated image
+# is going to be black-on-white because that's what pic generates. Even
+# if pic were somehow coerced into generating a non-white background,
+# pnmcrop's algorithm (look at the top corners) will find the right
+# thing because gs(1) is generating a full page.
+#
+# 4. Many options of pnmtopng(1) or other pnm converters are potentially
+# relevant, (especially -interlace, -transparent, -background, -text, and
+# -compression.
+#
+# Thus, we pass -U to gpic and groff, and everything else to pnmtopng.
+#
+# We don't have complete option coverage on eqn because this is primarily
+# intended as a pic translator; we can live with eqn defaults.
+#
+# $Id: pic2graph.sh,v 1.1 2001/08/10 22:16:12 wlemb Exp $
+#
+groffpic_opts=""
+gs_opts=""
+pnmtopng_opts=""
+format="png"
+resolution=""
+eqndelim='$$'
+
+while [ "$1" ]
+do
+ case $1 in
+ -unsafe)
+ groffpic_opts="-U"; pngtopnm_opts="$pngtopnm_opts -U";;
+ -format)
+ format=$2; shift;;
+ -eqn)
+ eqndelim=$2; shift;;
+ -resolution)
+ gs_opts="-r$2"; shift;;
+ -v | --version)
+ echo "GNU pic2graph (groff) version @VERSION@"
+ exit 0;;
+ --help)
+ echo "usage: pic2graph [ option ...] < in > out"
+ exit 0;;
+ *)
+ pnmtopmg_opts="$pnmtopmg_opts $1" ;;
+ esac
+ shift;
+done
+
+if [ "$eqndelim" ]
+then
+ eqndelim="delim $eqndelim"
+fi
+
+# Here goes:
+# 1. Wrap the input in dummy .PS/PE macros
+# 2. Process through eqn and pic to emit troff markup
+# 3. Process through groff to emit Postscript
+# 4. Process through ghostscript to emit a ppm bitmap
+# 5. Crop the ppm bitmap
+# 6. Turn the ppm into PNG
+(echo ".EQ"; echo $eqndelim; echo ".EN"; echo ".PS"; cat; echo ".PE") \
+ | groff -e -p $groffpic_opts -Tps \
+ | gs -q $gs_opts -sDEVICE='ppmraw' -sOutputFile='-' -dNOPAUSE -dBATCH - \
+ | pnmcrop \
+ | pnmto${format} $pnmtopng_opts
+
+# End