From 5559a2d8e74e6a83aa23a10cc3f3b146773fded7 Mon Sep 17 00:00:00 2001 From: wlemb Date: Fri, 10 Aug 2001 22:16:11 +0000 Subject: Initial revision --- contrib/pic2graph/Makefile.sub | 19 ++++++ contrib/pic2graph/pic2graph.man | 141 ++++++++++++++++++++++++++++++++++++++++ contrib/pic2graph/pic2graph.sh | 111 +++++++++++++++++++++++++++++++ 3 files changed, 271 insertions(+) create mode 100644 contrib/pic2graph/Makefile.sub create mode 100644 contrib/pic2graph/pic2graph.man create mode 100644 contrib/pic2graph/pic2graph.sh 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 , 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 , 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 -- cgit v1.2.1