らんだむな記憶

blogというものを体験してみようか!的なー

息抜きわっしょい.ps

プログラミング言語 - Wikipedia

1957年-1959年 FORTRANLISP・ALGOL・COBOL
1960年代 CPLBASICPL/I・BCPL・Simula・B言語
1970年代 Forth・PascalC言語PrologSmalltalkScheme・ML・AWKSQL・Ada
1980年代 C++Objective-C・PostScript・Common Lisp・Eiffel・ErlangPerlMathematica
1990年代 Python・Tcl・HaskellVisual BasicRubyLuaDelphiJavaJavaScriptPHPSuperColliderECMAScript
2000年代 C#ScalaD言語・Go
2010年代 DartSwift

らしい。
この中で1行くらい触ったことがあるのは、BASIC, C言語, AWK, C++, Perl, Python, Haskell*1, Ruby, Java, JavaScript, PHP, ECMAScript, C# ということになる。
若干毛色が違うものとして「PostScript」が目につく。TeXとか触っているとたまに見かけたりするアレ。そう言えばまったく書いたことはない、な。

PostScript - Wikipediaに簡単なサンプルがあるので、ghostscriptに食わせてみる。
例えば、Ghostscript/使い方 - TeX Wikiにあるように、

$ gs -q -dNOPAUSE -dBATCH -sDEVICE=ppm -sOutputFile=- foo.ps | ppmtogif >foo.gif

の要領でやったら、gif画像として出てきた。
ghostscriptのコア部分はGhostscript: Ghostscript Downloadsからプレビルドのものがダウンロードできるので、/usr/local/bin に最新版を入れてみた。*2

whichで調べるとps2pdfも /usr/bin の下に見つかったのでそのまま利用してみよう。
実際には、pd2pdf->ps2pdfwr->gs の依存関係で、前者2つはシェルスクリプトによる薄いwrapperなので、よく分かっていれば gs のみでいけるんだろう。おやおや、なんか ps2pdfwr のディレクトリの gs を探しにいっているようだから、折角入れた最新版を見てくれなさそうだな...。まぁ、いいや。

$ gs -P- -dSAFER -q -P- -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=hoge.pdf -P- -dSAFER -c .setpdfwrite -f hoge.ps

直に展開するとこんな感じかな?確かにpdfが出てきた。

Postscript Language referenceはhttps://www.adobe.com/products/postscript/pdfs/PLRM.pdfで公開されている。本として買うとまぁ安くはないんだが、もう古いせいか無償公開されているのでありがたやー
4.6.4 User Path Construction あたりにざっと命令が載っている。SVG と同様のノリで解釈すればボチボチOKのはず。
適当に書いてみる。
色を0の灰色(つまり黒)にして、(x,y)=(100,100)に移動して、Bezier の曲線をにょろっと書いて、始点と繋いでパスを閉じさせて、中を塗らせてページ表示というつもり。

% color -> black
0 setgray

100 100 moveto
120 100 130 140 130 160 curveto
closepath
fill

showpage

[はてな記法]ソースコードを色付けして表示する(シンタックス・ハイライト) - はてなブログ ヘルプシンタックスハイライトを見てもpostscript用のものはないので、pdf用でハイライトさせてみる。

一応何かそれっぽい絵がpdfに出た。どうも、左下が(0,0)に相当して、右方向がx軸の正の方向で、上方向がy軸の正の方向のようだ。これまたPLRMを読めよって話だが、面倒なので読まない。実験して身体で感じるんだ!
まぁ、一応後付けで調べると「4.3.1 User Space and Device Space」に載っている。英語が母国語の国で育ってるとこういうのやアレやらナニが無料でうはうはだが、英語は苦手なんで厳しい。本来日本語でいきたいとこだが、金持ちニートではないのでそこまでじゃぶじゃぶつぎ込める金もなく、天秤にかけた結果渋々英語で諦めている。

Initially, the user space origin is located at the lower-left corner of the output page or display window, with the positive x axis extending horizontally to the right and the positive y axis extending vertically upward, as in standard mathematical practice. The length of a unit along both the x and y axes is 1/72 inch.
This coordinate system is the default user space. In default user space, all points within the current page have positive x and y coordinate values.

よし、がむばって訳してみよう。(ひーこらひーこらばひんばひん)

初期状態では、ユーザー空間の原点は出力ページ或は表示ウィンドウの左下の角に位置している。x軸の正の方向は水平に右に伸び、y軸の正の方向は垂直に上に伸びている。これは標準的な数学の慣習と同様である。xおよびyの両軸に沿った単位長は1/72インチである。
この座標系はデフォルトのユーザー空間である。デフォルトのユーザー空間においては、現在ページ内のすべての点は正のxおよびy座標を持つことになる。

ふむ。実体験通りだな。そりゃそうだ。単位長が1/72インチということは、72dpiということなので、Mac的なディスプレイの解像度と対応している。Windowsは96dpiを想定しているので、1ピクセルちょいでPostscriptの意味での単位長になるってことか。

しっかし、ps->pdf 変換をして中身をエディタで見てみるとえっらい変貌してしまい、元の命令がどこに一旦だか分からない。う~ん、奥が深い。*3

*1:Newcomer!

*2:気付いてなかったが、最初から /usr/bin/gs として入っていた...。

*3:これ以上は追求しないの意