[Rd] Off-topic: Pretty-printing R (or S) code with GNU a2ps
Kurt Hornik
Kurt.Hornik@ci.tuwien.ac.at
Mon, 12 Feb 2001 16:10:14 +0100
[Manually approved by MM -- because it contains binary attachment ]
--QcBiZYhiHg
Content-Type: text/plain; charset=us-ascii
Content-Description: message body text
Content-Transfer-Encoding: 7bit
>>>>> Dirk Eddelbuettel writes:
> GNU a2ps is a fairly versatile text-to-anything processor. It is
> useful for typsetting source code from a wide variety of programming
> languages. As R (ie S) wasn't supported yet, I quickly cobbled a
> style sheet for the S language together. Stylesheets are documented in
> the texinfo docs for a2ps, and examples can be found in
> /usr/share/a2ps/sheets (on Debian at least, others distros or unices
> probably have similar locations). IIRC a2ps exists for NT but might
> require Cygwin. I typeset on Linux and only print on NT :)
> Well, as I still don't really know what I'm doing with R, I would
> appreciate comments / feedback / input from anyone could spend a
> moment or two on this. To activate the stylesheet, simple patch
> /usr/share/a2ps/sheets/sheets.map
> as per the short diff below which declares that the stylesheet s.ssh
> shall be used for filenames matching /*.[RS]/. The sheet itself is
> attached, just place it in the same directory, ie
> /usr/share/a2ps/sheets/.
> Usage then simply becomes
> a2ps -Pdisplay foo.R
> or
> a2ps foo.R -o foo.ps; gv foo.ps
> in case the "display" device isn't defined.
Thanks for bringing this up. We have locally used style sheets S.ssh
for S code and Rd.ssh for Rd documentation format, both written by T
Hothorn. I attach these files below.
> A few points / questions:
> * content: a2ps uses tricks to use TeX symbols. It works well to typset
> <- with \leftarrow (uncomment that in s.ssh to see) but I couldn't tell
> it to parse
> a<-2
> it only finds <- with whitespace, eg
> a <- 2
Torsten gets this right by using a different alphabet, I think.
> What could be done about <<- ? Is there a matching TeX symbol?
Dunno.
> * more content: Is the list of keywords really that short? I couldn't find
> much else...
R-lang says:
The following identifiers have a special meaning and should not
be used for object names
if else repeat while function for in next break
TRUE FALSE NULL NA Inf NaN
... ..1 ..2 etc.
so I think this is the list of keywords to use.
(Yes switch() is not in there ...)
> * scope: Are other file extensions in use? Are there conventions for S or
> Splus files? Any clever way to make a2ps understand the files in
> $R_HOME/library/$PACKAGE/R are also R? Could file(1) be taught what
> an R file is?
I think assuming that extensions `.R' and `.Rd' for R code and doc
source files are pretty safe. The package installer will also allow for
code extensions `.r', `.S', `.s', and `.q', but I think only the last of
these may be specific enough to make it into the extension list.
No R magic in general. ESS think .R/.r are safe for auto-mode-alist and
.S/.s need enforcing. [One could try checking for Emacs-style mode
magic but I think that would be a bad idea.]
> * editorial: shall this be the s.ssh or r.ssh or rs.ssh?
I think we want S.ssh, as this is a style sheet for code written in the
S language.
Best,
-k
--QcBiZYhiHg
Content-Type: application/octet-stream
Content-Disposition: attachment;
filename="S.ssh"
Content-Transfer-Encoding: base64
IyBUaGlzIGlzIGEgUiBzaGVldApzdHlsZSBSIGlzCndyaXR0ZW4gYnkgIlRvcnN0ZW4gSG90aG9y
biA8aG90aG9ybkBjaS50dXdpZW4uYWMuYXQ+Igp2ZXJzaW9uIGlzIDAuMQpyZXF1aXJlcyBhMnBz
IDQuOS41Cgpkb2N1bWVudGF0aW9uIGlzCiAgICJDcmVhdGVzIHByZXR0eSBSLWNvZGUgcG9zdHNj
cmlwdCBmaWxlcy4iCmVuZCBkb2N1bWVudGF0aW9uCgphbHBoYWJldHMgYXJlCiAgICJBQkNERUZH
SElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XyMkJT0tJi8iCgpj
YXNlIHNlbnNpdGl2ZQoKIyBhbmNlc3RvcnMgYXJlCiMgICBjCiMgZW5kIGFuY2VzdG9ycwoKc2Vx
dWVuY2VzIGFyZQogICIjIiBDb21tZW50LAogICJcIiIgUGxhaW4gU3RyaW5nICJcIiIgUGxhaW4K
IyAgIGV4Y2VwdGlvbnMgYXJlCiMgICAgL1xcXFwsLwojICAgICAgIGVuZCBleGNlcHRpb25zCmVu
ZCBzZXF1ZW5jZXMKCmtleXdvcmRzIGluIEtleXdvcmRfc3Ryb25nIGFyZQogIGlmLCB0aGVuLCBl
bHNlLCBicmVhaywgd2hpbGUsIGZvciwgZnVuY3Rpb24sIG5leHQsIHJldHVybiwgRkFMU0UsIFRS
VUUKZW5kIGtleXdvcmRzCgpvcGVyYXRvcnMgYXJlCiAgIDwtIFxsZWZ0YXJyb3cKZW5kIG9wZXJh
dG9ycwoKb3B0aW9uYWwgc2VxdWVuY2VzIGFyZQogICA8IFBsYWluIEtleXdvcmQgPiBQbGFpbgpl
bmQgc2VxdWVuY2VzCmVuZCBzdHlsZQ==
--QcBiZYhiHg
Content-Type: application/octet-stream
Content-Disposition: attachment;
filename="Rd.ssh"
Content-Transfer-Encoding: base64
IyBTdHlsZSBzaGVldCBmb3IgUyBvdXRwdXQKIyBDb3B5cmlnaHQgKGMpIDIwMDAgVG9yc3RlbiBI
b3Rob3JuCgojCiMgCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKIyBh
bnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8K
IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCiMgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiMKIyAwLjEgVG9yc3RlbiBIb3Rob3Ju
CgpzdHlsZSBSZCBpcwp3cml0dGVuIGJ5ICJUb3JzdGVuIEhvdGhvcm4gPGhvdGhvcm5AY2kudHV3
aWVuLmFjLmF0PiIKdmVyc2lvbiBpcyAwLjEKcmVxdWlyZXMgYTJwcyA0LjkuNQoKZG9jdW1lbnRh
dGlvbiBpcwogICAJImEycHMgc3R5bGUgc2hlZXQgZm9yIFJkIgplbmQgZG9jdW1lbnRhdGlvbgoK
YWxwaGFiZXRzIGFyZQogICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xt
bm9wcXJzdHV2d3h5el8jJCU9LSYvIgoKY2FzZSBzZW5zaXRpdmUKCiMgYW5jZXN0b3JzIGFyZQoj
ICAgYwojIGVuZCBhbmNlc3RvcnMKCnNlcXVlbmNlcyBhcmUKICAiIyIgQ29tbWVudCwKICAiXCIi
IFBsYWluIFN0cmluZyAiXCIiIFBsYWluLAogICJcXCIgS2V5d29yZF9zdHJvbmcgInsiIFBsYWlu
CiMgICJ7IiBQbGFpbiBTdHJpbmcgIn0iIFBsYWluCiMJZXhjZXB0aW9ucyBhcmUKIwkvaXRlbXss
Y29kZXssdXNhZ2V7LGtleXdvcmR7LwojCWVuZCBleGNlcHRpb25zCiMgICJ7IiBQbGFpbiBTdHJp
bmcgIn17IiBQbGFpbgojCQojICAgZXhjZXB0aW9ucyBhcmUKIyAgIC9cXFthOnpdey8gS2V5d29y
ZCAifSIgUGxhaW4KIyAgIGVuZCBleGNlcHRpb25zCmVuZCBzZXF1ZW5jZXMKCm9wZXJhdG9ycyBh
cmUKICAgPC0gXGxlZnRhcnJvdwplbmQgb3BlcmF0b3JzCgpvcHRpb25hbCBzZXF1ZW5jZXMgYXJl
CiAgIDwgUGxhaW4gS2V5d29yZCA+IFBsYWluCmVuZCBzZXF1ZW5jZXMKZW5kIHN0eWxl
--QcBiZYhiHg--
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._