ハンドル名とかぶっている…(汗
ともかく、実はいままでdot言語(とGraphviz)なるものがあることを知らず。 最近になって知り、そんな便利なものがあったのか!と感激したわけです。
しかし、いかんせん古めかしい?ものなのか、多少融通が効かない模様… 特に、全体のフォントを指定できないのは実に悲しい。
そこでググったところ、さすがstackoverflow、そのものずばりの解答がありました。 なるほどsvgにしてフォント名をsedで置き換えてしまう…これは目から鱗です。
そこでこのstackoverflowの話を元に、さらにinkscapeを経由してpngやらjpgにしてしまおう、と考え、その一連の行動をスクリプトにすることを思い立ちました。
inkscapeのexport周りは拡張子で面倒くさいことになりそうなので、png決め打ちにして、pngでないファイルが出力指定された場合はimagemagickを使うということにしました。 そのため、
の3つに依存するということになりました。
多少、オプション形式がdotコマンドと変わった上に、ものすごい厳選されたオプションしか使えなくなっているわけですが(汗
オイラ的な実用にはこれで十分かなぁ〜、と…
なにか簡単な説明図を描く時、いままでわざわざマウス動かしてinkscapeやdiaを使ってたわけですが、これで捗りそうです。
#!/bin/bash fontname="IPA ゴシック" while [ "$1" != "" ];do case $1 in -f | --fontname) fontname=$2 shift 1 ;; -o | --output) outputname=$2 outputext=${outputname##*.} shift 1 ;; -h | --help) linenum=`cat $0 | grep -n -e '^#--*#' | sed -e 's/:.*//g'` head -n $linenum $0 exit 0 ;; * ) ext=${1##*.} if [ "$ext" = "dot" ];then inputfile=$1 else echo "[WARNING] unknown option $1 ignored." fi ;; esac shift 1 done #--------------------# curdate=`date +"%y%m%d_%H%M%S"` basefontname="Times,serif" workfilename="/tmp/${curdate}_tmp_dot.svg" if [ "$outputname" = "" ];then echo "[ERROR]:no output filename set.quitted." exit 1 fi if [ "$outputext" != "svg" ];then convedname=$outputname outputname="/tmp/${curdate}_conv_dot.svg" convedext=${convedname##*.} if [ "$convedext" != "png" ];then finalimg=$convedname convedname="/tmp/${curdate}_conv_dot.png" fi fi dot $inputfile -Tsvg -o${workfilename} sed "s/${basefontname}/${fontname}/g" $workfilename > $outputname rm $workfilename # Do not forget to rasterize it. if [ "$convedname" != "" ];then inkscape --file=$outputname --export-png=$convedname if [ -e "$convedname" ];then rm $outputname if [ "$finalimg" != "" ];then convert $convedname $finalimg rm $convedname fi else echo "[WARNING] 画像ファイルが生成されませんでした.そのため中間ファイル ${outputname} をそのまま残しました。" fi fi