From 08ff3f37c23db1e05aacd0a1213d75f097d3f938 Mon Sep 17 00:00:00 2001 From: ellson Date: Thu, 22 Dec 2005 16:32:51 +0000 Subject: [PATCH] add docbook version of plugin documentation --- doc/docbook/src/book.xml | 18 + doc/docbook/src/bookinfo.xml | 48 ++ doc/docbook/src/graphviz_plugins.xml | 444 ++++++++++++++++++ doc/docbook/src/graphviz_scripting.xml | 13 + doc/docbook/src/imgs/Txlib.png | Bin 0 -> 4620 bytes doc/docbook/src/imgs/framework.png | Bin 0 -> 46991 bytes doc/docbook/src/imgs/framework.svg | 608 +++++++++++++++++++++++++ doc/docbook/src/imgs/hello_cairo.png | Bin 0 -> 4762 bytes doc/docbook/src/imgs/hello_gd.png | Bin 0 -> 802 bytes 9 files changed, 1131 insertions(+) create mode 100644 doc/docbook/src/book.xml create mode 100644 doc/docbook/src/bookinfo.xml create mode 100644 doc/docbook/src/graphviz_plugins.xml create mode 100644 doc/docbook/src/graphviz_scripting.xml create mode 100644 doc/docbook/src/imgs/Txlib.png create mode 100644 doc/docbook/src/imgs/framework.png create mode 100644 doc/docbook/src/imgs/framework.svg create mode 100644 doc/docbook/src/imgs/hello_cairo.png create mode 100644 doc/docbook/src/imgs/hello_gd.png diff --git a/doc/docbook/src/book.xml b/doc/docbook/src/book.xml new file mode 100644 index 000000000..aa28b1ec8 --- /dev/null +++ b/doc/docbook/src/book.xml @@ -0,0 +1,18 @@ + + + + + +]> + + +Graphviz Extensions +Plugin and Scripting extensions to Graphviz + +&bookinfo; +&plugins; +&scripting; + diff --git a/doc/docbook/src/bookinfo.xml b/doc/docbook/src/bookinfo.xml new file mode 100644 index 000000000..267c50867 --- /dev/null +++ b/doc/docbook/src/bookinfo.xml @@ -0,0 +1,48 @@ + + + + + + + +John +Ellson + + + + + + +0.1 +09/12/2005 +Initial Release + + + + +2005-2006 +AT&T + + + +120-126 pages + +December, 2nd 2005 + diff --git a/doc/docbook/src/graphviz_plugins.xml b/doc/docbook/src/graphviz_plugins.xml new file mode 100644 index 000000000..b508b48c2 --- /dev/null +++ b/doc/docbook/src/graphviz_plugins.xml @@ -0,0 +1,444 @@ + + +Graphviz Plugins + +Introduction + +Graphviz plugins are a means of extending the capabilities of the +graphviz tools: +dot, +neato, +fdp, +twopi, and +circo, + + +The initial motivation for the development of plugins was to support +alternative renders based on + +cairo +, +while keeping +the stable renderer based on + +gd + +available. +The gd renderer does not support anti-aliased lines +(first image). +Simply by installing the graphviz-cairo package the -Tpng renderer is +substituted with one based on cairo (second image). + + +Use of the newly installed plugin requires no change in the user's command. +These images were generated before and after installing +graphviz-cairowith the command: + +echo "digraph G {hello->world}" | dot -Tpng > hello.png + + + + + + + + + + + + + + + + + + + + + +A second motivation was to support GUI interfaces to graphs, but +without bloating the basic version of +dot with dependencies on +gtk or xlib. +The command: + +echo "digraph G {hello->world}" | dot -Txlib + +demand loads the xlib renderer from the graphviz-cairo plugins +and produces a zoomable display of the graph in a window: + + + + + + + + + + + +Objectives and Constraints + + +Support independent compilation so that plugins can be provided by +others separate from the base graphviz package. + + +Support independent packaging so that plugins can be installed +at the user's discretion, separate from the base graphviz package. + + +Support optional platform-specific functionality without adding +complexity to the base package. + + +Support on-demand loading of plugins so that extra capabilities +do not degrade performance for basic usage of the tools. + + +Unbundle some existing functionality into plugins so that the base +version of dot can be faster when that functionality is not needed. + + +Minimize performance cost of plugin support, particularly if no plugins +are demanded. + + +Must be able to configure dot with a fixed set of plugins as +builtins that are unconditionally loaded at program +invocation (linked at load time). + + +Must be able to configure dot as a static binary (linked at compile time), +including builtins if specified. + + +Must support old-style codegens +at least until completely replaced +by plugins that are equal or better in quality. + + + + +Structure and terminology + +A plugin-package, +such as graphviz-cairo-2.6-1.i386.rpm, provides one or more +plugin-libraries. + + +A plugin-library provides plugins that implement various +plugin-apis. +The plugin-library is the unit that is dynamically loaded. + + +There are currently five plugin-apis: +layout, textlayout, usershape, render, device. + + +A plugin-library provides +plugin-types +which implement plugin-api. +e.g. png ps pdf plugin-types implementing the renderer api. + + +Each plugin-type implementation provides a +quality indicator to control +the default selection when there are multiple implementations +of the same plugin-type. +The builtin implementations (if any) have a quality +of 0. +A positive quality +will choose the plugin in preference to the builtin. +A negative quality +will leave the builtin as the default. + + +The plugins are self-describing. +At installation time, dot -c is run to generate +/usr/lib/graphviz/config which describes the capabilities +of the available plugin-libraries so that they don't have +to be loaded at startup and can be loaded later on demand. + + + +The graphviz-cairo package. + +The graphviz-cairo package provides multiple plugin-libraries, +all with some dependence on libcairo.so. +In general, a plugin-package can be used to localize all +knowledge and dependencies on some facility like cairo or +gtk or quartz. +The graphviz-cairo package alongside the graphviz base package +is illustrated diagrammatically here: + + + + + + + + + + + Once graphviz-cairo is installed, and dot -c has +been run as part of the installation process, +the file: /usr/lib/graphviz/config contains: + + +libgvplugin_gtk.so.2 gtk { + device { + gtk 0 + } +} +libgvplugin_xlib.so.2 xlib { + device { + xlib 0 + } +} +libgvplugin_cairo.so.2 cairo { + render { + png 10 + ps -10 + pdf 0 + gtk 0 + xlib 0 + } + textlayout { + cairo 10 + } +} +libgvplugin_dot_layout.so.2 dot_layout { + layout { + dot 0 + } +} +libgvplugin_neato_layout.so.2 neato_layout { + layout { + neato 0 + fdp 0 + twopi 0 + circo 0 + } +} + + + +Running dot with plugins + +Dot attempts to be transparent to the user about its use of plugins. +By default it will always chose the highest quality plugin of the matching plugin-type. +Sometimes it is necessary to override the default. +This can be done by explicitly specifying the package to +take the plugin from. e.g. dot -Tpng +takes the highest quality +plugin currently available. +dot -Tpng:cg +takes the png renderer from the codegens. + + +If the package is unrecognized, the dot will return the set of available packages: + + +$ dot -Tpng: hello.dot +Renderer type: "png:" not recognized. Use one of: png:cairo png:cg + + +Also, dot -v will identify all +available plugins for all the apis. + + + The plugin configuration file: + /home/ellson/FIX/Linux.i686/lib/graphviz/config + was successfully loaded. + render : canon cmap cmapx dia dot fig gd gd2 gif gtk + hpgl imap ismap jpeg jpg mif mp pcl pdf pic plain + plain-ext png ps ps2 svg svgz vrml vtx wbmp xdot xlib + layout : circo dot fdp neato twopi + textlayout : cairo + device : gtk xlib + usershape : png-gd + + + +Installing plugins + +In order for dot to know what plugin capabilities are available +there is a file called /usr/lib/graphviz/config that is created +by running +dot -c +at install time. +dot -c +globs the library directory for all +filenames that look +like they might be plugins, then it goes through and actually +loads each of them in turn, positively verifying that they are +version compatible and loadable, and it then extracts from each +library the set of apis and types that it supports. +It saves this information in /usr/lib/graphviz/config. +When dot is run normally by a user, the single /usr/lib/graphviz/config file is +loaded but the plugins themselves are not loaded unless a plugin +is demanded from that library. + + +dot -c must be run, with enough priviledges to write +/usr/lib/graphviz/config, whenever the set of plugins is changed. +For rpm systems +dot -c +is run automatically in %post and %postun +scripts in the rpm specfile. +If building from sources and installing directly, +dot -c is run +by the make install target. +If you are cross-compiling and cross-installing then probably the +best thing to do is to not use demand loaded plugins at all. +There is a dot_static +binary generated which as a basic set of +plugins already builtin. + + + +Developing new plugins + +One of the key goals of the plugin architecture was to allow others +to develop new plugins or plugin-libraries. In this section I +describe the structure of the key parts of the graphvz-cairo package +with a view to reusing or hacking them into a new package. + + +A plugin-package + +The following files in the source tree for the graphviz-cairo package +can probably be used without change: + + graphviz-cairo/ + autogen.sh + cpl1.0.txt + ltmain.sh.patch + mkinstalldirs + + + +The following files should be changed to suit: + + graphviz-cairo/ + AUTHORS + ChangeLog + NEWS README + configure.ac + Makefile.am + graphviz-cairo.spec.in + + + +Also in graphviz-cairo are a number of GUI related files +specific to graphviz-cairo. +These can be probably not useful for any other plugin based on this code: + + + graphviz-cairo/ + dot.dot + dot.png + dot.xml + dotedit-splash.dot + dotedit.desktop.in + dotedit.indotedit.in + po/ + + + +A plugin library + +Each library in the plugin package has its own subdirectory under plugins: + + + graphviz-cairo/ + plugin/ + Makefile.am + cairo/ + Makefile.am + gvplugin_cairo.c + gtk/ + Makefile.am + gvplugin_gtk.c + xlib/ + Makefile.am + gvplugin_xlib.c + + +graphviz-cairo/plugins/Makefile.am builds all the libraries as SUBDIRS. + + +In each library subdir Makefile.am and a gvplugin_xxx.c. +The gvplugin_cairo.c file is quite short. +It defines the primary entry symbol to the library +which is a structure defining the name +of the library and the address of the table of APIs that it supports. + + +The name: cairo, +the symbol: gvplugin_cairo_LTX_library, +and the filename of the library: +libgvplugin_cairo.so.2.0.0 +must be kept aligned for the plugin mechanism to work. + + +#include "gvplugin.h" + +extern gvplugin_installed_t gvrender_cairogen_types; +extern gvplugin_installed_t gvtextlayout_cairogen_types; + +static gvplugin_api_t apis[] = { + {API_render, &gvrender_cairogen_types}, + {API_textlayout, &gvtextlayout_cairogen_types}, + {(api_t)0, NULL}, +}; + +gvplugin_library_t gvplugin_cairo_LTX_library = { "cairo", apis }; + + + +Plugin APIs + +The APIs are defined for the plugins by header files: + + + /usr/include/graphviz/gvplugin_device.h + /usr/include/graphviz/gvplugin_layout.h + /usr/include/graphviz/gvplugin_render.h + /usr/include/graphviz/gvplugin_textlayout.h + /usr/include/graphviz/gvplugin_usershape.h + + +Also, the set of APIS is defined in graphviz2/lib/gvc/gvplugin.h in: + #define APIS ELEM(render) ELEM(layout) ELEM(textlayout) ELEM(device) ELEM(usershape) + + +In the core of graphviz, each API is wrapped by a set of functions +that hide the details of the plugin mechanisms from the caller. + + + graphviz2/lib/gvc/gvdevice.c + graphviz2/lib/gvc/gvlayout.c + graphviz2/lib/gvc/gvrender.c + graphviz2/lib/gvc/gvtextlayout.c + graphviz2/lib/gvc/gvusershape.c + + +So, to add a new API, minimally what is required +is a new header file, extend the #define APIS, +and a new file of wrapper functions. + + + +Plugin types for an API + +The cairo library in particular is developing a number of new backends. +At some point someone will want to use one or more of these new backends. + + +(tbd) + + + + diff --git a/doc/docbook/src/graphviz_scripting.xml b/doc/docbook/src/graphviz_scripting.xml new file mode 100644 index 000000000..35d79079a --- /dev/null +++ b/doc/docbook/src/graphviz_scripting.xml @@ -0,0 +1,13 @@ + + +Graphviz Scripting + +Introduction + +Graphviz supports a C/C++ API suitable for SWIG-generatted wrappers so that the dot libraries can be used form various scripting and other languages. +The set of languages currently available includes: +C#, GUILE, JAVA, LUA, OCAML, PERL, PHP, PYTHON, RUBY, TCL. +in addition to C and C++. + + + diff --git a/doc/docbook/src/imgs/Txlib.png b/doc/docbook/src/imgs/Txlib.png new file mode 100644 index 0000000000000000000000000000000000000000..cc298d81f33f9c7418df87aa60d02dcec32415ed GIT binary patch literal 4620 zcmcIo`9IX(_kYwOW&+1g9|r(H0CmO0 zn$5B7Q4iu|Q^wz2U2MkfWn^Il0F^2H`))jJSvv%2A7T^e84~UmgazzxO5el=1^WaB zNME|Bs^TUsZH*1nl~z@Qsp-IU)TI^J5v1?Bg?M;Nt6o%792dQa0stXDl!?)e`}pNt zn0=Y0SQqs`|I7sl=-89TuF?=tEZ?zK_Vg}Si(%d4kN;Ku*YeX)#ZLwNSB!wLra7B) zv+XM8D&`|=vFj^as~6kyry_UZ%ugw$OFt&-+f?v6UVSOAPjbKD;sv;`v_Xy$uA_U* zB$Qw7M8^Q@LeF{TN7Pj;VR0oTF5}&e*N1DD_jumP$$3B4UXzlO1KxOCI?P=l9}X%n z$zn0ArlpPSH#{t~vvB0mKlW+Xn1r2!(mG*Zmw?-fKS0Xh&ObJlPvT^KwRH0u6*2Nd zELW4^&_s(GLj>Teqn^Ok=JdMY>YRwL^lkfeRWhugNFrmpJ zE@*iC4)z^5Bfs7Idu-@@Mau8-_G8tWBcIzLw!iy|F9LWpaic2s5Yh5r6a@6YPkml>#BU0` zv}9BSbpAWZ3)~1F+}QfKv-5;Z%tZL=jXE3+H(xr|Faz0q?a_ZN`KF+@R6FMg*EBx( zu zyzkiq)gzW+Lr<0Y>)R2kSi#=YjwJsvQn{a!(+{za4>GWr4D2q{jwCYIy$-KvGbB;_ zOY1JSs`N5$jSa%7!A^E)-HZi|#7cFG)bk$#lqglLD(c%wU%y5z?KeWN?e%v;E_H6e zVU%yo11m5;Ac9=W^Kn%7s|$9DTOz@J)>o&iwNWSARO0jJ+x>VW z7jjHvI~z)VC} za+Cb$s^RrL`*FWUuUu=$SGY=3r&Ni)V(N2y;IWwOBD6?tb-!oh)w%ByIX|$TXC0Oe zwtT--1nm`Dcyc$@da|Ba%$4px)-y{+tT%nI2VBoO9JYriOB_n;!%~No;?E(`4$L`1 zKMOju$-X4o$KoU9ti8OqqagS><^Aivx?$WGnU;?M%?S8C44`a z?Wry8s%!eWc`iMIoYt>Y-`fwW&GN@${_HiTS(T8>^A)O~{HxQ$u=-Y#zq;`c?9jgQ z$p|51l}=@etou?{#k57zox@Z9cEL`Wy`TrK6)s^s#vl)<=)bZB!=DFYW;GU*M_YNe z-7oAI2^Q}FsX9JU4?P-AT_3-BX5)2gjUZ@V;bu+T85YVU4 zC_WijEM_Wl$pSvv7AzspUgQ?DyB1pdS=lZcT<-<(pfdJ7q<|f+F35DGdBuma+fz@o z>4TdQw?@uh}T#egvm7;C8m6N#N6O7eaae{mQ@z-h1_d_lOInWy~XH?yGwzP4|h?Rj2cQz-v^wlCc@biMk`DUtJd5qzWjq!zVg0t^|{*>5Q_Fa z)Ts+ojWz*uXBTyNt$&kAJ+u^P1Ghy7YtN-wf9P`KYgo$DbXkL@-j4tmHrd=;HbJ*b z?a(s4W4aTwip29eNdEj^M35g=7k8k?9v!-A%dEGFLxfF+*=f2{A4An#J(o zb9+m#u;MOv_lnzv3Ha#2yd5mYpaI;dF*NcmRNo-QPNMo%v<8Uts!xJRoTM@6ZQ8NN zKac0&o!!gW?|b}gxf#?D|AH*5)s((%#%t6JNj-32nbNCYZYvcit2bn2d(hOs29jr9 zxy-KP%sp?5caPvT=_xzFbGLczzHo_dkWBJ)jN3?`)?iSBCWv!5)PF3XlJAF@v0|G6}b^$rs_Oggf9GA`PMLm>!K=`hy8Q5?189#?h`?g3_+fJN; zFARM5Ssc z5X?Ij`!HPR|B{sv?Egh5fUUa>`q%beJ}DFF!_sn$fz>sZUXyc(21gF?`@ikNs}AG~ z!71?$%@u2P4&?aVucVw;u~#Se-$|2La8X$q8Wcw@%KQE`tg zC;ud6;NuD9PKZZY+nsAU4AI>beuY4aSwPPs(VbaFF1>j}&(QJ8*g%>;a%^Bz|KOF= zf$&crm(-&=bE4?oJ~#GDT_Ce_FuA-$j}5!=GY&B?5$n^8tl*2*e)K(ZV=0@Il&D*j zmYfuvv|o#plSYuD2SanQn5cANW9>P1Z6KKi@$mR%Kdv`&&?68oc6}nFBh*MyF4%e^ z4J1?9l;J;?o7cKACrB}Kex%@-I`?VBzD2jDU6c1LB>LHVo-CKye6>6*#(nj@C2=Ta zFhMl~FTak1jxHZ;Kq)ME@eJn%+$u_b>cNJ5qt?3S{%eD)uugjs0*t`-2~4^41eZ1)tJfw=wW6_anWYxX z&B^qH3@y3N5oRQ_TXfLm!MRg_bc{&{n%TV-DdhpxME;6N+Ki{Vd;Bs4rE6hBPDNUd z+hRnJaee3R32JN$R9fBjby)1s2~YX?`}_+_SvC1lA_*mHz~OHv8+6-9 z_-LZb)P$X_ZP-7xW7rM;x50OgYBVf_nfU8c}DHAW~BDTHK9k zP8xb2Bo<>;+(Y2t}?AB*5c0l-(pK2%9k7`#6LSluw?%kD8 zm+H=5l)LjU(|^k?_@@i;J;$%L9a9D$nlI6r7X2YuSuvh-b-K$~wZi*S-V3Tn;yOa{ z6aa~RtQr7;)jGrab~oKezx=7osV)J}5wUy~c z=NPAQQmP;x7TZOEZ-()UpZegl zlJX<))Lx?oi5*^l0n30e;MBd@XKoN~qlA+)oS}|bCf&=8zE!eH56hL1a$U{r($U)f ztLE91_Dzy#sF~=TA0)QYOWQ12;m`YJ?*R-OFmVK$PRCvy(RaJKov_qlffhlEAYm&5 z_~6Rd7bHF(wg);HT}P)~Saqt%B$tyWRK{}d;~5Jf#{m`2#PtweQ77r99^}KFc=zP^ z{1@MXKr&Q@L>Eqd>-h{^F|cR$(i?ICX`54JXkN{sBC~4z%8u4R=(xHCI?xJQ71URp zX#-rL-T0pFYu&r9FBKk^&S5A|c+F}I2(ogl$gK48o7z4VYL`GiXOK`(-A!6PkLt;> z9vdW-^b@lRAop~Cz#2a*CN*pcZ)`m^BYS!47V>TKBQT=GlpQ@GBJ2rdDO`{Zwqk>a}8cmayYcIEq_Sk%YFY0 z9Q!uZ`ybvS5K@R8uu2KI@vkjQPjsN!y<6;=^zvoB`kvO*>p$K6$4=E}(tJPtoi(+T zUB-RlFivpI%DX;$4%f2IBz|E^w%q%Tb8eGs={#(ueN>3w3?C(94$dFs#-CObNXdL} zCz*?ETupej_3Mqo@n6h$H~+{D>6y&B&lStA82!p+5yPT%lc(#5WBX1)bf0xxnV-_1 zky~irX-9Sot)rRlkJJ>fwS>i7C(QL^xF?ktU)oqj+S(3{Sd-G=RBS<9;WP&uiM(`1 zjUm&0l!j=|5KGlgZ~ob8({*8(w{Tv8!f~1Q(~f^eeyYIdQ`wC{u%ClR0{B}WYEX^9 zCzIw}cn;nTS8=TCMf|f!QWG>6dX(;5SpJly8K22WIhZ1YA5U4Aw&%s!|1-=C>BHS~ zQpZ7^T8h@QSOiPOq-pJjD@cvT!@`QYeaMc+&2vf9S=QuT<94uAL#)i9bFxg+acFKx4@CZVZYMNnPQ*pZC!-_E^&C*hYjPNQ4WHOh!eXhL5YU=)dZK|7OuGjv&sJX z%K9yNuR_=!hNHRQVq}~zE=O`UFq;2=$$1(9fH_RLN`?MTipNbpKUDKPs@Ka#BrC+n z#D`c(|^5g;LWw^x)+b*Xg+!>1iX17!ajSmfFrgi zD%A0l8F5;hN2rwO&CUNvsQHB$gY%SY){$#W`vs9gwt^GT23S%IQNJA8wnQ-d?}j%7 dWr5@!r1u@Kp`znh{mo@{sUTv6^Z}= literal 0 HcmV?d00001 diff --git a/doc/docbook/src/imgs/framework.png b/doc/docbook/src/imgs/framework.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4ee0953d06767a84212875de5fe18b3ee94004 GIT binary patch literal 46991 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

4?OC^sS`DSh0V{ivb--6=VR?mMe40JT2;@m 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�)UQh@&c#lHQt{rSZ?! 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 WV=}Lc$H7Noh + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + graphviz rpm + graphviz-cairo rpm + libgvplugin_cairo.so + libgvplugin_xlib.so + libgvplugin_gtk.so + layout + usershape + textlayout + render + device + xlib + gtk + png + ps + pdf + xlib + gtk + textlayout + + + + + + libgvplugin_dot_layout.so + libgvplugin_neato_layout.so + dot + neato + + + + + + builtins + libgvclibcommonlibgraphlibcdtlibgd + + dot + main() + + (codegens) + Render apiand itsalternativeplugin-types + + diff --git a/doc/docbook/src/imgs/hello_cairo.png b/doc/docbook/src/imgs/hello_cairo.png new file mode 100644 index 0000000000000000000000000000000000000000..0e08b608228fd867439e7e153184f23efde25696 GIT binary patch literal 4762 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


wQvq0o{N7}Wko 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 O1Zk=vRI8MqhW!uNwHoLE literal 0 HcmV?d00001 diff --git a/doc/docbook/src/imgs/hello_gd.png b/doc/docbook/src/imgs/hello_gd.png new file mode 100644 index 0000000000000000000000000000000000000000..518b228133f0ecffffb2a6db9d062d153f001afb GIT binary patch literal 802 zcmV+-1Ks?IP)v0Py|`3{8Ub)U7*iYpZZX6Nnu5(TW^9+5^|E+Q^YXMsgb=0l)ut`Ep_> z&rTj{)lP~pfb)~{VjJ6eCqOBGPg+joUSrN&UK()M_0aD)FM-m}5@(hB%QZ4**aM1Q z;;5Fq#BnXwi@e%zmAeX@skCsZ;EKTI8y8#|ir7}pwTU8UIz6My; z^1}v#G??hivX;a2#gFt+uOJBw;aPt#mIt^0(Y+0No1tru-*s{=jp~t8tSKkXcjCW^ z_+O>21jKcQxQbENNa6}iUEis@2X${E?tIjJ6^OewP|pNFJaJ^D`FW=0EpK_tTi)`t z;9Jc@@pw1G!g(@|)vG%4u{k