From: ellson Date: Mon, 24 Oct 2005 19:29:18 +0000 (+0000) Subject: some docs X-Git-Tag: LAST_LIBGRAPH~32^2~7011 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=91de3c17554c53515bb78f74e359505298ed380f;p=graphviz some docs --- diff --git a/tclpkg/gv/.cvsignore b/tclpkg/gv/.cvsignore index d302f6d23..e55f37e8f 100644 --- a/tclpkg/gv/.cvsignore +++ b/tclpkg/gv/.cvsignore @@ -7,14 +7,12 @@ Makefile.in pkgIndex.tcl *.pdf gv_*.cpp -SWIGTYPE_p_Agedge_t.cs -SWIGTYPE_p_Agedge_t.java -SWIGTYPE_p_Agnode_t.cs -SWIGTYPE_p_Agnode_t.java -SWIGTYPE_p_Agraph_t.cs -SWIGTYPE_p_Agraph_t.java +gv_*.man +SWIGTYPE_p_* gv.cs gv.java +gv.ml +gv.mli gv.php gv.pm gv.py @@ -22,13 +20,4 @@ gv.pyc gvJNI.java gvPINVOKE.cs php_gv.h -test_csharp -test_guile -test_io -test_java -test_ocaml -test_perl -test_php -test_python -test_ruby -test_tcl +test_* diff --git a/tclpkg/gv/Makefile.am b/tclpkg/gv/Makefile.am index d96a7ef34..1f67dd362 100644 --- a/tclpkg/gv/Makefile.am +++ b/tclpkg/gv/Makefile.am @@ -13,7 +13,6 @@ LIBS = @LIBS@ -lc BASESOURCES = gv.cpp BASELIBS = $(top_builddir)/lib/gvc/libgvc.la - pkgcsharpdir = $(pkglibdir)/csharp CSHARP_hdr = gv.cs gvPINVOKE.cs SWIGTYPE_p_Agraph_t.cs SWIGTYPE_p_Agnode_t.cs SWIGTYPE_p_Agedge_t.cs libgv_csharp_la_SOURCES = $(BASESOURCES) gv_csharp.cpp $(CSHARP_hdr) @@ -82,9 +81,9 @@ gv_php.cpp $(PHP_hdr): gv.i pkgpythondir = $(pkglibdir)/python PYTHON_hdr = gv.py -_gv_la_SOURCES = $(BASESOURCES) gv_python.cpp $(PYTHON_hdr) -_gv_la_LIBADD = $(BASELIBS) @PYTHON_LIBS@ -_gv_la_LDFLAGS = -module +libgv_python_la_SOURCES = $(BASESOURCES) gv_python.cpp $(PYTHON_hdr) +libgv_python_la_LIBADD = $(BASELIBS) @PYTHON_LIBS@ +libgv_python_la_LDFLAGS = -module gv_python.cpp $(PYTHON_hdr): gv.i $(SWIG) -c++ -python -o gv_python.cpp gv.i @@ -108,57 +107,57 @@ pkginclude_DATA = gv.i gv.cpp pkglib_LTLIBRARIES = TESTS = if WITH_CSHARP -pkgcsharp_DATA = $(CSHARP_hdr) +pkgcsharp_DATA = $(CSHARP_hdr) gv_csharp.man pkgcsharp_LTLIBRARIES = libgv_csharp.la TESTS += test_csharp endif if WITH_GUILE -pkgguile_DATA = $(GUILE_hdr) +pkgguile_DATA = $(GUILE_hdr) gv_guile.man pkgguile_LTLIBRARIES = libgv_guile.la TESTS += test_guile endif #if WITH_IO -#pkgio_DATA += $(IO_hdr) -#pkgio_LTLIBRARIES += libgv_io.la +#pkgio_DATA = $(IO_hdr) gv_io.man +#pkgio_LTLIBRARIES = libgv_io.la #TESTS += test_io #endif if WITH_JAVA -pkgjava_DATA = $(JAVA_hdr) +pkgjava_DATA = $(JAVA_hdr) gv_java.man pkgjava_LTLIBRARIES = libgv_java.la TESTS += test_java endif if WITH_LUA -pkglua_DATA = $(LUA_hdr) +pkglua_DATA = $(LUA_hdr) gv_lua.man pkglua_LTLIBRARIES = libgv_lua.la TESTS += test_lua endif if WITH_OCAML -pkgocaml_DATA = $(OCAML_hdr) +pkgocaml_DATA = $(OCAML_hdr) gv_ocaml.man pkgocaml_LTLIBRARIES = libgv_ocaml.la TESTS += test_ocaml endif if WITH_PERL -pkgperl_DATA = $(PERL_hdr) +pkgperl_DATA = $(PERL_hdr) gv_perl.man pkgperl_LTLIBRARIES = libgv_perl.la TESTS += test_perl endif if WITH_PHP -pkgphp_DATA = $(PHP_hdr) +pkgphp_DATA = $(PHP_hdr) gv_php.man pkgphp_LTLIBRARIES = libgv_php.la TESTS += test_php endif if WITH_PYTHON -pkgpython_DATA = $(PYTHON_hdr) -pkgpython_LTLIBRARIES = _gv.la +pkgpython_DATA = $(PYTHON_hdr) gv_python.man +pkgpython_LTLIBRARIES = libgv_python.la TESTS += test_python endif if WITH_RUBY -pkgruby_DATA = $(RUBY_hdr) +pkgruby_DATA = $(RUBY_hdr) gv_ruby.man pkgruby_LTLIBRARIES = libgv_ruby.la TESTS += test_ruby endif if WITH_TCL -pkgtcl_DATA = $(TCL_hdr) +pkgtcl_DATA = $(TCL_hdr) gv_tcl.man pkgtcl_LTLIBRARIES = libgv_tcl.la TESTS += test_tcl @@ -168,6 +167,21 @@ pkgIndex.tcl: libgv_tcl.la sh $(top_srcdir)/tclpkg/mkpkgindex.sh libgv_tcl.la gv $(VERSION) endif +gv_csharp.man gv_guile.man gv_io.man gv_java.man gv_ocaml.man gv_perl.man gv_php.man gv_python.man gv_ruby.man gv_tcl.man: gv.i gv_doc_writer.tcl gv_doc_template.tcl gv_doc_langs.tcl + tclsh ./gv_doc_writer.tcl + +install-exec-hook: + (cd $(DESTDIR)$(pkgperldir); rm -f gv.so; $(LN_S) libgv_perl.so gv.so;) + (cd $(DESTDIR)$(pkgpythondir); rm -f _gv.so; $(LN_S) libgv_python.so _gv.so;) + (cd $(DESTDIR)$(pkgrubydir); rm -f gv.so; $(LN_S) libgv_ruby.so gv.so;) + (cd $(DESTDIR)$(pkgtcldir); rm -f gv.so; $(LN_S) libgv_tcl.so gv.so;) + +uninstall-hook: + (cd $(DESTDIR)$(pkgperldir); rm -f gv.so;) + (cd $(DESTDIR)$(pkgpythondir); rm -f _gv.so;) + (cd $(DESTDIR)$(pkgrubydir); rm -f gv.so;) + (cd $(DESTDIR)$(pkgtcldir); rm -f gv.so;) + test: $(TESTS) .PHONY: test_csharp @@ -232,14 +246,15 @@ test_php: libgv_php.la .PHONY: test_python test_python: _gv.la -(mkdir -p test_python; cd test_python; \ - ln -fs ../.libs/_gv.so ../*.dot ../*.py .; \ + ln -fs ../.libs/libgv_python.so _gv.so; \ + ln -fs ../*.dot ../*.py .; \ PYTHONPATH=. $(PYTHON) test.py) .PHONY: test_ruby -test_ruby: libgv_ruby.la +test_ruby: gv.la -(mkdir -p test_ruby; cd test_ruby; \ ln -fs ../.libs/libgv_ruby.so gv.so; \ - ln -fs ../*.dot ../*.rb .; \ + ln -fs ../.libs/gv.so ../*.dot ../*.rb .; \ $(RUBY) test.rb) .PHONY: test_tcl @@ -249,9 +264,9 @@ test_tcl: libgv_tcl.la ln -fs ../*.dot ../*.tcl .; \ $(TCLSH) ./test.tcl) -EXTRA_DIST = demo/* gv.cpp gv.i +EXTRA_DIST = demo/* gv.cpp gv.i gv_doc_*.tcl -CLEANFILES = test_*/* \ +CLEANFILES = test_*/* gv_*.man \ gv_csharp.cpp $(CSHARP_hdr) \ gv_guile.cpp $(GUILE_hdr) \ gv_io.cpp $(IO_hdr) \ diff --git a/tclpkg/gv/demo/modgraph.lua b/tclpkg/gv/demo/modgraph.lua index 6920ae244..36e02656e 100755 --- a/tclpkg/gv/demo/modgraph.lua +++ b/tclpkg/gv/demo/modgraph.lua @@ -4,7 +4,8 @@ -- author: John Ellson -lib = loadlib('/usr/lib64/graphviz/lua/libgv_lua.so','Gv_Init') +lib = loadlib('/usr/lib/graphviz/lua/libgv_lua.so','Gv_Init') +-- lib = loadlib('/usr/lib64/graphviz/lua/libgv_lua.so','Gv_Init') assert(lib)() modules = io.lines('/proc/modules') diff --git a/tclpkg/gv/demo/modgraph.py b/tclpkg/gv/demo/modgraph.py index 0376f4e46..eaa50341d 100755 --- a/tclpkg/gv/demo/modgraph.py +++ b/tclpkg/gv/demo/modgraph.py @@ -6,8 +6,8 @@ # based on: modgraph.tcl by John Ellson import sys -# sys.path.append('/usr/lib/graphviz/python') -sys.path.append('/usr/lib64/graphviz/python') +sys.path.append('/usr/lib/graphviz/python') +# sys.path.append('/usr/lib64/graphviz/python') import gv modules = open("/proc/modules", 'r').readlines() diff --git a/tclpkg/gv/demo/modgraph.rb b/tclpkg/gv/demo/modgraph.rb new file mode 100755 index 000000000..26ba762fb --- /dev/null +++ b/tclpkg/gv/demo/modgraph.rb @@ -0,0 +1,32 @@ +#!/usr/bin/ruby + +# display the kernel module dependencies + +# author: John Ellson + +require 'gv' + +G = Gv.digraph("G") +Gv.setv(G, 'rankdir', 'LR') +Gv.setv(G, 'nodesep', '0.05') +Gv.setv(G, 'node', 'shape', 'box') +Gv.setv(G, 'node', 'width', '0') +Gv.setv(G, 'node', 'height', '0') +Gv.setv(G, 'node', 'margin', '.03') +Gv.setv(G, 'node', 'fontsize', '8') +Gv.setv(G, 'node', 'fontname', 'helvetica') +Gv.setv(G, 'edge', 'arrowsize', '.4') + +# for rec in modules do +# for mod, usedbylist in string.gfind(rec, "([_%w]+) %w+ %w+ ([-,_%w]+)") do +# n = gv.node(G, mod) +# for usedby in string.gfind(usedbylist, "([-_%w]+)") do +# if (usedby ~= '-') and (usedby ~= '') then +# gv.edge(n, gv.node(G, usedby)) +# end +# end +# end +# end + +Gv.layout(G, 'dot') +Gv.render(G, 'gtk') diff --git a/tclpkg/gv/demo/modgraph.tcl b/tclpkg/gv/demo/modgraph.tcl index f04d85c27..f7f084834 100755 --- a/tclpkg/gv/demo/modgraph.tcl +++ b/tclpkg/gv/demo/modgraph.tcl @@ -4,7 +4,11 @@ # author: John Ellson -package require gv +#package require gv + +load /usr/lib/graphviz/tcl/gv.so +#load /usr/lib64/graphviz/tcl/gv.so +#load $env(PREFIX)/lib/graphviz/tcl/gv.so set f [open /proc/modules r] set modules [read -nonewline $f] diff --git a/tclpkg/gv/gv.i b/tclpkg/gv/gv.i index 5f79fb112..8db08acdb 100644 --- a/tclpkg/gv/gv.i +++ b/tclpkg/gv/gv.i @@ -41,7 +41,7 @@ extern Agedge_t *edge(Agraph_t *g, char *tname, char *hname);/* add edge between /* set/get attribute of graph/node/edge */ extern char *setv(Agraph_t *g, char *attr, char *val); -extern char *setv(Agraph_t *g, char *gne, char *att, char *val); +extern char *setv(Agraph_t *g, char *gne, char *attr, char *val); extern char *setv(Agnode_t *n, char *attr, char *val); extern char *setv(Agedge_t *e, char *attr, char *val); diff --git a/tclpkg/gv/gv_doc_langs.tcl b/tclpkg/gv/gv_doc_langs.tcl new file mode 100644 index 000000000..2ed7c72ba --- /dev/null +++ b/tclpkg/gv/gv_doc_langs.tcl @@ -0,0 +1,261 @@ +array set LANGS { + csharp { + TYPES { + Agraph_t* SWIGTYPE_p_Agraph_t + Agnode_t* SWIGTYPE_p_Agnode_t + Agedge_t* SWIGTYPE_p_Agedge_t + Agsym_t* SWIGTYPE_p_Agsym_t + char* string + FILE* SWIGTYPE_p_FILE + bool bool + void** SWIGTYPE_p_p_void + void {} + } + SYNTAX { + gv. ( , {);} + } + SYNOPSIS { + } + USAGE { + } + } + guile { + TYPES { + Agraph_t* graph_handle + Agnode_t* node_handle + Agedge_t* edge_handle + Agsym_t* attribute_handle + char* string + FILE* channel + bool bool + void** data_handle + void {} + } + SYNTAX { + gv. ( , {);} + } + SYNOPSIS { + {(load-extension "./libgv.so" "SWIG_init")} + } + USAGE { + } + } + io { + TYPES { + Agraph_t* graph_handle + Agnode_t* node_handle + Agedge_t* edge_handle + Agsym_t* attribute_handle + char* string + FILE* channel + bool bool + void** data_handle + void {} + } + SYNTAX { + gv. ( , {);} + } + SYNOPSIS { + } + USAGE { + } + } + java { + TYPES { + Agraph_t* SWIGTYPE_p_Agraph_t + Agnode_t* SWIGTYPE_p_Agnode_t + Agedge_t* SWIGTYPE_p_Agedge_t + Agsym_t* SWIGTYPE_p_Agsym_t + char* string + FILE* SWIGTYPE_p_FILE + bool bool + void** SWIGTYPE_p_p_void + void {} + } + SYNTAX { + gv. ( , {);} + } + SYNOPSIS { + {System.loadLibrary("gv");} + } + USAGE { + } + } + lua { + TYPES { + Agraph_t* graph_handle + Agnode_t* node_handle + Agedge_t* edge_handle + Agsym_t* attribute_handle + char* string + FILE* channel + bool bool + void** data_handle + void {} + } + SYNTAX { + gv. ( , {);} + } + SYNOPSIS { + {#!/usr/bin/lua} + {lib=loadlib('/usr/lib/graphviz/lua/libgv_lua.so','Gv_Init')} + {assert(lib)()} + } + USAGE { + } + } + ocaml { + TYPES { + Agraph_t* graph_handle + Agnode_t* node_handle + Agedge_t* edge_handle + Agsym_t* attribute_handle + char* string + FILE* channel + bool bool + void** data_handle + void {} + } + SYNTAX { + gv. ( , {);} + } + SYNOPSIS { + } + USAGE { + } + } + perl { + TYPES { + Agraph_t* graph_handle + Agnode_t* node_handle + Agedge_t* edge_handle + Agsym_t* attribute_handle + char* string + FILE* channel + bool bool + void** data_handle + void {} + } + SYNTAX { + gv:: ( , {);} + } + SYNOPSIS { + {#!/usr/bin/perl} + {use gv;} + } + USAGE { + } + } + php { + TYPES { + Agraph_t* graph_handle + Agnode_t* node_handle + Agedge_t* edge_handle + Agsym_t* attribute_handle + char* string + FILE* channel + bool bool + void** data_handle + void {} + } + SYNTAX { + gv:: ( , {);} + } + SYNOPSIS { + {dl("libgv_php.so");} + {include("gv.php")} + } + USAGE { + } + } + python { + TYPES { + Agraph_t* graph_handle + Agnode_t* node_handle + Agedge_t* edge_handle + Agsym_t* attribute_handle + char* string + FILE* channel + bool bool + void** data_handle + void {} + } + SYNTAX { + gv. ( , {);} + } + SYNOPSIS { + {#!/usr/bin/python} + {import sys} + {sys.path.append('/usr/lib/graphviz/python')} + {import gv} + } + USAGE { + } + } + ruby { + TYPES { + Agraph_t* graph_handle + Agnode_t* node_handle + Agedge_t* edge_handle + Agsym_t* attribute_handle + char* string + FILE* channel + bool bool + void** data_handle + void {} + } + SYNTAX { + Gv. ( , {);} + } + SYNOPSIS { + {export RUBYLIB=/usr/lib/graphviz/ruby} + {} + {#!/usr/bin/ruby} + {require 'gv'} + } + USAGE { + } + } + tcl { + TYPES { + {Agraph_t* g} + {Agraph_t* sg} + {Agnode_t* n} + {Agnode_t* t} + {Agnode_t* h} + {Agedge_t* e} + {Agsym_t* a} + {char* gne} + {char* name} + {char* tname} + {char* hname} + {char* attr} + {char* val} + {char* filename} + {char* engine} + {char* string} + {char* format} + {FILE* f} + {void** data} + Agraph_t* + Agnode_t* + Agedge_t* + Agsym_t* + char* + FILE* + bool + void** + void {} + } + SYNTAX { + gv:: {} { } {} + } + SYNOPSIS { + {#!/usr/bin/tclsh} + {load /usr/lib/graphviz/tcl/gv.so} + } + USAGE { + {Requires tcl7.6 or later.} + } + } +} diff --git a/tclpkg/gv/gv_doc_template.tcl b/tclpkg/gv/gv_doc_template.tcl new file mode 100644 index 000000000..02ceb3287 --- /dev/null +++ b/tclpkg/gv/gv_doc_template.tcl @@ -0,0 +1,100 @@ +.TH GV_[string toupper $lang] N \"[clock format [clock seconds] -format "%d %B %Y"]\" + +.SH NAME + +gv_$lang \- graph manipulation in $lang + +.SH SYNOPSIS + +[gv_doc_synopsis] + +.SH USAGE + +[gv_doc_usage] + +.SH INTRODUCTION + +.B gv_$lang +is a dynamically loaded extension for +.B $lang +that provides access to the graph facilities of +.B graphviz. + +.SH COMMANDS +.PP +Graph creation commands: + +[gv_doc_command digraph] +[gv_doc_command graph] +[gv_doc_command strictdigraph] +[gv_doc_command strictgraph] +[gv_doc_command read] +[gv_doc_command readstring] +.PP +Node creation commands: + +[gv_doc_command node] +.PP +Edge creation commands: + +[gv_doc_command edge] +.PP +Object removal commands: + +[gv_doc_command rm] +.PP +Attributes: + +[gv_doc_command getv] + +[gv_doc_command setv] +.PP +Iterators: + +[gv_doc_command findattr] +[gv_doc_command firstedge] +[gv_doc_command nextedge] +[gv_doc_command firstin] +[gv_doc_command nextin] +[gv_doc_command firstout] +[gv_doc_command nextout] +[gv_doc_command firsthead] +[gv_doc_command nexthead] +[gv_doc_command firsttail] +[gv_doc_command nexttail] +[gv_doc_command firstnode] +[gv_doc_command nextnode] +[gv_doc_command firstsubg] +[gv_doc_command nextsubg] +[gv_doc_command firstsupg] +[gv_doc_command nextsupg] +[gv_doc_command firstattr] +[gv_doc_command nextattr] +[gv_doc_command ok] +.PP +Miscellaneous: + +[gv_doc_command headof] +[gv_doc_command tailof] +[gv_doc_command nameof] +[gv_doc_command findedge] +[gv_doc_command findnode] +[gv_doc_command findsubg] +[gv_doc_command graphof] +[gv_doc_command rootof] +.PP +Layout: + +[gv_doc_command layout] +.PP +Output: + +[gv_doc_command render] + +.SH BUGS + +.SH ACKNOWLEDGEMENTS + +.SH KEYWORDS + +graph, dot, neato, fdp, circo, twopi, $lang. diff --git a/tclpkg/gv/gv_doc_writer.tcl b/tclpkg/gv/gv_doc_writer.tcl new file mode 100755 index 000000000..ee17ae014 --- /dev/null +++ b/tclpkg/gv/gv_doc_writer.tcl @@ -0,0 +1,82 @@ +#!/usr/bin/tclsh + +source gv_doc_langs.tcl + +set TEMPLATE gv_doc_template.tcl + +set fn gv.i +set f [open $fn r] +set t [read $f [file size $fn]] +close $f + +regsub -all {.*%inline %\{} $t {} t +regsub -all {%\}} $t {} t +regsub -all {extern} $t {} t +regsub -all {/\*.*?\*/} $t {} t +regsub -all {//.*?} $t {} t + +foreach rec [split $t \n] { + set rec [string trim $rec " \t;)"] + if {[string length $rec] == 0} {continue} + set i 0 + set params {} + foreach type_name [split $rec "(,"] { + set type_name [string trim $type_name] + regsub -all {[ \t]+(\**)} $type_name {\1 } type_name + foreach {type name} $type_name {break} + if {! $i} { + set func $name + set functype $type + } { + lappend params $type $name + } + incr i + } + lappend FUNC($func) $functype $params +} + +proc gv_doc_synopsis {} { + global SYNOPSIS + return [join $SYNOPSIS "\n.br\n"] +} + +proc gv_doc_usage {} { + global USAGE + return [join $USAGE "\n.P\n"] +} + +proc gv_doc_command {cmd} { + global FUNC TYPES nameprefix paramstart paramsep paramend + + set res {} + foreach {functype params} $FUNC($cmd) { + set par {} + foreach {paramtype param} $params { + if {[string length [array names TYPES -exact "$paramtype $param"]]} { + lappend par "$TYPES($paramtype $param)" + } { + lappend par "$TYPES($paramtype) $param" + } + } + if {[string length $TYPES($functype)]} { + lappend res "$TYPES($functype) \\fB$nameprefix$cmd\\fR $paramstart[join $par $paramsep]$paramend" .br + } { + lappend res "\\fB$nameprefix$cmd\\fR $paramstart[join $par $paramsep]$paramend" .br + } + + } + return [join $res \n] +} + +foreach lang [array names LANGS] { + array set PROPS $LANGS($lang) + array set TYPES $PROPS(TYPES) + foreach {nameprefix paramstart paramsep paramend} $PROPS(SYNTAX) {break} + set SYNOPSIS $PROPS(SYNOPSIS) + set USAGE $PROPS(USAGE) + set f [open gv_[set lang].man w] + set ft [open $TEMPLATE r] + puts $f [subst [read $ft [file size $TEMPLATE]]] + close $ft + close $f +}