ページ更新: 2006-08-22 (火) (4499日前)

関連: ソフト/Graphviz

(2006-01-30 ソフト/Bug Tracking/trac/plugin より移動。)

  • GraphvizPlugin v0.1 : Windowsに入れてみた。ちょっと修正したら動いた。LinuxはそのままでOK。
  • GraphvizPlugin v0.2 : Windows、Linuxとも、そのままでOK。
  • v0.3〜v0.6.6(2006-08-21) はまだ試していない (2006-08-22)

目次

[編集]

情報源 #

GraphvizPlugin - Trac Hacks
http://trac-hacks.org/wiki/GraphvizPlugin (URL変更を反映 2006-01-15)

Ticket Query - GraphvizPlugin
http://trac-hacks.org/query?status=new&status=assigned&status=reopened&component=GraphvizPlugin&order=priority (URL変更を反映 2006-01-15)

ProcessorBazaar#graphviz
http://trac.edgewall.org/wiki/ProcessorBazaar#graphviz

  • 元々は Plugin ではなく、Processorだった。(trac 0.8.x には Plugin機構がなかったため?)
[編集]

from trac ML #

[編集]

Graphviz #

(2011-03-10)

[編集]

インストール #

(GraphvizPlugin v0.1)

GraphvizPluginを入れる前に、Graphvizをダウンロード、インストールする。

Linuxならパッケージを使うか、ソースをコンパイルしてインストールする

Windowsならコンパイル済みバイナリ (Graphviz -> Download -> Stable and development Windows Install packages)をインストールする。今回はgraphviz-2.6.exeを使用した。

graphvizplugin.zipをダウンロードし、展開する。

Windowsの場合、graphviz/graphiviz.py の次の箇所を修正 (Graphvizの実行ファイルの存在を確認する箇所)

  • GraphvizPlugin v0.2で対策されたので、このパッチは不要。Ticket #90 (defect) (2005-12-09))
*** graphviz.py.org	Fri Dec  2 13:35:14 2005
--- graphviz.py	Wed Dec  7 12:54:27 2005
***************
*** 127,133 ****
              if self.config.parser.has_option('graphviz', 'cmd_path'):
                  cmd_path = self.config.get('graphviz', 'cmd_path')
                  for name in ['dot', 'neato', 'twopi', 'circo', 'fdp']:
!                     if not os.path.exists(os.path.join(cmd_path, name)):
                          buf.write('<p>The <b>%s</b> program was not found in the <b>%s</b> directory.</p>' % (name, cmd_path))
                          trouble = True
          return trouble, buf
--- 127,133 ----
              if self.config.parser.has_option('graphviz', 'cmd_path'):
                  cmd_path = self.config.get('graphviz', 'cmd_path')
                  for name in ['dot', 'neato', 'twopi', 'circo', 'fdp']:
!                     if not os.path.exists(os.path.join(cmd_path, name + '.exe')):
                          buf.write('<p>The <b>%s</b> program was not found in the <b>%s</b> directory.</p>' % (name, cmd_path))
                          trouble = True
          return trouble, buf

Python的には、どういうふうに解決したらいいんだろう? OSで処理を切り分け‥‥でもいいけど、「実行可能なプログラムがあるか」でチェックできればいいんだけど。(os.system("dot -V") でもいいけど、ファイルの存在チェックよりは重くなるだろうし)

次に、eggを作る

> python setup.py bdist_egg
running bdist_egg
running egg_info
 :
creating 'dist\graphviz-0.1-py2.3.egg' and adding 'build\bdist.win32\egg' to it
removing 'build\bdist.win32\egg' (and everything under it)

eggをインストール(ファイルコピー)する。(自分は $tracenv/plugins に入れた)

キャッシュディレクトリ $tracenv/htdocs/graphviz を作成する。

trac.iniを修正する。

[graphviz]
cache_dir = /var/trac/sandbox/htdocs/graphviz                     ★tracenvは /var/trac/sandboxの場合。このディレクトリが
prefix_url = http://localhost:8000/sandbox/chrome/site/graphviz   ★このURLに対応
tmp_dir = /tmp/trac.graphviz
cmd_path = /usr/bin

Windowsの場合、cmd_pathに空白があると実行できないので、Graphvizは空白のないディレクトリ(例:C:\Graphviz\bin)に入れる。

[graphviz]
cache_dir = C:\trac\sandbox\htdocs\graphviz
prefix_url = http://localhost:8000/sandbox/chrome/site/graphviz
tmp_dir = C:\temp\graphviz
#cmd_path = C:\Program Files\ATT\Graphviz\bin            ★エラーにならないが、実行できない
cmd_path = C:\bin\Graphviz\bin                           ★こういうパスなら動く。使った)

自分はGraphvizはデフォルトの場所 (C:\Program Files\ATT\Graphviz) に入れ、Windows/ジャンクション作成でリンクを c:\bin に張った。

こちらも、Python的な解決方法があるといいんだけど。

[編集]

画面 #

(GraphvizPlugin 0.1)

wikiにこういうのを書き込むと:

=== Finite Automaton ===

http://www.graphviz.org/Gallery/directed/fsm.html

{{{
#!graphviz
digraph finite_state_machine {
	rankdir=LR;
	size="8,5"
	node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
	node [shape = circle];
	LR_0 -> LR_2 [ label = "SS(B)" ];
	LR_0 -> LR_1 [ label = "SS(S)" ];
	LR_1 -> LR_3 [ label = "S($end)" ];
	LR_2 -> LR_6 [ label = "SS(b)" ];
	LR_2 -> LR_5 [ label = "SS(a)" ];
	LR_2 -> LR_4 [ label = "S(A)" ];
	LR_5 -> LR_7 [ label = "S(b)" ];
	LR_5 -> LR_5 [ label = "S(a)" ];
	LR_6 -> LR_6 [ label = "S(b)" ];
	LR_6 -> LR_5 [ label = "S(a)" ];
	LR_7 -> LR_8 [ label = "S(b)" ];
	LR_7 -> LR_5 [ label = "S(a)" ];
	LR_8 -> LR_6 [ label = "S(b)" ];
	LR_8 -> LR_5 [ label = "S(a)" ];
}
}}}

次のように表示される。結構楽しい。

graphviz-01.png