2012-09-01から1ヶ月間の記事一覧

枠内におさまるように文字列の横幅を自動調整2(PostScript)。

PostScriptで表を作るとき、長い文字列でも枠からはみ出さないように文字列の横幅を自動調整して印字する手続きを作りましたが、今度は同じ機能ですが、横幅をスタックにつんで渡すバージョンです。辞書によるローカル変数を使っていますのでコードがすっき…

文字列を指定された幅の文字列に分割して配列に入れる。

表の枠内に印字するときに1行に収まらないときは改行するというのは作りました。 今度は1行に収まるときは縦位置を中央に、2行、3行と増えても縦位置を中央に印字したいのです。 そのために文字の幅に応じて文字列を分割し、配列に入れて表示する手続きに渡…

指定された幅の文字列と残り文字列に分割する。

%!PS-Adobe-3.0 2.834645669 2.834645669 scale newpath /vPosition 297 20 sub def % A4 297mm /newLineHight 12 def /Left 20 def /Space 3 def /hPosition Left Space add def /newline { /vPosition vPosition newLineHight sub def hPosition Space add…

配列にオブジェクトを追加する。

配列にオブジェクトを一個追加する手続きです。 % 配列にオブジェクトを追加する。 % stack : obj array /s3dict 1 dict def /addToArray { s3dict begin /obj exch def % 追加するobj /baseArray exch def % 受け取った配列 /baseLen baseArray length def …

二つの文字列を連結する手続き(PostScript)

スタックに詰まれた二つの文字列を連結する手続きです。 % stack : string string /s2dict 1 dict def /joinString { s2dict begin /str exch def /strBase exch def /baseLen strBase length def /strLen str length def /newString baseLen strLen add str…

PostScript でフラクタル

PostScript TUTORIAL and COOKBOOKの72ページ。72 Chapter 7: LOOPS AND CONDITIONALS に再帰でフラクタルを描くサンプルがあります。パラメータを変えると図形も変ります。 /depth 0 def /maxdepth 15 def /down {/depth depth 1 add def} def /up {/depth …

PostScriptでフィボナッチ数列を計算

PostScriptで再帰が出来るのだからとフィボナッチ数列を計算してみました。 %! /fib { dup 0 eq { pop 1} {dup 1 eq { pop 1 } { dup 1 sub fib exch 2 sub fib add } ifelse }ifelse } def 0 1 20 {fib ==} for else へ値を渡すのには dup によりスタックの…

PostScriptの配列が構築される様子

PostScriptの配列が構築される様子が面白い。 配列の先頭の'['はスタックにマークを作るためのオペレータです。 '['が実行されるとスタックにマークオブジェクトが作られます。 PostScriptの配列が構築される様子を見てみます。 GS>[ % マークオブジェクトが…

PostScript で再帰により階乗計算をする様子

PostScript TUTORIAL and COOKBOOKの70ページ。70 Chapter 7: LOOPS AND CONDITIONALS に再帰で階乗計算の結果を印刷するサンプルがあります。その階乗計算の部分。 /factorial %stack: n --- n! (after) { dup 1 gt {dup 1 sub factorial mul} if } def pri…

loop で無限ループを作りexitで脱出する(PostScript)

repeat、forが繰り返す条件を指定して手続きを呼ぶのに対し、loopは無限ループを作り実行中に条件を判定して脱出します。 GPL Ghostscript 9.06 (2012-08-08) Copyright (C) 2012 Artifex Software, Inc. All rights reserved. This software comes with NO …

100 /xpos exch def という動作(スタックマシンの動作)

スタックに 100 が積まれているときに /xpos exch def という動作はどのようになるのか追ってみます。 %!PS-Adobe-3.0 GPL Ghostscript 9.06 (2012-08-08) Copyright (C) 2012 Artifex Software, Inc. All rights reserved. This software comes with NO WAR…

PostScript でShift-JISの1バイト文字、2バイト文字判定

先の「文字列が枠内におさまるように自動改行しながら印刷する(PostScript)」はEUC-JPバージョンでした。これを Shift-JIS で行うには1文字と残りの文字列に分けるための判定方法を変更する必要があります。 Shift-JISの半角文字は0x80〜0x9F、0xE0〜0xFF を…

PostScript で 機種依存文字でも文字化けのないPDFを作る(Windows限定)。

今までは以下の理由でEUC-JPのフォントを使ってきました。 Shift-JIS は0x5cを含む文字が文字化けを起こす。 UTF-8 はデフォルトでインストールされていないこともある。 日本語文字列出力を参考に、EUC-JPでテキストを作り、/Ryumin-Light-EUC-H のように E…