├── .gitignore ├── .travis.yml ├── ChangeLog ├── LICENSE ├── MANIFEST.in ├── README.rst ├── appveyor.yml ├── docs └── release-checklist.md ├── pydot_ng ├── __init__.py └── _dotparser.py ├── requirements-conda.txt ├── setup.cfg ├── setup.py ├── test-requirements.txt ├── test ├── from-past-to-future │ ├── AI.png │ ├── Agents.png │ ├── Automata.png │ ├── Berners_Lee.png │ ├── Biology.png │ ├── Chaos.png │ ├── Computers.png │ ├── Cryptography.png │ ├── Dertouzos.png │ ├── Ontology.png │ ├── Rejewski.png │ ├── Search_Engines.png │ ├── Semantic_Web.png │ ├── Small_World.png │ ├── Social_Networks.png │ ├── Turing.png │ ├── XML.png │ └── from-past-to-future.dot ├── graphs │ ├── ER.dot │ ├── Heawood.dot │ ├── KW91.dot │ ├── Latin1.dot │ ├── NaN.dot │ ├── Petersen.dot │ ├── a.dot │ ├── abstract.dot │ ├── alf.dot │ ├── arrows.dot │ ├── arrowsize.dot │ ├── awilliams.dot │ ├── b.dot │ ├── b102.dot │ ├── b106.dot │ ├── b117.dot │ ├── b123.dot │ ├── b124.dot │ ├── b135.dot │ ├── b143.dot │ ├── b145.dot │ ├── b146.dot │ ├── b15.dot_crashes_dot_bus_error │ ├── b155.dot │ ├── b22.dot │ ├── b29.dot │ ├── b3.dot │ ├── b33.dot │ ├── b34.dot │ ├── b36.dot │ ├── b491.dot │ ├── b51.dot │ ├── b53.dot │ ├── b545.dot │ ├── b56.dot │ ├── b57.dot │ ├── b58.dot_crashes_dot_abort_trap │ ├── b60.dot │ ├── b62.dot │ ├── b68.dot │ ├── b69.dot │ ├── b7.dot │ ├── b71.dot │ ├── b73.dot │ ├── b73a.dot │ ├── b76.dot │ ├── b77.dot │ ├── b786.dot │ ├── b79.dot │ ├── b80.dot │ ├── b80a.dot │ ├── b85.dot │ ├── b94.dot │ ├── b993.dot │ ├── bad.dot │ ├── badvoro.dot │ ├── big.dot │ ├── biglabel.dot │ ├── cairo.dot │ ├── center.dot │ ├── clover.dot │ ├── clust.dot │ ├── clust1.dot │ ├── clust2.dot │ ├── clust3.dot │ ├── clust4.dot │ ├── clust5.dot │ ├── color.dot │ ├── colors.dot │ ├── colorscheme.dot │ ├── compound.dot │ ├── crazy.dot │ ├── ctext.dot │ ├── d.dot │ ├── dd.dot │ ├── decorate.dot │ ├── dfa.dot │ ├── dfd.ps │ ├── dir.dot │ ├── dpd.dot │ ├── edgeclip.dot │ ├── fig6.dot │ ├── fsm.dot │ ├── grammar.dot │ ├── hashtable.dot │ ├── honda-tokoro.dot │ ├── html.dot │ ├── html2.dot │ ├── in.dot │ ├── jcctree.dot │ ├── jsort.dot │ ├── labelclust-fbc.dot │ ├── labelclust-fbd.dot │ ├── labelclust-fbl.dot │ ├── labelclust-fbr.dot │ ├── labelclust-fdc.dot │ ├── labelclust-fdd.dot │ ├── labelclust-fdl.dot │ ├── labelclust-fdr.dot │ ├── labelclust-ftc.dot │ ├── labelclust-ftd.dot │ ├── labelclust-ftl.dot │ ├── labelclust-ftr.dot │ ├── labelclust-nbc.dot │ ├── labelclust-nbd.dot │ ├── labelclust-nbl.dot │ ├── labelclust-nbr.dot │ ├── labelclust-ndc.dot │ ├── labelclust-ndd.dot │ ├── labelclust-ndl.dot │ ├── labelclust-ndr.dot │ ├── labelclust-ntc.dot │ ├── labelclust-ntd.dot │ ├── labelclust-ntl.dot │ ├── labelclust-ntr.dot │ ├── labelroot-fbc.dot │ ├── labelroot-fbd.dot │ ├── labelroot-fbl.dot │ ├── labelroot-fbr.dot │ ├── labelroot-fdc.dot │ ├── labelroot-fdd.dot │ ├── labelroot-fdl.dot │ ├── labelroot-fdr.dot │ ├── labelroot-ftc.dot │ ├── labelroot-ftd.dot │ ├── labelroot-ftl.dot │ ├── labelroot-ftr.dot │ ├── labelroot-nbc.dot │ ├── labelroot-nbd.dot │ ├── labelroot-nbl.dot │ ├── labelroot-nbr.dot │ ├── labelroot-ndc.dot │ ├── labelroot-ndd.dot │ ├── labelroot-ndl.dot │ ├── labelroot-ndr.dot │ ├── labelroot-ntc.dot │ ├── labelroot-ntd.dot │ ├── labelroot-ntl.dot │ ├── labelroot-ntr.dot │ ├── layer.dot │ ├── layer2.dot │ ├── layers.dot │ ├── ldbxtried.dot │ ├── longflat.dot │ ├── lsunix1.dot │ ├── lsunix2.dot │ ├── lsunix3.dot │ ├── md5_dot.jpe_text │ ├── md5_orig.jpe_text │ ├── mike.dot │ ├── mode.dot │ ├── multi.dot │ ├── newarrows.dot │ ├── ngk10_4.dot │ ├── nhg.dot │ ├── nojustify.dot │ ├── ordering.dot │ ├── overlap.dot │ ├── p.dot │ ├── p2.dot │ ├── p3.dot │ ├── p4.dot │ ├── pack.dot │ ├── pgram.dot │ ├── pm2way.dot │ ├── pmpipe.dot │ ├── polypoly.dot │ ├── ports.dot │ ├── proc3d.dot │ ├── process.dot │ ├── ps.dot │ ├── ps_user_shapes.dot │ ├── pslib.dot │ ├── pydot_children_wrong_order_clustlabel.dot │ ├── pydot_children_wrong_order_style.dot │ ├── record.dot │ ├── record2.dot │ ├── records.dot │ ├── rootlabel.dot │ ├── rowcolsep.dot │ ├── rowe.dot │ ├── russian.dot │ ├── shapes.dot │ ├── shells.dot │ ├── size.dot │ ├── states.dot │ ├── structs.dot │ ├── train11.dot │ ├── trapeziumlr.dot │ ├── tree.dot │ ├── triedds.dot │ ├── try.dot │ ├── unix.dot │ ├── unix2.dot │ ├── unix2k.dot │ ├── url.dot │ ├── user_shapes.dot │ ├── viewfile.dot │ ├── viewport.dot │ ├── weight.dot │ ├── world.dot │ └── xx.dot ├── my_tests │ ├── escaped_newlines.dot │ ├── html_labels.dot │ ├── numeric_ids_unicode.dot │ └── parsing_test.dot ├── test_graph_from_edges.py ├── test_pydot.py └── test_rendering_dot_files.py └── tox.ini /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .nox/ 42 | .coverage 43 | .coverage.* 44 | .cache 45 | nosetests.xml 46 | coverage.xml 47 | *.cover 48 | .hypothesis/ 49 | .pytest_cache/ 50 | 51 | # Translations 52 | *.mo 53 | *.pot 54 | 55 | # Django stuff: 56 | *.log 57 | local_settings.py 58 | db.sqlite3 59 | 60 | # Flask stuff: 61 | instance/ 62 | .webassets-cache 63 | 64 | # Scrapy stuff: 65 | .scrapy 66 | 67 | # Sphinx documentation 68 | docs/_build/ 69 | 70 | # PyBuilder 71 | target/ 72 | 73 | # Jupyter Notebook 74 | .ipynb_checkpoints 75 | 76 | # IPython 77 | profile_default/ 78 | ipython_config.py 79 | 80 | # pyenv 81 | .python-version 82 | 83 | # celery beat schedule file 84 | celerybeat-schedule 85 | 86 | # SageMath parsed files 87 | *.sage.py 88 | 89 | # Environments 90 | .env 91 | .venv 92 | env/ 93 | venv/ 94 | ENV/ 95 | env.bak/ 96 | venv.bak/ 97 | 98 | # Spyder project settings 99 | .spyderproject 100 | .spyproject 101 | 102 | # Rope project settings 103 | .ropeproject 104 | 105 | # mkdocs documentation 106 | /site 107 | 108 | # mypy 109 | .mypy_cache/ 110 | .dmypy.json 111 | dmypy.json 112 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | if: tag IS present OR type = pull_request OR (branch = master AND type = push) # we only CI the master, tags and PRs 2 | language: python 3 | 4 | sudo: false 5 | 6 | addons: 7 | apt: 8 | packages: 9 | - graphviz 10 | 11 | install: 12 | pip install tox 13 | 14 | script: tox 15 | 16 | matrix: 17 | include: 18 | - env: TOXENV=py27 19 | python: 2.7 20 | - env: TOXENV=py34 21 | python: 3.4 22 | - env: TOXENV=py35 23 | python: 3.5 24 | - env: TOXENV=py36 25 | python: 3.6 26 | - env: TOXENV=py37 27 | python: 3.7 28 | dist: xenial 29 | sudo: true 30 | - env: TOXENV=py38 31 | python: 3.8-dev 32 | dist: xenial 33 | sudo: true 34 | - env: TOXENV=lint 35 | python: 3.6 36 | 37 | deploy: 38 | provider: pypi 39 | user: prmtl 40 | password: 41 | secure: P1Nv54dQUOY+sXAWKkyfkHdhDvziCS3U/6As/NgfKEHCfY6fnZZJzylDuzbJ13foGaQniUa2+InuxoUFsH21YRBaif3PXUlTAJEiseWC3cr0E7DiicnDQB0fWqGS0MT2lQa29H34WVPrxnckt9Hy1whAJYAbBIixbHQrDB22G+U= 42 | distributions: "sdist bdist_wheel" # Your distributions here 43 | on: 44 | python: 3.7 45 | tags: true 46 | -------------------------------------------------------------------------------- /ChangeLog: -------------------------------------------------------------------------------- 1 | 2.0.1 (unreleased) 2 | ------------------ 3 | 4 | - Nothing changed yet. 5 | 6 | 7 | 2.0.0 (2018-10-16) 8 | ------------------ 9 | 10 | * Linting issues resolved 11 | * Testing using py.test based tests 12 | * Reverted changes that introduced problems with parsing DOT format 13 | * Testing on Windows 14 | * Tested and refactored graph_from_edges 15 | * Tested and refactored find_executables 16 | * pydot_ng is now ready to have active development 17 | * Deployment through Travis 18 | 19 | 20 | 1.0.0 (2015-02-26) 21 | ------------------ 22 | 23 | * Added tox to run tests 24 | * Added Travis CI integration 25 | * Reset version numbering 26 | 27 | 28 | Original pydot changelog 29 | ------------------------ 30 | 2004-04-28 21:50 carrer 31 | 32 | * pydot.py: Some of the changes already made should allow pydot to 33 | run on OSX. Bumped version to 0.9.2 34 | 35 | 2004-04-24 17:52 carrer 36 | 37 | * setup.py: Added more metainformation to the distribution. 38 | 39 | 2004-04-24 17:51 carrer 40 | 41 | * pydot.py: Added support for circo and fdp. Fixed piping mechanism 42 | to not to capture stderr. 43 | 44 | 2004-04-24 13:26 carrer 45 | 46 | * ChangeLog, LICENSE, MANIFEST, README, setup.py: Adding 47 | suplementary files to the distribution to the CVS. 48 | 49 | 2004-04-24 12:57 carrer 50 | 51 | * pydot.py: Bumped version to 0.9.1 52 | 53 | 2004-04-24 01:36 carrer 54 | 55 | * pydot.py: Implemented tweaks suggested by John B. Cole to handle 56 | non-str nodes, converting them to strings. 57 | 58 | 2004-04-24 01:10 carrer 59 | 60 | * pydot.py: Applied patch for Windows support by Kent Johnson. 61 | 62 | 2004-04-24 01:05 carrer 63 | 64 | * pydot.py: Fixed to properly handle unicode strings in attributes. 65 | 66 | 2004-04-20 00:06 carrer 67 | 68 | * pydot.py: 69 | Fixed silly error in graph_from_edges. When pasting the function 70 | into the code, the references to the pydot module were not 71 | removed, which are no longer needed since we now are _in_ the 72 | module. 73 | 74 | 2004-04-19 23:33 carrer 75 | 76 | * pydot.py: 77 | Added support to write files with the desired output format with 78 | write_[format] 79 | 80 | 2004-04-19 22:53 carrer 81 | 82 | * pydot.py: 83 | Done some clean up, no major changes. 84 | 85 | 2004-04-08 00:22 carrer 86 | 87 | * pydot.py: 88 | Initial revision. 89 | 90 | 2004-04-08 00:22 carrer 91 | 92 | * pydot.py: Initial revision 93 | 94 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2004 Ero Carrera 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 4 | associated documentation files (the "Software"), to deal in the Software without restriction, 5 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 6 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 7 | subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial 10 | portions of the Software. 11 | 12 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 13 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 14 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 16 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include *.txt 2 | include *.ini 3 | include *.rst 4 | include LICENSE 5 | include ChangeLog 6 | recursive-include test *.dot 7 | recursive-include test *.png 8 | recursive-include test *.dot_crashes_dot_abort_trap 9 | recursive-include test *.dot_crashes_dot_bus_error 10 | recursive-include test *.jpe_text 11 | recursive-include test *.ps 12 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | pydot-ng - Python interface to Graphviz's Dot language 2 | ------------------------------------------------------ 3 | 4 | Archived. Please use https://github.com/pydot/pydot 5 | --------------------------------------------------- 6 | 7 | Ero Carrera (c) 2004-2007 8 | 9 | ero@dkbza.org 10 | 11 | This code is distributed under the MIT license. 12 | 13 | .. image:: https://travis-ci.org/pydot/pydot-ng.svg?branch=master 14 | :target: https://travis-ci.org/pydot/pydot-ng 15 | 16 | 17 | Requirements: 18 | ============= 19 | 20 | pyparsing: pydot requires the pyparsing module in order to be 21 | able to load DOT files. 22 | 23 | GraphViz: is needed in order to render the graphs into any of 24 | the plethora of output formats supported. 25 | 26 | Installation: 27 | ============= 28 | 29 | Should suffice with doing: 30 | 31 | python setup.py install 32 | 33 | Needless to say, no installation is needed just to use the module. A mere: 34 | 35 | import pydot_ng 36 | 37 | should do it, provided that the directory containing the modules is on Python 38 | module search path. 39 | 40 | This library is API compatible with original pydot so you can use it like this: 41 | 42 | import pydot_ng as pydot 43 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | # Appveyor, continuous integration for Windows 2 | # Most of the config comes from: 3 | # * https://gitlab.com/betse/betse/raw/master/appveyor.yml 4 | 5 | version: '{branch}-{build}' 6 | 7 | shallow_clone: true 8 | 9 | cache: 10 | - '%LOCALAPPDATA%\pip\Cache' 11 | 12 | branches: 13 | only: 14 | - master 15 | 16 | # Do not build feature branch with open Pull Requests 17 | skip_branch_with_pr: true 18 | 19 | environment: 20 | 21 | matrix: 22 | - JOB: "2.7 32-bit" 23 | TOXENV: "py27" 24 | PYTHON: "C:\\Python27.11" 25 | PYTHON_ARCH: "32" 26 | MINICONDA_DIRNAME: "C:\\Miniconda" 27 | 28 | - JOB: "3.6 64-bit" 29 | TOXENV: "py36" 30 | PYTHON: "C:\\Python36-x64" 31 | PYTHON_ARCH: "64" 32 | MINICONDA_DIRNAME: "C:\\Miniconda36-x64" 33 | 34 | init: 35 | - "ECHO %TOXENV% %PYTHON_VERSION% %MINICONDA_DIRNAME%" 36 | 37 | install: 38 | # Make sure that python and python-related scripts are run from miniconda-specific 39 | # python installation 40 | - cmd: set "PATH=%MINICONDA_DIRNAME%;%MINICONDA_DIRNAME%\\Scripts;%PATH%" 41 | - cmd: conda config --set always_yes true 42 | - cmd: conda info --all 43 | 44 | # Create and configure an empty Anaconda environment specific to this Python version. 45 | - cmd: conda create --quiet --name conda-env-%PYTHON_VERSION% python=%PYTHON_VERSION% 46 | - cmd: activate conda-env-%PYTHON_VERSION% 47 | - cmd: conda config --add channels anaconda 48 | - cmd: conda install --quiet --file requirements-conda.txt 49 | - cmd: python setup.py develop 50 | 51 | 52 | # Tell AppVeyor this is not .NET project 53 | build: off 54 | 55 | test_script: 56 | - py.test -vvv test 57 | -------------------------------------------------------------------------------- /docs/release-checklist.md: -------------------------------------------------------------------------------- 1 | # PyPI release checklist 2 | 3 | - [ ] Install `zest.releaser` with recommended addons: `pip install zest.releaser[recommended]`. 4 | - [ ] Check if long description of packege is looking OK (`longtest` command). 5 | - [ ] Inspect changes from last release (`lasttaglog` command from `zest.releaser`) and update `ChaneLog` (`addchangelogentry` command is usefull) if needed. 6 | - [ ] Run `fullrelease` command (it is commig from `zest.releaser`). Steps bellow should be handled by `zest.releaser`. 7 | - [ ] Run `pyaroma` to check for following packaging best practicies. 8 | - [ ] Run `check-manifest` to check if `MANIFEST.in` is correct. 9 | - [ ] Enter version using semantic versioning. 10 | - [ ] Make sure that version is bumped in correct place (`__version___`). 11 | - [ ] Commit new version. 12 | - [ ] Add a tag. 13 | - [ ] Checkout tag and investigate if everything is OK. 14 | - [ ] Do not upload package. 15 | - [ ] Enter new development version using semantic versioning. 16 | - [ ] Do not push to main repo. 17 | - [ ] Look at the log and diff again to see if everything is looking as you intended. 18 | - [ ] Push to main repo (`git push`). 19 | - [ ] Wait for tests to pass on CI. 20 | - [ ] Push tags (`git push --tags`). 21 | - [ ] Check the PyPI listing page to make sure that it is looking OK (files, description, etc.). 22 | - [ ] Check if new version can be installed `pip install pydot_ng` 23 | -------------------------------------------------------------------------------- /requirements-conda.txt: -------------------------------------------------------------------------------- 1 | graphviz >=2.38.0 2 | pyparsing >=2.0.1 3 | pytest ==3.8.2 4 | mock ==2.0.0 5 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [bdist_wheel] 2 | universal=1 3 | 4 | [zest.releaser] 5 | python-file-with-version = pydot_ng/__init__.py 6 | release=no 7 | push-changes=no 8 | create-wheel=yes 9 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import ast 3 | import os 4 | import re 5 | from codecs import open 6 | 7 | from setuptools import setup 8 | 9 | 10 | # NOTE(prmtl): found reason on https://superuser.com/q/259703 11 | os.environ['COPY_EXTENDED_ATTRIBUTES_DISABLE'] = 'true' 12 | os.environ['COPYFILE_DISABLE'] = 'true' 13 | 14 | 15 | CURRENT_DIR = os.path.dirname(__file__) 16 | 17 | 18 | def get_version(): 19 | init_file = os.path.join(CURRENT_DIR, 'pydot_ng', '__init__.py') 20 | _version_re = re.compile(r'__version__\s+=\s+(?P.*)') 21 | with open(init_file, 'r', encoding='utf8') as f: 22 | match = _version_re.search(f.read()) 23 | version = match.group('version') if match is not None else '"unknown"' 24 | return str(ast.literal_eval(version)) 25 | 26 | 27 | with open('README.rst', 'r', 'utf-8') as f: 28 | readme = f.read() 29 | 30 | 31 | setup( 32 | name='pydot_ng', 33 | version=get_version(), 34 | description='Python interface to Graphviz\'s Dot', 35 | author='Ero Carrera', 36 | author_email='ero@dkbza.org', 37 | maintainer='Sebastian Kalinowski', 38 | maintainer_email='sebastian@kalinowski.eu', 39 | url="https://github.com/pydot/pydot-ng", 40 | license='MIT', 41 | keywords='graphviz dot graphs visualization', 42 | platforms=['any'], 43 | zip_safe=False, 44 | classifiers=[ 45 | 'Development Status :: 5 - Production/Stable', 46 | 'Intended Audience :: Science/Research', 47 | 'License :: OSI Approved :: MIT License', 48 | 'Natural Language :: English', 49 | 'Operating System :: OS Independent', 50 | 'Programming Language :: Python :: 2.7', 51 | 'Programming Language :: Python :: 3.4', 52 | 'Programming Language :: Python :: 3.5', 53 | 'Programming Language :: Python :: 3.6', 54 | 'Programming Language :: Python :: 3.7', 55 | 'Programming Language :: Python', 56 | 'Topic :: Scientific/Engineering :: Visualization', 57 | 'Topic :: Software Development :: Libraries :: Python Modules'], 58 | long_description=readme, 59 | packages=['pydot_ng'], 60 | package_dir={'pydot_ng': 'pydot_ng'}, 61 | install_requires=['pyparsing>=2.0.1'], 62 | ) 63 | -------------------------------------------------------------------------------- /test-requirements.txt: -------------------------------------------------------------------------------- 1 | pytest==3.8.2 2 | mock==2.0.0 3 | -------------------------------------------------------------------------------- /test/from-past-to-future/AI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/AI.png -------------------------------------------------------------------------------- /test/from-past-to-future/Agents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Agents.png -------------------------------------------------------------------------------- /test/from-past-to-future/Automata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Automata.png -------------------------------------------------------------------------------- /test/from-past-to-future/Berners_Lee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Berners_Lee.png -------------------------------------------------------------------------------- /test/from-past-to-future/Biology.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Biology.png -------------------------------------------------------------------------------- /test/from-past-to-future/Chaos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Chaos.png -------------------------------------------------------------------------------- /test/from-past-to-future/Computers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Computers.png -------------------------------------------------------------------------------- /test/from-past-to-future/Cryptography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Cryptography.png -------------------------------------------------------------------------------- /test/from-past-to-future/Dertouzos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Dertouzos.png -------------------------------------------------------------------------------- /test/from-past-to-future/Ontology.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Ontology.png -------------------------------------------------------------------------------- /test/from-past-to-future/Rejewski.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Rejewski.png -------------------------------------------------------------------------------- /test/from-past-to-future/Search_Engines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Search_Engines.png -------------------------------------------------------------------------------- /test/from-past-to-future/Semantic_Web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Semantic_Web.png -------------------------------------------------------------------------------- /test/from-past-to-future/Small_World.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Small_World.png -------------------------------------------------------------------------------- /test/from-past-to-future/Social_Networks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Social_Networks.png -------------------------------------------------------------------------------- /test/from-past-to-future/Turing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/Turing.png -------------------------------------------------------------------------------- /test/from-past-to-future/XML.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/from-past-to-future/XML.png -------------------------------------------------------------------------------- /test/from-past-to-future/from-past-to-future.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | compound=true; 3 | ranksep=1.25; 4 | label="From Past to Future..."; 5 | 6 | node [shape=plaintext, fontsize=16]; 7 | 8 | bgcolor=white; 9 | edge [arrowsize=1, color=black]; 10 | 11 | /* Nodes */ 12 | subgraph cluster_Computers {label="Computers"; labelloc="b"; Computers_icon}; 13 | Computers_icon [label="", shape=box, style=invis, shapefile="Computers.png"]; 14 | 15 | subgraph cluster_Semantic_Web {label="Semantic Web"; labelloc="b"; Semantic_Web_icon}; 16 | Semantic_Web_icon [label="", shape=box, style=invis, shapefile="Semantic_Web.png"]; 17 | 18 | subgraph cluster_Cryptography {label="Cryptography"; labelloc="b"; Cryptography_icon}; 19 | Cryptography_icon [label="", shape=box, style=invis, shapefile="Cryptography.png"]; 20 | 21 | subgraph cluster_Automata {label="Automata"; labelloc="b"; Automata_icon}; 22 | Automata_icon [label="", shape=box, style=invis, shapefile="Automata.png"]; 23 | 24 | subgraph cluster_AI {label="A.I."; labelloc="b"; AI_icon}; 25 | AI_icon [label="", shape=box, style=invis, shapefile="AI.png"]; 26 | 27 | subgraph cluster_Chaos {label="Chaos / Fractals"; labelloc="b"; Chaos_icon}; 28 | Chaos_icon [label="", shape=box, style=invis, shapefile="Chaos.png"]; 29 | 30 | subgraph cluster_XML {label="XML / RDF / URI"; labelloc="b"; XML_icon}; 31 | XML_icon [label="", shape=box, style=invis, shapefile="XML.png"]; 32 | 33 | subgraph cluster_Ontology {label="Ontology / Clustering"; labelloc="b"; Ontology_icon}; 34 | Ontology_icon [label="", shape=box, style=invis, shapefile="Ontology.png"]; 35 | 36 | subgraph cluster_Biology {label="Biology / Neurons"; labelloc="b"; Biology_icon}; 37 | Biology_icon [label="", shape=box, style=invis, shapefile="Biology.png"]; 38 | 39 | subgraph cluster_Agents {label="Agents / Security"; labelloc="b"; Agents_icon}; 40 | Agents_icon [label="", shape=box, style=invis, shapefile="Agents.png"]; 41 | 42 | subgraph cluster_Small_World {label="The Small World Project"; labelloc="b"; Small_World_icon}; 43 | Small_World_icon [label="", shape=box, style=invis, shapefile="Small_World.png"]; 44 | 45 | subgraph cluster_Social_Networks {label="Social Networks"; labelloc="b"; Social_Networks_icon}; 46 | Social_Networks_icon [label="", shape=box, style=invis, shapefile="Social_Networks.png"]; 47 | 48 | subgraph cluster_Search_Engines {label="Search Engines"; labelloc="b"; Search_Engines_icon}; 49 | Search_Engines_icon [label="", shape=box, style=invis, shapefile="Search_Engines.png"]; 50 | 51 | subgraph cluster_Turing {label="A. Turing"; labelloc="b"; Turing_icon}; 52 | Turing_icon [label="", shape=box, style=invis, shapefile="Turing.png"]; 53 | 54 | subgraph cluster_Rejewski {label="M. Rejewski"; labelloc="b"; Rejewski_icon}; 55 | Rejewski_icon [label="", shape=box, style=invis, shapefile="Rejewski.png"]; 56 | 57 | subgraph cluster_Dertouzos {label="M. Dertouzos"; labelloc="b"; Dertouzos_icon}; 58 | Dertouzos_icon [label="", shape=box, style=invis, shapefile="Dertouzos.png"]; 59 | 60 | subgraph cluster_Berners_Lee {label="T. Berners-Lee"; labelloc="b"; Berners_Lee_icon}; 61 | Berners_Lee_icon [label="", shape=box, style=invis, shapefile="Berners_Lee.png"]; 62 | 63 | /* Relationships */ 64 | Computers_icon -> Semantic_Web_icon; 65 | Semantic_Web_icon -> Computers_icon; 66 | Cryptography_icon -> Semantic_Web_icon; 67 | Cryptography_icon -> Computers_icon; 68 | Automata_icon -> Computers_icon; 69 | AI_icon -> Automata_icon; 70 | Automata_icon -> AI_icon; 71 | Chaos_icon -> Computers_icon; 72 | Chaos_icon -> AI_icon; 73 | AI_icon -> Chaos_icon; 74 | Computers_icon -> Chaos_icon; 75 | XML_icon -> Semantic_Web_icon; 76 | XML_icon -> Computers_icon; 77 | Computers_icon -> XML_icon; 78 | Ontology_icon -> Semantic_Web_icon; 79 | Biology_icon -> AI_icon; 80 | Biology_icon -> Chaos_icon; 81 | Chaos_icon -> Biology_icon; 82 | Chaos_icon -> Semantic_Web_icon; 83 | Agents_icon -> Semantic_Web_icon; 84 | Semantic_Web_icon -> Agents_icon; 85 | Agents_icon -> AI_icon; 86 | AI_icon -> Agents_icon; 87 | Small_World_icon -> Chaos_icon; 88 | Small_World_icon -> Agents_icon; 89 | Small_World_icon -> Biology_icon; 90 | Biology_icon -> Small_World_icon; 91 | Social_Networks_icon -> Small_World_icon; 92 | Social_Networks_icon -> Biology_icon; 93 | Search_Engines_icon -> Semantic_Web_icon; 94 | Computers_icon -> Search_Engines_icon; 95 | Turing_icon -> Cryptography_icon; 96 | Turing_icon -> Computers_icon; 97 | Turing_icon -> Automata_icon; 98 | Rejewski_icon -> Turing_icon; 99 | Rejewski_icon -> Cryptography_icon; 100 | Dertouzos_icon -> Computers_icon; 101 | Dertouzos_icon -> Berners_Lee_icon; 102 | Berners_Lee_icon -> Semantic_Web_icon; 103 | 104 | 105 | { rank=same; Rejewski_icon; Turing_icon; Dertouzos_icon; Berners_Lee_icon }; 106 | { rank=same; Biology_icon; AI_icon; Social_Networks_icon }; 107 | 108 | } 109 | -------------------------------------------------------------------------------- /test/graphs/ER.dot: -------------------------------------------------------------------------------- 1 | graph ER { 2 | node [shape=box]; course; institute; student; 3 | node [shape=ellipse]; {node [label="name"] name0; name1; name2;} 4 | code; grade; number; 5 | node [shape=diamond,style=filled,color=lightgrey]; "C-I"; "S-C"; "S-I"; 6 | 7 | name0 -- course; 8 | code -- course; 9 | course -- "C-I" [label="n",len=1.00]; 10 | "C-I" -- institute [label="1",len=1.00]; 11 | institute -- name1; 12 | institute -- "S-I" [label="1",len=1.00]; 13 | "S-I" -- student [label="n",len=1.00]; 14 | student -- grade; 15 | student -- name2; 16 | student -- number; 17 | student -- "S-C" [label="m",len=1.00]; 18 | "S-C" -- course [label="n",len=1.00]; 19 | 20 | label = "\n\nEntity Relation Diagram\ndrawn by NEATO"; 21 | fontsize=20; 22 | } 23 | -------------------------------------------------------------------------------- /test/graphs/Heawood.dot: -------------------------------------------------------------------------------- 1 | /* 2 | * The transitive 6-net, also known as Heawood's graph, 3 | * can be used to test the "stability points" of the layout 4 | * algorithm. 5 | 6 | * The "ideal" layout occurs when len="2.5". The layout 7 | * loses the regularity when smaller values are used. 8 | */ 9 | graph "Heawood" { 10 | node [ 11 | fontname = "Arial" 12 | label = "\N" 13 | shape = "circle" 14 | width = "0.50000" 15 | height = "0.500000" 16 | color = "black" 17 | ] 18 | edge [ 19 | color = "black" 20 | ] 21 | /* The outer wheel */ 22 | "0" -- "1" -- "2" -- "3" -- "4" -- "5" -- "6" -- "7" -- "8" -- "9" -- "10" -- "11" -- "12" -- "13" -- "0"; 23 | /* The internal edges. The len = makes them internal */ 24 | "0" -- "5" [len = 2.5]; 25 | "2" -- "7" [len = 2.5]; 26 | "4" -- "9" [len = 2.5]; 27 | "6" -- "11" [len = 2.5]; 28 | "8" -- "13" [len = 2.5]; 29 | "10" -- "1" [len = 2.5]; 30 | "12" -- "3" [len = 2.5]; 31 | } 32 | -------------------------------------------------------------------------------- /test/graphs/KW91.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | style=bold; 3 | subgraph cluster_outer { 4 | Act_1 -> Act_21; 5 | Act_1 -> Act_23; 6 | Act_25 -> Act_3; 7 | subgraph cluster_inner { 8 | label = " Act_2"; 9 | {Act_21 -> Act_22 [minlen=2]; rank=same;} 10 | Act_22 -> Act_23; 11 | Act_22 -> Act_24; 12 | {Act_23 -> Act_24 [minlen=2]; rank=same;} 13 | Act_23 -> Act_25; 14 | Act_24 -> Act_25; 15 | } 16 | } 17 | Ext_1 -> Act_1; 18 | Act_3 -> Ext_2; 19 | Ext_3 -> Act_24; 20 | } 21 | -------------------------------------------------------------------------------- /test/graphs/Latin1.dot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/graphs/Latin1.dot -------------------------------------------------------------------------------- /test/graphs/NaN.dot: -------------------------------------------------------------------------------- 1 | digraph xyz { 2 | orientation=landscape; 3 | ratio=compress; 4 | size="16,10"; 5 | AbstractMemory -> Memory; 6 | AliasedMemory -> AliasedMemory; 7 | AliasedMemory -> Memory; 8 | Architecture -> ROOT; 9 | Assembly -> ROOT; 10 | AtomProperties -> NRAtom; 11 | AtomWr -> Wr; 12 | Break -> Break; 13 | Break -> Target; 14 | Breakpoint -> Breakpoint; 15 | Breakpoint -> Event; 16 | Breakpoint -> ROOT; 17 | CDB -> Target; 18 | CDB -> Thread; 19 | CommonFrame -> Target; 20 | ControlOps -> InterpF; 21 | Displayed -> Displayed; 22 | Displayed -> InterpTypes; 23 | ETimer -> RTHeapRep; 24 | Event -> Event; 25 | Event -> ROOT; 26 | Event -> Target; 27 | EventHandler -> ROOT; 28 | EventHandler -> StandardEvents; 29 | Expression -> ROOT; 30 | ExpressionServer -> Expression; 31 | FollowBreakpoint -> Breakpoint; 32 | Formatter -> ROOT; 33 | Formatter -> Thread; 34 | Frame -> Frame; 35 | Frame -> Memory; 36 | Frame -> Target; 37 | FrameClass -> Frame; 38 | IntIntTbl -> IntIntTbl; 39 | IntIntTbl -> ROOT; 40 | Interp -> InterpF; 41 | Interp -> ROOT; 42 | InterpF -> Interp; 43 | InterpF -> InterpF; 44 | InterpF -> ROOT; 45 | InterpScan -> TokenStream; 46 | InterpTypes -> InterpTypes; 47 | InterpTypes -> ROOT; 48 | List -> Thread; 49 | LoadState -> LoadState; 50 | LoadState -> LoadStateRep; 51 | LoadState -> ROOT; 52 | LoadStateRep -> LoadState; 53 | LocationRep -> Memory; 54 | MC68Frame -> CommonFrame; 55 | MC68GCommonFrame -> EventHandler; 56 | MUTEX -> ROOT; 57 | Memory -> Displayed; 58 | Memory -> InterpTypes; 59 | MipsFrame -> CommonFrame; 60 | MipsFrame -> InterpTypes; 61 | MipsGCommonFrame -> EventHandler; 62 | NRAtom -> AtomProperties; 63 | NRAtom -> ROOT; 64 | NopBreakpoint -> Breakpoint; 65 | PSFormatter -> InterpTypes; 66 | PSInterp -> InterpTypes; 67 | PSLoadState -> InterpTypes; 68 | PSMemory -> InterpTypes; 69 | ProtectedWire -> ProtectedWire; 70 | ProtectedWire -> Wire; 71 | RTHeap -> RTHeapRep; 72 | RTHeapRep -> ROOT; 73 | Rd -> RdClass; 74 | RdClass -> MUTEX; 75 | RegisterMemory -> Memory; 76 | Scope -> ROOT; 77 | Scope -> Scope; 78 | Scope -> Target; 79 | SourceLoc -> Target; 80 | SourceMap -> ROOT; 81 | SparcFrame -> CommonFrame; 82 | SparcGCommonFrame -> EventHandler; 83 | StandardEvents -> StandardEvents; 84 | StandardEvents -> Target; 85 | StreamWire -> Wire; 86 | Symbol -> Displayed; 87 | Symbol -> Symbol; 88 | TThread -> ROOT; 89 | TThread -> Target; 90 | Target -> Displayed; 91 | Target -> Event; 92 | Target -> FrameClass; 93 | Target -> ROOT; 94 | Target -> TThread; 95 | Target -> Target; 96 | Target -> TargetF; 97 | Target -> Thread; 98 | TargetF -> Target; 99 | TargetState -> Assembly; 100 | TextRd -> Rd; 101 | TextWr -> Wr; 102 | Thread -> ROOT; 103 | Thread -> Thread; 104 | TokenStream -> ROOT; 105 | TokenStream -> TokenStream; 106 | Trap -> ROOT; 107 | TrapMemory -> Memory; 108 | UFileRd -> Rd; 109 | UFileRd -> UFileRd; 110 | UFileWr -> UFileWr; 111 | UFileWr -> Wr; 112 | UnixHandler -> Event; 113 | UnixHandler -> UnixHandler; 114 | UserBreak -> Break; 115 | UserBreak -> Breakpoint; 116 | UserBreak -> Event; 117 | UserBreak -> Trap; 118 | UserBreak -> UserBreak; 119 | VaxFrame -> CommonFrame; 120 | VaxGCommonFrame -> EventHandler; 121 | Wire -> ROOT; 122 | Wire -> TrapMemory; 123 | Wire -> Wire; 124 | Wr -> WrClass; 125 | WrClass -> MUTEX; 126 | } 127 | -------------------------------------------------------------------------------- /test/graphs/Petersen.dot: -------------------------------------------------------------------------------- 1 | /* 2 | * The transitive 5-net, also known as Petersen's graph, 3 | * can be used to test the "stability points" of the layout 4 | * algorithm. 5 | * 6 | * The "ideal" layout is achieved for certain random seed 7 | * values when len=1.5. For len=2.5 or above, the layout 8 | * is stable. Sometimes, the graph is rendered "inside-out". 9 | */ 10 | graph "Petersen" { 11 | node [ 12 | fontname = "Arial" 13 | label = "\N" 14 | shape = "circle" 15 | width = "0.400000" 16 | height = "0.400000" 17 | color = "black" 18 | ] 19 | edge [ 20 | color = "black" 21 | ] 22 | /* Outer wheel. The len= is what makes it outer */ 23 | "0" -- "1" -- "2" -- "3" -- "4" -- "0" [ 24 | color = "blue" 25 | len = 2.6 26 | ] 27 | "0" -- "5" [ 28 | color = "red" 29 | weight = "5" 30 | ] 31 | "1" -- "6" [ 32 | color = "red" 33 | weight = "5" 34 | ] 35 | "2" -- "7" [ 36 | color = "red" 37 | weight = "5" 38 | ] 39 | "3" -- "8" [ 40 | color = "red" 41 | weight = "5" 42 | ] 43 | "4" -- "9" [ 44 | color = "red" 45 | weight = "5" 46 | ] 47 | "5" -- "7" -- "9" -- "6" -- "8" -- "5"; 48 | } 49 | -------------------------------------------------------------------------------- /test/graphs/a.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | a -> b 3 | label="this is a graph" 4 | } 5 | -------------------------------------------------------------------------------- /test/graphs/abstract.dot: -------------------------------------------------------------------------------- 1 | digraph abstract { 2 | size="6,6"; 3 | S24 -> 27; 4 | S24 -> 25; 5 | S1 -> 10; 6 | S1 -> 2; 7 | S35 -> 36; 8 | S35 -> 43; 9 | S30 -> 31; 10 | S30 -> 33; 11 | 9 -> 42; 12 | 9 -> T1; 13 | 25 -> T1; 14 | 25 -> 26; 15 | 27 -> T24; 16 | 2 -> 3; 17 | 2 -> 16; 18 | 2 -> 17; 19 | 2 -> T1; 20 | 2 -> 18; 21 | 10 -> 11; 22 | 10 -> 14; 23 | 10 -> T1; 24 | 10 -> 13; 25 | 10 -> 12; 26 | 31 -> T1; 27 | 31 -> 32; 28 | 33 -> T30; 29 | 33 -> 34; 30 | 42 -> 4; 31 | 26 -> 4; 32 | 3 -> 4; 33 | 16 -> 15; 34 | 17 -> 19; 35 | 18 -> 29; 36 | 11 -> 4; 37 | 14 -> 15; 38 | 37 -> 39; 39 | 37 -> 41; 40 | 37 -> 38; 41 | 37 -> 40; 42 | 13 -> 19; 43 | 12 -> 29; 44 | 43 -> 38; 45 | 43 -> 40; 46 | 36 -> 19; 47 | 32 -> 23; 48 | 34 -> 29; 49 | 39 -> 15; 50 | 41 -> 29; 51 | 38 -> 4; 52 | 40 -> 19; 53 | 4 -> 5; 54 | 19 -> 21; 55 | 19 -> 20; 56 | 19 -> 28; 57 | 5 -> 6; 58 | 5 -> T35; 59 | 5 -> 23; 60 | 21 -> 22; 61 | 20 -> 15; 62 | 28 -> 29; 63 | 6 -> 7; 64 | 15 -> T1; 65 | 22 -> 23; 66 | 22 -> T35; 67 | 29 -> T30; 68 | 7 -> T8; 69 | 23 -> T24; 70 | 23 -> T1; 71 | } 72 | -------------------------------------------------------------------------------- /test/graphs/alf.dot: -------------------------------------------------------------------------------- 1 | digraph Alf { 2 | size = "6,9"; 3 | node [ shape = record ]; 4 | Decl [ label = "\n\nDecl|{name|access|decl_flags|extern_c_linkage}"]; 5 | Nontype_decl [ label = "Nontype_decl|{type}"]; 6 | Defined_decl [ label = "Defined_decl|{linkage}"]; 7 | Data_decl [ label = "Data_decl|{storage_class}"]; 8 | Function_decl [ label = "Function_decl|{formals|defaults}"]; 9 | Data [ label = "Data|{initializer}"]; 10 | Function [ label = "Function|{body}"]; 11 | Constructor [ label = "Constructor|{member_initializers}"]; 12 | Aggregate -> Type_decl ; 13 | Class -> Aggregate; 14 | Union -> Aggregate; 15 | Data -> Data_decl; 16 | Data -> Defn; 17 | Data_decl -> Defined_decl; 18 | Data_member -> Nontype_decl ; 19 | Defined_decl -> Nontype_decl; 20 | Defn -> Defined_decl; 21 | Enum -> Type_decl ; 22 | Enumerator -> Nontype_decl ; 23 | Function -> Defn; 24 | Function -> Function_decl; 25 | Constructor -> Function; 26 | Destructor -> Function; 27 | Function_decl -> Defined_decl; 28 | Nontype_decl -> Decl ; 29 | Template_type_arg -> Type_decl ; 30 | Type_decl -> Decl ; 31 | Typedef -> Type_decl ; 32 | } 33 | -------------------------------------------------------------------------------- /test/graphs/arrows.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | // leave some space for the head/taillabels 3 | graph [ranksep=1.5 splines=true overlap=false] 4 | 5 | // to avoid confusion, remember this: 6 | // it's spelt tail/head, but it's read start/end 7 | 8 | // emphasize theatrically 9 | // show only explicitly given head/tails 10 | // put head/tail labels farther from the node 11 | // edge [arrowsize=2 dir=none labeldistance=3] 12 | edge [dir=none labeldistance=3] 13 | 14 | // not interested in node labels 15 | node [shape=circle width=0.5 label=""] 16 | 17 | { 18 | edge [samehead=ahead samearrowhead=1] 19 | a->Z [arrowtail=none taillabel=none] 20 | b->Z [arrowtail=normal taillabel=normal] 21 | c->Z [arrowtail=inv taillabel=inv] 22 | d->Z [arrowtail=dot taillabel=dot] 23 | e->Z [arrowtail=odot taillabel=odot] 24 | f->Z [arrowtail=invdot taillabel=invdot] 25 | g->Z [arrowtail=invodot taillabel=invodot] 26 | h->Z [arrowtail=open taillabel=open] 27 | i->Z [arrowtail=halfopen taillabel=halfopen arrowhead=inv headlabel=samehead] 28 | j->Z [arrowtail=empty taillabel=empty] 29 | k->Z [arrowtail=invempty taillabel=invempty] 30 | l->Z [arrowtail=diamond taillabel=diamond] 31 | m->Z [arrowtail=odiamond taillabel=odiamond] 32 | n->Z [arrowtail=box taillabel=box] 33 | o->Z [arrowtail=obox taillabel=obox] 34 | p->Z [arrowtail=tee taillabel=tee] 35 | q->Z [arrowtail=crow taillabel=crow] 36 | } 37 | { 38 | edge [sametail=atail samearrowtail=1] 39 | Z->A [arrowhead=none headlabel=none] 40 | Z->B [arrowhead=normal headlabel=normal] 41 | Z->C [arrowhead=inv headlabel=inv] 42 | Z->D [arrowhead=dot headlabel=dot] 43 | Z->E [arrowhead=odot headlabel=odot] 44 | Z->F [arrowhead=invdot headlabel=invdot] 45 | Z->G [arrowhead=invodot headlabel=invodot] 46 | Z->H [arrowhead=open headlabel=open] 47 | Z->I [arrowhead=halfopen headlabel=halfopen arrowtail=inv taillabel=sametail] 48 | Z->J [arrowhead=empty headlabel=empty] 49 | Z->K [arrowhead=invempty headlabel=invempty] 50 | Z->L [arrowhead=diamond headlabel=diamond] 51 | Z->M [arrowhead=odiamond headlabel=odiamond] 52 | Z->N [arrowhead=box headlabel=box] 53 | Z->O [arrowhead=obox headlabel=obox] 54 | Z->P [arrowhead=tee headlabel=tee] 55 | Z->Q [arrowhead=crow headlabel=crow] 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /test/graphs/arrowsize.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | // leave some space for the head/taillabels 3 | graph [ranksep=1.5 splines=true overlap=false] 4 | 5 | // to avoid confusion, remember this: 6 | // it's spelt tail/head, but it's read start/end 7 | 8 | // emphasize theatrically 9 | // show only explicitly given head/tails 10 | // put head/tail labels farther from the node 11 | edge [dir=none labeldistance=3] 12 | 13 | // not interested in node labels 14 | node [shape=circle width=0.5 label=""] 15 | 16 | { 17 | edge [arrowsize=2 samehead=ahead samearrowhead=1] 18 | a->Z [arrowtail=none taillabel=none] 19 | b->Z [arrowtail=normal taillabel=normal] 20 | c->Z [arrowtail=inv taillabel=inv] 21 | d->Z [arrowtail=dot taillabel=dot] 22 | e->Z [arrowtail=odot taillabel=odot] 23 | f->Z [arrowtail=invdot taillabel=invdot] 24 | g->Z [arrowtail=invodot taillabel=invodot] 25 | h->Z [arrowtail=open taillabel=open] 26 | i->Z [arrowtail=halfopen taillabel=halfopen arrowhead=inv headlabel=samehead] 27 | j->Z [arrowtail=empty taillabel=empty] 28 | k->Z [arrowtail=invempty taillabel=invempty] 29 | l->Z [arrowtail=diamond taillabel=diamond] 30 | m->Z [arrowtail=odiamond taillabel=odiamond] 31 | n->Z [arrowtail=box taillabel=box] 32 | o->Z [arrowtail=obox taillabel=obox] 33 | p->Z [arrowtail=tee taillabel=tee] 34 | q->Z [arrowtail=crow taillabel=crow] 35 | } 36 | { 37 | edge [arrowsize=4 sametail=atail samearrowtail=1] 38 | Z->A [arrowhead=none headlabel=none] 39 | Z->B [arrowhead=normal headlabel=normal] 40 | Z->C [arrowhead=inv headlabel=inv] 41 | Z->D [arrowhead=dot headlabel=dot] 42 | Z->E [arrowhead=odot headlabel=odot] 43 | Z->F [arrowhead=invdot headlabel=invdot] 44 | Z->G [arrowhead=invodot headlabel=invodot] 45 | Z->H [arrowhead=open headlabel=open] 46 | Z->I [arrowhead=halfopen headlabel=halfopen arrowtail=inv taillabel=sametail] 47 | Z->J [arrowhead=empty headlabel=empty] 48 | Z->K [arrowhead=invempty headlabel=invempty] 49 | Z->L [arrowhead=diamond headlabel=diamond] 50 | Z->M [arrowhead=odiamond headlabel=odiamond] 51 | Z->N [arrowhead=box headlabel=box] 52 | Z->O [arrowhead=obox headlabel=obox] 53 | Z->P [arrowhead=tee headlabel=tee] 54 | Z->Q [arrowhead=crow headlabel=crow] 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /test/graphs/b.dot: -------------------------------------------------------------------------------- 1 | digraph automata_0 { 2 | size ="8.5, 11"; 3 | node [shape = circle]; 4 | 0 [ style = filled, color=lightgrey ]; 5 | 2 [ shape = doublecircle ]; 6 | 0 -> 2 [ label = "a " ]; 7 | 0 -> 1 [ label = "other " ]; 8 | 1 -> 2 [ label = "a " ]; 9 | 1 -> 1 [ label = "other " ]; 10 | 2 -> 2 [ label = "a " ]; 11 | 2 -> 1 [ label = "other " ]; 12 | "Machine: a" [ shape = plaintext ]; 13 | } -------------------------------------------------------------------------------- /test/graphs/b117.dot: -------------------------------------------------------------------------------- 1 | digraph automata_0 { 2 | size ="8.5, 11"; 3 | node [shape = circle]; 4 | 0 [ style = filled, color=lightgrey ]; 5 | 2 [ shape = doublecircle ]; 6 | 0 -> 2 [ label = "a " ]; 7 | 0 -> 1 [ label = "other " ]; 8 | 1 -> 2 [ label = "a " ]; 9 | 1 -> 1 [ label = "other " ]; 10 | 2 -> 2 [ label = "a " ]; 11 | 2 -> 1 [ label = "other " ]; 12 | "Machine: a" [ shape = plaintext ]; 13 | } -------------------------------------------------------------------------------- /test/graphs/b123.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | tester_run_ksh:ne -> tester_run_ksh:n ; 3 | } 4 | 5 | -------------------------------------------------------------------------------- /test/graphs/b135.dot: -------------------------------------------------------------------------------- 1 | digraph ID { 2 | graph [ 3 | concentrate = true 4 | ]; 5 | A -> B 6 | B -> A 7 | } 8 | 9 | -------------------------------------------------------------------------------- /test/graphs/b145.dot: -------------------------------------------------------------------------------- 1 | digraph bla { 2 | rankdir=LR; 3 | compound=true; 4 | subgraph cluster_foo { 5 | label_foo [shape="record",label="foo"]; 6 | } 7 | cluster_foo -> label_xxxxxxx [lhead="cluster_foo"] 8 | columns_foo_insider:foo -> label_foo [lhead="cluster_foo"] 9 | } 10 | 11 | -------------------------------------------------------------------------------- /test/graphs/b146.dot: -------------------------------------------------------------------------------- 1 | digraph mygraph { 2 | label_foo [shape="record",label="foo"]; 3 | label_foo:foo -> label_foo 4 | } 5 | 6 | -------------------------------------------------------------------------------- /test/graphs/b155.dot: -------------------------------------------------------------------------------- 1 | digraph TopLevel { 2 | bgcolor = lightcyan1 3 | fontname = Arial 4 | label = "test.rb" 5 | fontsize = 8 6 | node [ 7 | fontname = Arial, 8 | color = black, 9 | fontsize = 8 10 | ] 11 | 12 | subgraph cluster_1 { 13 | bgcolor = palegreen1 14 | fontname = Arial 15 | color = blue 16 | label = "ModuleName" 17 | ClassName [ 18 | style = filled, 19 | URL = "classes/ModuleName/ClassName.html", 20 | fontcolor = black, 21 | color = palegoldenrod, 22 | label = "ClassName" 23 | ] 24 | 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /test/graphs/b22.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir=LR; 3 | node [shape=box]; 4 | size = "7.5,10.0"; 5 | ratio = "fill"; 6 | center =1; 7 | 8 | /* Node Definitions */ 9 | 10 | 11 | dc1 [shape=plaintext,label="DC 1"]; 12 | dc10 [shape=plaintext,label="DC 10"]; 13 | dc100 [shape=plaintext,label="DC 100"]; 14 | 15 | { rank = same; "dc1"; "dc10"; "dc100"; } 16 | 17 | /* Link Definitions */ 18 | 19 | /* Marking Unused Dialing Plans */ 20 | 21 | no_dc [shape=plaintext,label="NOTHING"]; 22 | { rank = min; "no_dc"; } 23 | } 24 | 25 | -------------------------------------------------------------------------------- /test/graphs/b3.dot: -------------------------------------------------------------------------------- 1 | digraph "g" { 2 | graph [ 3 | fontsize = "14" 4 | fontname = "Times-Roman" 5 | fontcolor = "black" 6 | color = "black" 7 | ] 8 | node [ 9 | fontsize = "14" 10 | fontname = "Times-Roman" 11 | fontcolor = "black" 12 | shape = "ellipse" 13 | color = "black" 14 | ] 15 | edge [ 16 | fontsize = "14" 17 | fontname = "Times-Roman" 18 | fontcolor = "black" 19 | color = "black" 20 | ] 21 | "n0" [ 22 | label = "(balanced)" 23 | color = "black" 24 | width = "0.833333" 25 | fontsize = "14" 26 | fontname = "Times-Roman" 27 | fontcolor = "black" 28 | pos = "151.378446,405.811623" 29 | height = "0.416667" 30 | shape = "ellipse" 31 | ] 32 | "n1" [ 33 | label = "(unbalanced" 34 | color = "black" 35 | width = "0.833333" 36 | fontsize = "14" 37 | fontname = "Times-Roman" 38 | fontcolor = "black" 39 | pos = "163.408521,310.621242" 40 | height = "0.416667" 41 | shape = "ellipse" 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /test/graphs/b33.dot: -------------------------------------------------------------------------------- 1 | digraph JAAS { 2 | fontname=arial; 3 | fontsize=20; 4 | subgraph cluster0 { 5 | label="Foo"; 6 | JOC [ label="JAAS" ]; 7 | }; 8 | } 9 | 10 | -------------------------------------------------------------------------------- /test/graphs/b34.dot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/graphs/b34.dot -------------------------------------------------------------------------------- /test/graphs/b491.dot: -------------------------------------------------------------------------------- 1 | digraph G 2 | { 3 | Node29 [ shape=record ] 4 | 5 | Node29 -> Node27 6 | Node29 -> Node26 7 | Node29 -> Node29 [ label="v"] 8 | } 9 | 10 | -------------------------------------------------------------------------------- /test/graphs/b53.dot: -------------------------------------------------------------------------------- 1 | /* Graph for "If.try_if_then" */ 2 | 3 | digraph "If.try_if_then" 4 | { 5 | label = "If.try_if_then"; 6 | rankdir="TD"; 7 | 8 | node [fontname="Helvetica", shape=record, fontsize="12", color="lightblue", style="filled"]; 9 | 10 | edge [fontname="Helvetica", fontsize="10", color="black"]; 11 | 12 | subgraph "cluster_node_57" 13 | { /* block node_57 */ 14 | label = ""; 15 | node_57 [label = "Block [57]"]; 16 | node_58 [label = "Return [58@57]"]; 17 | 18 | node_50 -> node_58 [label = "mem", dir = back]; 19 | node_48 -> node_58 [label = "int", dir = back]; 20 | } /* block node_57 */ 21 | 22 | subgraph "cluster_node_43" 23 | { /* block node_43 */ 24 | label = ""; 25 | node_43 [label = "Block [43]"]; 26 | node_50 [label = "Proj (mem) [50@43]"]; 27 | 28 | node_45 -> node_50 [label = "tuple", dir = back]; 29 | node_49 [label = "Proj (arg_2) [49@43]"]; 30 | 31 | node_45 -> node_49 [label = "tuple", dir = back]; 32 | node_48 [label = "Proj (arg_1) [48@43]"]; 33 | 34 | node_45 -> node_48 [label = "tuple", dir = back]; 35 | node_45 [label = "Start [45@43]"]; 36 | 37 | node_51 [label = "Proj (exe(4)) [51@43]"]; 38 | 39 | node_45 -> node_51 [label = "tuple", dir = back]; 40 | } /* block node_43 */ 41 | 42 | subgraph "cluster_node_52" 43 | { /* block node_52 */ 44 | label = ""; 45 | node_52 [label = "Block [52]"]; 46 | node_56 [label = "Proj (exe(0)) [56@52]"]; 47 | 48 | node_54 -> node_56 [label = "tuple", dir = back]; 49 | node_53 [label = "Compare [53@52]"]; 50 | 51 | node_48 -> node_53 [label = "int", dir = back]; 52 | node_49 -> node_53 [label = "int", dir = back]; 53 | node_54 [label = "Cond (2) [54@52]"]; 54 | 55 | node_53 -> node_54 [label = "condition", dir = back]; 56 | node_55 [label = "Proj (exe(1)) [55@52]"]; 57 | 58 | node_54 -> node_55 [label = "tuple", dir = back]; 59 | } /* block node_52 */ 60 | 61 | subgraph "cluster_node_60" 62 | { /* block node_60 */ 63 | label = ""; 64 | node_60 [label = "Block [60]"]; 65 | node_61 [label = "Return [61@60]"]; 66 | 67 | node_50 -> node_61 [label = "mem", dir = back]; 68 | node_49 -> node_61 [label = "int", dir = back]; 69 | } /* block node_60 */ 70 | 71 | subgraph "cluster_node_44" 72 | { /* block node_44 */ 73 | label = ""; 74 | node_44 [label = "Block [44]"]; 75 | node_46 [label = "End [46@44]"]; 76 | 77 | } /* block node_44 */ 78 | 79 | node_56 -> node_60 [label = "exe", dir = back]; 80 | node_51 -> node_52 [label = "exe", dir = back]; 81 | node_55 -> node_57 [label = "exe", dir = back]; 82 | node_58 -> node_44 [label = "exe", dir = back]; 83 | node_61 -> node_44 [label = "exe", dir = back]; 84 | } /* Graph "If.try_if_then" */ -------------------------------------------------------------------------------- /test/graphs/b545.dot: -------------------------------------------------------------------------------- 1 | digraph g { 2 | 3 | "N11" 4 | [ 5 | shape = record 6 | label = "WFSt|1571 as Ref: 1338 D" 7 | ] 8 | N11ne -> N11:p0 9 | } 10 | -------------------------------------------------------------------------------- /test/graphs/b56.dot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/graphs/b56.dot -------------------------------------------------------------------------------- /test/graphs/b58.dot_crashes_dot_abort_trap: -------------------------------------------------------------------------------- 1 | digraph G{ 2 | ordering=out; 3 | {rank=same;"1";"2"}; 4 | "1"->"2"; 5 | {rank=same;"4";"5"}; 6 | "4"->"5"; 7 | "7"->"5"; 8 | "7"->"4"; 9 | "6"->"1"; 10 | "3"->"6"; 11 | "6"->"4"; 12 | "3"->"8"; 13 | } 14 | 15 | -------------------------------------------------------------------------------- /test/graphs/b60.dot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pydot/pydot-ng/16f39800b6f5dc28d291a4d7763bbac04b9efe72/test/graphs/b60.dot -------------------------------------------------------------------------------- /test/graphs/b62.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | graph [concentrate=true]; 3 | 4 | routine1; 5 | routine2; 6 | 7 | routine1->routine2; 8 | routine1->routine2; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /test/graphs/b68.dot: -------------------------------------------------------------------------------- 1 | digraph simple { 2 | orientation=landscape; 3 | ratio=auto; 4 | size = "10,7.5"; 5 | label="Task Hierarchy: model2"; 6 | task15 [shape=box,fontcolor=forestgreen]; 7 | task16 [shape=box]; 8 | task17 [shape=box]; 9 | task18 [shape=box]; 10 | task19 [shape=box]; 11 | task20 [shape=box]; 12 | task21 [shape=box]; 13 | task95 [shape=box]; 14 | task31 [shape=box]; 15 | task32 [shape=box]; 16 | task33 [shape=box]; 17 | task34 [shape=box]; 18 | task15 -> task16 []; 19 | task15 -> task17 []; 20 | task15 -> task18 []; 21 | task15 -> task19 []; 22 | task15 -> task20 []; 23 | task15 -> task21 []; 24 | task15 -> task95 []; 25 | task15 -> task31 []; 26 | task31 -> task32 []; 27 | task31 -> task33 []; 28 | task31 -> task34 []; 29 | } -------------------------------------------------------------------------------- /test/graphs/b7.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | subgraph cluster_0 { 3 | subgraph cluster_1 { 4 | } 5 | a -> c; 6 | } 7 | 8 | subgraph cluster_1 { 9 | y -> z; 10 | y -> q; 11 | } 12 | 13 | y -> b; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /test/graphs/b71.dot: -------------------------------------------------------------------------------- 1 | digraph NL { 2 | 3 | size="30,36"; 4 | concentrate=true; 5 | 6 | Berne; 7 | FirstBerne; 8 | FTA; 9 | FTAA; 10 | MAI; 11 | NAFTA; 12 | Paris; 13 | PatentCooperation; 14 | Rome; 15 | UniversalCopyright; 16 | Uruguay; 17 | FirstWIPO; 18 | WIPOCopyright; 19 | WIPOPerformances; 20 | WTOTRIPs; 21 | 22 | FirstBerne -> UniversalCopyright -> Berne -> WIPOCopyright; 23 | FirstBerne -> FirstWIPO; 24 | Uruguay -> MAI -> FTAA; 25 | Uruguay -> WTOTRIPs -> FTAA; 26 | FTA -> NAFTA -> FTAA; 27 | FirstWIPO -> WIPOCopyright; 28 | FirstWIPO -> WIPOPerformances; 29 | FirstWIPO -> PatentCooperation; 30 | Paris -> PatentCooperation -> WTOTRIPs; 31 | Rome -> WIPOPerformances; 32 | 33 | Anne; 34 | CanadaCopyright1997; 35 | CanadaCopyright2001; 36 | CDA; 37 | CharterOfRights; 38 | CIPA; 39 | COPA; 40 | COPPA; 41 | CopyrightClause; 42 | CPACACRLI; 43 | CPDCI; 44 | CTEA; 45 | DMCA; 46 | EAR; 47 | FirstAmendment; 48 | FirstUSCopyright; 49 | ITAR; 50 | ITAR1996; 51 | JumpTV; 52 | RoCRuleMaking; 53 | SSSCA; 54 | StationersCharter; 55 | URAA; 56 | USCopyright1831; 57 | USCopyright1909; 58 | USCopyright1976; 59 | 60 | Berne -> USCopyright1976; 61 | CanadaCopyright1997 -> CanadaCopyright2001; 62 | CDA -> COPA -> CIPA; 63 | WIPOCopyright -> CPDCI; 64 | DMCA -> CPDCI; 65 | DMCA -> RoCRuleMaking; 66 | DMCA -> SSSCA; 67 | EAR -> ITAR -> ITAR1996; 68 | JumpTV -> CPACACRLI -> CanadaCopyright2001; 69 | Rome -> CanadaCopyright1997; 70 | StationersCharter -> Anne -> CopyrightClause; 71 | CopyrightClause -> FirstUSCopyright -> USCopyright1831 72 | -> USCopyright1909 -> USCopyright1976 -> CTEA; 73 | USCopyright1976 -> DMCA; 74 | Uruguay -> URAA; 75 | USCopyright1976 -> URAA; 76 | 77 | iCraveTV; 78 | ACLUReno; 79 | ACLUReno2; 80 | ALA; 81 | Ashcroft; 82 | Bernstein; 83 | Betamax; 84 | Campbell; 85 | DVDCCA; 86 | Feist; 87 | Felten; 88 | Folsom; 89 | Johansen; 90 | Junger; 91 | KarnSchneier; 92 | Microsystems; 93 | Playboy; 94 | RenoACLU; 95 | RenoACLU2; 96 | RTC; 97 | Sklyarov; 98 | Suntrust; 99 | Universal; 100 | 101 | Betamax -> Felten; 102 | CDA -> ACLUReno -> RenoACLU -> COPA -> ACLUReno2 -> RenoACLU2 -> CIPA; 103 | CIPA -> ALA; 104 | CIPA -> Microsystems; 105 | DMCA -> Felten; 106 | DMCA -> Johansen; 107 | DMCA -> Sklyarov; 108 | FirstAmendment -> Bernstein; 109 | FirstAmendment -> ACLUReno; 110 | Folsom -> Campbell -> Suntrust; 111 | Folsom -> Betamax; 112 | EAR -> KarnSchneier; 113 | iCraveTV -> JumpTV; 114 | ITAR1996 -> Bernstein -> Junger; 115 | ITAR1996 -> KarnSchneier; 116 | Johansen -> DVDCCA; 117 | Johansen -> Universal; 118 | Junger -> Microsystems -> RoCRuleMaking; 119 | Playboy -> RTC; 120 | RenoACLU2 -> Ashcroft; 121 | RTC -> CPDCI; 122 | USCopyright1831 -> Folsom; 123 | USCopyright1976 -> Feist; 124 | USCopyright1976 -> Playboy; 125 | } -------------------------------------------------------------------------------- /test/graphs/b73.dot: -------------------------------------------------------------------------------- 1 | digraph test { 2 | gvds_array0 [label="{fi}|{b}", shape="record"]; 3 | "gvds_array0":port1 -> gvds_array0; 4 | } 5 | 6 | -------------------------------------------------------------------------------- /test/graphs/b73a.dot: -------------------------------------------------------------------------------- 1 | digraph test { 2 | gvds_array0 [label="{1}|{2}|{3}", shape="record"]; 3 | "gvds_array0":port2 -> gvds_array0; 4 | } 5 | 6 | -------------------------------------------------------------------------------- /test/graphs/b76.dot: -------------------------------------------------------------------------------- 1 | digraph polyport { 2 | edge [headport=":w", tailport=":e"] 3 | n0->n0 4 | } 5 | 6 | -------------------------------------------------------------------------------- /test/graphs/b77.dot: -------------------------------------------------------------------------------- 1 | graph S { 2 | 1 -- 6; 3 | 2 -- 3 -- 6; 4 | 4 -- 5 -- 6; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /test/graphs/b786.dot: -------------------------------------------------------------------------------- 1 | digraph g { 2 | node [shape = record]; 3 | subgraph cluster0 { 4 | n12 [label = "|12|"]; 5 | n13 [label = "|13|"]; 6 | n18 [label = "|18|"]; 7 | n2 [label = "|2|"]; 8 | n23 [label = "|23|"]; 9 | n3 [label = "|3|"]; 10 | n4 [label = "|4|"]; 11 | n5 [label = "|5|"]; 12 | n6 [label = "|6|"]; 13 | n7 [label = "|7|"]; 14 | n8 [label = "|8|"]; 15 | "n3":f0 -> "n2":f1; 16 | "n3":f2 -> "n4":f1; 17 | "n5":f0 -> "n3":f1; 18 | "n5":f2 -> "n7":f1; 19 | "n6":f0 -> "n12":f1; 20 | "n6":f2 -> "n13":f1; 21 | "n7":f0 -> "n6":f1; 22 | "n7":f2 -> "n8":f1; 23 | "n8":f0 -> "n23":f1; 24 | "n8":f2 -> "n18":f1; 25 | } 26 | } -------------------------------------------------------------------------------- /test/graphs/b79.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | size="2,2"; 3 | rankdir=LR; 4 | T -> H [arrowhead=dot,arrowsize=2.2]; 5 | } 6 | -------------------------------------------------------------------------------- /test/graphs/b80.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | ranksep=equally; 3 | c [height=2.0]; 4 | a -> b; 5 | c -> b; 6 | b -> d; 7 | } 8 | -------------------------------------------------------------------------------- /test/graphs/b80a.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | ranksep=equally; 3 | c [height=2.0]; 4 | a -> b; 5 | c -> b; 6 | } 7 | -------------------------------------------------------------------------------- /test/graphs/b85.dot: -------------------------------------------------------------------------------- 1 | digraph inheritance 2 | { 3 | Node1100 [shape="box",label="exotkAF_ViewType.hxx",fontsize=10,height=0.2,width=0.4,fontname="doxfont",color="black",style="filled" fontcolor="white"]; 4 | Node1101 -> Node1100 [color="midnightblue",fontsize=10,style="solid",fontname="doxfont"]; 5 | Node1101 [shape="box",label="exotkAF_View.cxx",fontsize=10,height=0.2,width=0.4,fontname="doxfont",color="black",URL="$exotkAF__View_8cxx.html"]; 6 | Node1102 -> Node1100 [color="midnightblue",fontsize=10,style="solid",fontname="doxfont"]; 7 | Node1102 [shape="box",label="exotkAF_ViewPopup.cxx",fontsize=10,height=0.2,width=0.4,fontname="doxfont",color="black",URL="$exotkAF__ViewPopup_8cxx.html"]; 8 | } 9 | -------------------------------------------------------------------------------- /test/graphs/b993.dot: -------------------------------------------------------------------------------- 1 | diGraph G{ 2 | graph [charset="utf8"] 3 | 1[label="Umlaut"]; 4 | 2[label="ü"]; 5 | 3[label="ä"]; 6 | 4[label="ö"]; 7 | 1->2; 8 | 1->3; 9 | 1->4; 10 | } 11 | -------------------------------------------------------------------------------- /test/graphs/bad.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | Marden--hg; 3 | Cannon--ggt; 4 | Epstein--kg; 5 | Epstein--ldt; 6 | } 7 | -------------------------------------------------------------------------------- /test/graphs/biglabel.dot: -------------------------------------------------------------------------------- 1 | digraph structs { 2 | node [shape=record]; 3 | struct1 [shape=record,label=" left| middle| right"]; 4 | struct2 [shape=record,label=" one| two"]; 5 | struct3 [shape=record,label="hello\nworld\n\ 6 | and | { Thats the reason | post-menopausal | estrogen } | is\n\ 7 | given together with another hormone called\n\ 8 | progestin: The combination lowers the risk of\n\ 9 | endometrial cancer.\n\ 10 | \n\ 11 | But the NTP advisers said putting all\n\ 12 | estrogens on the federal list would help\n\ 13 | women trying to balance the benefits and\n\ 14 | risks when choosing hormone therapy.\n\ 15 | Physicians never discuss any of these risks\n\ 16 | when they are prescribing hormone therapy.\n\ 17 | They only discuss benefits. Listing might\n\ 18 | force it on the table, Michelle Medinsky, a\n\ 19 | toxicologist from Durham, N.C., said before\n\ 20 | the vote.\n\ 21 | \n\ 22 | The committee of scientists advises the NTP,\n\ 23 | a branch of the National Institutes of Health\n\ 24 | that every two years updates the federal list\n\ 25 | of proven and suspected cancer-causing\n\ 26 | substances.\n\ 27 | \n\ 28 | The NTP typically follows its advisers\n\ 29 | recommendations, but an officially updated\n\ 30 | carcinogen list isnt expected until 2002.\n\ 31 | \n\ 32 | Thursday, after a daylong debate, the panel\n\ 33 | declined to add talc powder to the list,\n\ 34 | saying there wasnt enough evidence linking\n\ 35 | its use in feminine hygiene products to\n\ 36 | ovarian cancer. The panel deadlocked over\n\ 37 | whether to a second type of talc, fibrous\n\ 38 | talc that some studies have linked to lung\n\ 39 | cancer in talc miners.\n\ 40 | \n\ 41 | On Wednesday, the panel voted to add\n\ 42 | ultraviolet radiation -- those\n\ 43 | sunburn-causing rays long known to cause skin\n\ 44 | cancer -- to the official carcinogen list.\n\ 45 | \n\ 46 | The panel on Friday continued debating an\n\ 47 | association between cancers of the nose and\n\ 48 | sinuses with industrial exposure to wood\n\ 49 | dust.\n\ 50 | \n\ 51 | Talc has long been controversial. When\n\ 52 | studies first appeared suggesting it migrated\n\ 53 | into the ovaries to cause tumors, many\n\ 54 | feminine hygiene products replaced talc with\n\ 55 | cornstarch.\n\ 56 | \n\ 57 | Panelist Medinsky said she had been prepared\n\ 58 | to list talc powder as reasonably believed\n\ 59 | to cause cancer. But after listening to\n\ 60 | hours of industry attacks on the science,\n\ 61 | the evidence has knocked me out of the\n\ 62 | reasonably category into not list, she\n\ 63 | said before the panel voted 7-3 against\n\ 64 | listing talc.\n\ 65 | \n\ 66 | Talc has long been controversial. When\n\ 67 | studies first appeared suggesting it migrated\n\ 68 | into the ovaries to cause tumors, many\n\ 69 | feminine hygiene products replaced talc with\n\ 70 | cornstarch.\n\ 71 | \n\ 72 | Panelist Medinsky said she had been prepared\n\ 73 | to list talc powder as reasonably believed\n\ 74 | to cause cancer. But after listening to\n\ 75 | hours of industry attacks on the science,\n\ 76 | the evidence has knocked me out of the\n\ 77 | reasonably category into not list, she\n\ 78 | said before the panel voted 7-3 against\n\ 79 | listing talc.\n\ 80 | \n\ 81 | Talc in one form or the other can be found in\n\ 82 | many papers, paints, ceramics, food wrappers,\n\ 83 | hard candy, chewing gum, cosmetics and pills.\n\ 84 | Most people are familiar with talc as a loose\n\ 85 | powder used in cosmetics and as a drying\n\ 86 | powder.\n\ 87 | abde\ 88 | |{ b |{c| d|e}| f}| g | h"]; 89 | struct1:f1 -> struct2:f0; 90 | struct1:f2 -> struct3:here; 91 | } 92 | 93 | -------------------------------------------------------------------------------- /test/graphs/cairo.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | graph [ 3 | fontsize = "14" 4 | fontname = "Times-Roman" 5 | fontcolor = "black" 6 | color = "black" 7 | ]; 8 | node [ 9 | fontsize = "14" 10 | fontname = "Times-Roman" 11 | fontcolor = "black" 12 | shape = "box" 13 | /* color = "black" */ 14 | width = "0.5" 15 | style = "filled" 16 | ]; 17 | edge [ 18 | fontsize = "14" 19 | fontname = "Times-Roman" 20 | fontcolor = "black" 21 | color = "black" 22 | ]; 23 | "ПРЕЗИДЕНТ РФ [1888]" -> "ВЛАДИМИР ПУТИН [2645]" [label="834"]; 24 | "ПРЕЗИДЕНТ РФ [1888]" -> "ИРАК [2665]" [label="157"]; 25 | "ПРЕЗИДЕНТ РФ [1888]" -> "ВОЙНА [1616]" [label="36"]; 26 | "ПРЕЗИДЕНТ РФ [1888]" -> "ТЕКСТ [2064]" [label="343"]; 27 | "ПРЕЗИДЕНТ РФ [1888]" -> "МОСКВА [3539]" [label="208"]; 28 | "ПРЕЗИДЕНТ РФ [1888]" -> "ЯПОНИЯ [781]" [label="82"]; 29 | "ПРЕЗИДЕНТ РФ [1888]" -> "УКРАИНА [1103]" [label="54"]; 30 | "ПРЕЗИДЕНТ РФ [1888]" -> "ПОЛИТИКА [2170]" [label="64"]; 31 | "ПРЕЗИДЕНТ РФ [1888]" -> "ПЕРЕПИСЬ [832]" [label="47"]; 32 | "ПРЕЗИДЕНТ РФ [1888]" -> "РЕСПУБЛИКА [1191]" [label="52"]; 33 | "ПРЕЗИДЕНТ РФ [1888]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="23"]; 34 | "ПРЕЗИДЕНТ РФ [1888]" -> "ОРГАНИЗАЦИЯ ОБЪЕДИНЕННЫХ НАЦИЙ [935]" [label="74"]; 35 | "ПРЕЗИДЕНТ РФ [1888]" -> "БЛЭР [1120]" [label="140"]; 36 | "ВЛАДИМИР ПУТИН [2645]" -> "ИРАК [2665]" [label="275"]; 37 | "ВЛАДИМИР ПУТИН [2645]" -> "ВОЙНА [1616]" [label="45"]; 38 | "ВЛАДИМИР ПУТИН [2645]" -> "ТЕКСТ [2064]" [label="598"]; 39 | "ВЛАДИМИР ПУТИН [2645]" -> "МОСКВА [3539]" [label="362"]; 40 | "ВЛАДИМИР ПУТИН [2645]" -> "ЯПОНИЯ [781]" [label="143"]; 41 | "ВЛАДИМИР ПУТИН [2645]" -> "УКРАИНА [1103]" [label="70"]; 42 | "ВЛАДИМИР ПУТИН [2645]" -> "ПОЛИТИКА [2170]" [label="101"]; 43 | "ВЛАДИМИР ПУТИН [2645]" -> "ПЕРЕПИСЬ [832]" [label="59"]; 44 | "ВЛАДИМИР ПУТИН [2645]" -> "РЕСПУБЛИКА [1191]" [label="51"]; 45 | "ВЛАДИМИР ПУТИН [2645]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="24"]; 46 | "ВЛАДИМИР ПУТИН [2645]" -> "ОРГАНИЗАЦИЯ ОБЪЕДИНЕННЫХ НАЦИЙ [935]" [label="112"]; 47 | "ВЛАДИМИР ПУТИН [2645]" -> "БЛЭР [1120]" [label="290"]; 48 | "ИРАК [2665]" -> "ВОЙНА [1616]" [label="389"]; 49 | "ИРАК [2665]" -> "ТЕКСТ [2064]" [label="197"]; 50 | "ИРАК [2665]" -> "МОСКВА [3539]" [label="273"]; 51 | "ИРАК [2665]" -> "УКРАИНА [1103]" [label="36"]; 52 | "ИРАК [2665]" -> "ПОЛИТИКА [2170]" [label="68"]; 53 | "ИРАК [2665]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="365"]; 54 | "ИРАК [2665]" -> "ОРГАНИЗАЦИЯ ОБЪЕДИНЕННЫХ НАЦИЙ [935]" [label="556"]; 55 | "ИРАК [2665]" -> "БЛЭР [1120]" [label="337"]; 56 | "ВОЙНА [1616]" -> "ТЕКСТ [2064]" [label="73"]; 57 | "ВОЙНА [1616]" -> "МОСКВА [3539]" [label="93"]; 58 | "ВОЙНА [1616]" -> "ЯПОНИЯ [781]" [label="10"]; 59 | "ВОЙНА [1616]" -> "УКРАИНА [1103]" [label="19"]; 60 | "ВОЙНА [1616]" -> "ПОЛИТИКА [2170]" [label="74"]; 61 | "ВОЙНА [1616]" -> "РЕСПУБЛИКА [1191]" [label="37"]; 62 | "ВОЙНА [1616]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="216"]; 63 | "ВОЙНА [1616]" -> "ОРГАНИЗАЦИЯ ОБЪЕДИНЕННЫХ НАЦИЙ [935]" [label="96"]; 64 | "ВОЙНА [1616]" -> "БЛЭР [1120]" [label="62"]; 65 | "ТЕКСТ [2064]" -> "МОСКВА [3539]" [label="633"]; 66 | "ТЕКСТ [2064]" -> "ЯПОНИЯ [781]" [label="88"]; 67 | "ТЕКСТ [2064]" -> "УКРАИНА [1103]" [label="58"]; 68 | "ТЕКСТ [2064]" -> "ПОЛИТИКА [2170]" [label="120"]; 69 | "ТЕКСТ [2064]" -> "ПЕРЕПИСЬ [832]" [label="68"]; 70 | "ТЕКСТ [2064]" -> "РЕСПУБЛИКА [1191]" [label="47"]; 71 | "ТЕКСТ [2064]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="51"]; 72 | "ТЕКСТ [2064]" -> "ОРГАНИЗАЦИЯ ОБЪЕДИНЕННЫХ НАЦИЙ [935]" [label="78"]; 73 | "ТЕКСТ [2064]" -> "БЛЭР [1120]" [label="143"]; 74 | "МОСКВА [3539]" -> "ЯПОНИЯ [781]" [label="159"]; 75 | "МОСКВА [3539]" -> "УКРАИНА [1103]" [label="46"]; 76 | "МОСКВА [3539]" -> "ПОЛИТИКА [2170]" [label="126"]; 77 | "МОСКВА [3539]" -> "ПЕРЕПИСЬ [832]" [label="42"]; 78 | "МОСКВА [3539]" -> "РЕСПУБЛИКА [1191]" [label="53"]; 79 | "МОСКВА [3539]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="55"]; 80 | "МОСКВА [3539]" -> "ОРГАНИЗАЦИЯ ОБЪЕДИНЕННЫХ НАЦИЙ [935]" [label="99"]; 81 | "МОСКВА [3539]" -> "БЛЭР [1120]" [label="241"]; 82 | "ЯПОНИЯ [781]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="29"]; 83 | "УКРАИНА [1103]" -> "ПОЛИТИКА [2170]" [label="59"]; 84 | "УКРАИНА [1103]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="46"]; 85 | "ПОЛИТИКА [2170]" -> "РЕСПУБЛИКА [1191]" [label="60"]; 86 | "ПОЛИТИКА [2170]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="66"]; 87 | "ПОЛИТИКА [2170]" -> "ОРГАНИЗАЦИЯ ОБЪЕДИНЕННЫХ НАЦИЙ [935]" [label="18"]; 88 | "ПОЛИТИКА [2170]" -> "БЛЭР [1120]" [label="43"]; 89 | "ПЕРЕПИСЬ [832]" -> "РЕСПУБЛИКА [1191]" [label="30"]; 90 | "РЕСПУБЛИКА [1191]" -> "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" [label="12"]; 91 | "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" -> "ОРГАНИЗАЦИЯ ОБЪЕДИНЕННЫХ НАЦИЙ [935]" [label="89"]; 92 | "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ [1284]" -> "БЛЭР [1120]" [label="41"]; 93 | "ОРГАНИЗАЦИЯ ОБЪЕДИНЕННЫХ НАЦИЙ [935]" -> "БЛЭР [1120]" [label="123"]; 94 | } 95 | -------------------------------------------------------------------------------- /test/graphs/center.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | center=true 3 | a -> { b c} 4 | } 5 | -------------------------------------------------------------------------------- /test/graphs/clover.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | a -- b -- c -- a 3 | a -- B -- C -- a 4 | a -- 1 -- 2 -- a 5 | } 6 | -------------------------------------------------------------------------------- /test/graphs/clust.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | subgraph cluster_0 { 3 | label = "hello world"; 4 | a -> b; 5 | a -> c; 6 | color = hot_pink; 7 | } 8 | 9 | subgraph cluster_1 { 10 | label = "MSDOT"; 11 | style= "dashed"; 12 | color=purple; 13 | x -> y; 14 | x -> z; 15 | y -> z; 16 | y -> q; 17 | } 18 | 19 | top -> a; 20 | top -> y; 21 | y -> b; 22 | } 23 | -------------------------------------------------------------------------------- /test/graphs/clust1.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | subgraph cluster_c0 {a0 -> a1 -> a2 -> a3;} 3 | subgraph cluster_c1 {b0 -> b1 -> b2 -> b3;} 4 | x -> a0; 5 | x -> b0; 6 | a1 -> a3; 7 | a3 -> a0; 8 | } 9 | -------------------------------------------------------------------------------- /test/graphs/clust2.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | subgraph cluster_c0 {a0 -> a1 -> a2 -> a3;} 3 | subgraph cluster_c1 {b0 -> b1 -> b2 -> b3;} 4 | x -> a0; 5 | x -> b0; 6 | a1 -> b3; 7 | b3 -> a1; 8 | } 9 | -------------------------------------------------------------------------------- /test/graphs/clust3.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | subgraph cluster_c0 {a0 -> a1 -> a2 -> a3;} 3 | subgraph cluster_c1 {b0 -> b1 -> b2 -> b3;} 4 | x -> a0; 5 | x -> b0; 6 | a1 -> b3; 7 | b1 -> a3; 8 | } 9 | -------------------------------------------------------------------------------- /test/graphs/clust4.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | 3 | subgraph cluster_0 { 4 | style=filled; 5 | color=lightgrey; 6 | node [style=filled,color=white]; 7 | a0 -> a1 -> a2 -> a3; 8 | label = "process #1"; 9 | } 10 | 11 | subgraph cluster_1 { 12 | node [style=filled]; 13 | b0 -> b1 -> b2 -> b3; 14 | label = "process #2"; 15 | color=blue 16 | } 17 | start -> a0; 18 | start -> b0; 19 | a1 -> b3; 20 | b2 -> a3; 21 | a3 -> a0; 22 | a3 -> end; 23 | b3 -> end; 24 | 25 | start [shape=Mdiamond]; 26 | end [shape=Msquare]; 27 | } 28 | -------------------------------------------------------------------------------- /test/graphs/clust5.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | size="6,6"; 3 | a -> b -> c; 4 | 5 | subgraph cluster0 { 6 | x0 -> y0; 7 | x0 -> z0; 8 | } 9 | 10 | subgraph cluster1 { 11 | x1 -> y1; 12 | x1 -> z1; 13 | } 14 | 15 | subgraph cluster2 { 16 | x2 -> y2; 17 | x2 -> z2; 18 | } 19 | 20 | a -> x0; 21 | b -> x1; 22 | b -> x2; 23 | a -> z2; 24 | c -> z1; 25 | } 26 | -------------------------------------------------------------------------------- /test/graphs/color.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | node [style=filled] 3 | abc [color=green] 4 | def [color="0.2,0.8,0.8"] 5 | ghi [color="#FF0000"] 6 | kl [color="#FF00007F"] 7 | mno [color=yellow, fontcolor="#FF00007F"] 8 | pqr [label=mno, color=yellow, fontcolor="#FF0000"] 9 | abc -> def [color="red:blue:#00FF00"] 10 | } 11 | -------------------------------------------------------------------------------- /test/graphs/colors.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | 3 | node [style=filled, shape=box] 4 | ddddddd [fontcolor=yellow, fillcolor=blue, color=orange] 5 | subgraph clusterA { 6 | style=filled 7 | fillcolor=lightgray 8 | pencolor=blue 9 | eeeee [peripheries=3, fontcolor=red, color=yellow] 10 | eeeee -> ee 11 | } 12 | ddddddd -> eeeee [labelfontcolor=chocolate, headlabel=headlabel, label=flue, fontcolor=green, color=lightblue] 13 | } 14 | -------------------------------------------------------------------------------- /test/graphs/colorscheme.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | 3 | node [shape=box, style=filled] 4 | 5 | subgraph { 6 | node [colorscheme=spectral11] 7 | 1 [color=1] 8 | 4 [color=4] 9 | 8 [color=8] 10 | 11 [color="//11"] 11 | } 12 | 13 | ylgn7 [color="/ylgn7/5"] 14 | X11 [color="/X11/thistle"] 15 | indigo [color="/X11/indigo"] 16 | magenta [color="magenta"] 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/compound.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | compound=true 3 | 4 | subgraph clusterA { 5 | a1 -> a2 -> a3 6 | } 7 | subgraph clusterB { 8 | subgraph clusterC { 9 | c1 -> c2 10 | } 11 | b1 -> b2 12 | b1 -> b3 13 | b1 -> c2 14 | } 15 | a1 -> b2 [lhead=clusterB] 16 | c2 -> a3 [ltail=clusterC] 17 | b3 -> a3 [ltail=clusterB, lhead=clusterA] 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/crazy.dot: -------------------------------------------------------------------------------- 1 | digraph "unix" { 2 | graph [ fontname = "Helvetica", 3 | fontsize = 36, 4 | label = "\n\n\n\nObject Oriented Graphs\nStephen North, 3/19/93", 5 | size = "6,6" ]; 6 | node [ shape = polygon, 7 | sides = 4, 8 | distortion = "0.0", 9 | orientation = "0.0", 10 | skew = "0.0", 11 | color = white, 12 | style = filled, 13 | fontname = "Helvetica" ]; 14 | "5th Edition" [sides=9, distortion="0.936354", orientation=28, skew="-0.126818", color=salmon2]; 15 | "6th Edition" [sides=5, distortion="0.238792", orientation=11, skew="0.995935", color=deepskyblue]; 16 | "PWB 1.0" [sides=8, distortion="0.019636", orientation=79, skew="-0.440424", color=goldenrod2]; 17 | LSX [sides=9, distortion="-0.698271", orientation=22, skew="-0.195492", color=burlywood2]; 18 | "1 BSD" [sides=7, distortion="0.265084", orientation=26, skew="0.403659", color=gold1]; 19 | "Mini Unix" [distortion="0.039386", orientation=2, skew="-0.461120", color=greenyellow]; 20 | Wollongong [sides=5, distortion="0.228564", orientation=63, skew="-0.062846", color=darkseagreen]; 21 | Interdata [distortion="0.624013", orientation=56, skew="0.101396", color=dodgerblue1]; 22 | "Unix/TS 3.0" [sides=8, distortion="0.731383", orientation=43, skew="-0.824612", color=thistle2]; 23 | "PWB 2.0" [sides=6, distortion="0.592100", orientation=34, skew="-0.719269", color=darkolivegreen3]; 24 | "7th Edition" [sides=10, distortion="0.298417", orientation=65, skew="0.310367", color=chocolate]; 25 | "8th Edition" [distortion="-0.997093", orientation=50, skew="-0.061117", color=turquoise3]; 26 | "32V" [sides=7, distortion="0.878516", orientation=19, skew="0.592905", color=steelblue3]; 27 | V7M [sides=10, distortion="-0.960249", orientation=32, skew="0.460424", color=navy]; 28 | "Ultrix-11" [sides=10, distortion="-0.633186", orientation=10, skew="0.333125", color=darkseagreen4]; 29 | Xenix [sides=8, distortion="-0.337997", orientation=52, skew="-0.760726", color=coral]; 30 | "UniPlus+" [sides=7, distortion="0.788483", orientation=39, skew="-0.526284", color=darkolivegreen3]; 31 | "9th Edition" [sides=7, distortion="0.138690", orientation=55, skew="0.554049", color=coral3]; 32 | "2 BSD" [sides=7, distortion="-0.010661", orientation=84, skew="0.179249", color=blanchedalmond]; 33 | "2.8 BSD" [distortion="-0.239422", orientation=44, skew="0.053841", color=lightskyblue1]; 34 | "2.9 BSD" [distortion="-0.843381", orientation=70, skew="-0.601395", color=aquamarine2]; 35 | "3 BSD" [sides=10, distortion="0.251820", orientation=18, skew="-0.530618", color=lemonchiffon]; 36 | "4 BSD" [sides=5, distortion="-0.772300", orientation=24, skew="-0.028475", color=darkorange1]; 37 | "4.1 BSD" [distortion="-0.226170", orientation=38, skew="0.504053", color=lightyellow1]; 38 | "4.2 BSD" [sides=10, distortion="-0.807349", orientation=50, skew="-0.908842", color=darkorchid4]; 39 | "4.3 BSD" [sides=10, distortion="-0.030619", orientation=76, skew="0.985021", color=lemonchiffon2]; 40 | "Ultrix-32" [distortion="-0.644209", orientation=21, skew="0.307836", color=goldenrod3]; 41 | "PWB 1.2" [sides=7, distortion="0.640971", orientation=84, skew="-0.768455", color=cyan]; 42 | "USG 1.0" [distortion="0.758942", orientation=42, skew="0.039886", color=blue]; 43 | "CB Unix 1" [sides=9, distortion="-0.348692", orientation=42, skew="0.767058", color=firebrick]; 44 | "USG 2.0" [distortion="0.748625", orientation=74, skew="-0.647656", color=chartreuse4]; 45 | "CB Unix 2" [sides=10, distortion="0.851818", orientation=32, skew="-0.020120", color=greenyellow]; 46 | "CB Unix 3" [sides=10, distortion="0.992237", orientation=29, skew="0.256102", color=bisque4]; 47 | "Unix/TS++" [sides=6, distortion="0.545461", orientation=16, skew="0.313589", color=mistyrose2]; 48 | "PDP-11 Sys V" [sides=9, distortion="-0.267769", orientation=40, skew="0.271226", color=cadetblue1]; 49 | "USG 3.0" [distortion="-0.848455", orientation=44, skew="0.267152", color=bisque2]; 50 | "Unix/TS 1.0" [distortion="0.305594", orientation=75, skew="0.070516", color=orangered]; 51 | "TS 4.0" [sides=10, distortion="-0.641701", orientation=50, skew="-0.952502", color=crimson]; 52 | "System V.0" [sides=9, distortion="0.021556", orientation=26, skew="-0.729938", color=darkorange1]; 53 | "System V.2" [sides=6, distortion="0.985153", orientation=33, skew="-0.399752", color=darkolivegreen4]; 54 | "System V.3" [sides=7, distortion="-0.687574", orientation=58, skew="-0.180116", color=lightsteelblue1]; 55 | "5th Edition" -> "6th Edition"; 56 | "5th Edition" -> "PWB 1.0"; 57 | "6th Edition" -> LSX; 58 | "6th Edition" -> "1 BSD"; 59 | "6th Edition" -> "Mini Unix"; 60 | "6th Edition" -> Wollongong; 61 | "6th Edition" -> Interdata; 62 | Interdata -> "Unix/TS 3.0"; 63 | Interdata -> "PWB 2.0"; 64 | Interdata -> "7th Edition"; 65 | "7th Edition" -> "8th Edition"; 66 | "7th Edition" -> "32V"; 67 | "7th Edition" -> V7M; 68 | "7th Edition" -> "Ultrix-11"; 69 | "7th Edition" -> Xenix; 70 | "7th Edition" -> "UniPlus+"; 71 | V7M -> "Ultrix-11"; 72 | "8th Edition" -> "9th Edition"; 73 | "1 BSD" -> "2 BSD"; 74 | "2 BSD" -> "2.8 BSD"; 75 | "2.8 BSD" -> "Ultrix-11"; 76 | "2.8 BSD" -> "2.9 BSD"; 77 | "32V" -> "3 BSD"; 78 | "3 BSD" -> "4 BSD"; 79 | "4 BSD" -> "4.1 BSD"; 80 | "4.1 BSD" -> "4.2 BSD"; 81 | "4.1 BSD" -> "2.8 BSD"; 82 | "4.1 BSD" -> "8th Edition"; 83 | "4.2 BSD" -> "4.3 BSD"; 84 | "4.2 BSD" -> "Ultrix-32"; 85 | "PWB 1.0" -> "PWB 1.2"; 86 | "PWB 1.0" -> "USG 1.0"; 87 | "PWB 1.2" -> "PWB 2.0"; 88 | "USG 1.0" -> "CB Unix 1"; 89 | "USG 1.0" -> "USG 2.0"; 90 | "CB Unix 1" -> "CB Unix 2"; 91 | "CB Unix 2" -> "CB Unix 3"; 92 | "CB Unix 3" -> "Unix/TS++"; 93 | "CB Unix 3" -> "PDP-11 Sys V"; 94 | "USG 2.0" -> "USG 3.0"; 95 | "USG 3.0" -> "Unix/TS 3.0"; 96 | "PWB 2.0" -> "Unix/TS 3.0"; 97 | "Unix/TS 1.0" -> "Unix/TS 3.0"; 98 | "Unix/TS 3.0" -> "TS 4.0"; 99 | "Unix/TS++" -> "TS 4.0"; 100 | "CB Unix 3" -> "TS 4.0"; 101 | "TS 4.0" -> "System V.0"; 102 | "System V.0" -> "System V.2"; 103 | "System V.2" -> "System V.3"; 104 | } 105 | -------------------------------------------------------------------------------- /test/graphs/ctext.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | xyz [label = "hello\nworld",color="slate_blue",fontsize=24,fontname="Palatino-Italic",style=filled,fontcolor="hot pink"]; 3 | node [style=filled]; 4 | red [color=red]; 5 | green [color=green]; 6 | blue [color=blue,fontcolor=black]; 7 | cyan [color=cyan]; 8 | magenta [color=magenta]; 9 | yellow [color=yellow]; 10 | orange [color=orange]; 11 | red -> green; 12 | red -> blue; 13 | blue -> cyan; 14 | blue -> magenta; 15 | green -> yellow; 16 | green -> orange; 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/d.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | Marden--ldt; 3 | Marden--kg; 4 | Marden--hg; 5 | Cannon--ldt; 6 | Cannon--kg; 7 | Cannon--ggt; 8 | Epstein--kg; 9 | Epstein--ldt; 10 | Epstein--ggt; 11 | Epstein--hg; 12 | Conway--ggt; 13 | } 14 | -------------------------------------------------------------------------------- /test/graphs/dd.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | node [label="\N"]; 3 | graph [bb="0,0,237,274"]; 4 | Marden [pos="158,19", width="1.06", height="0.50"]; 5 | ldt [pos="109,73", width="0.75", height="0.50"]; 6 | kg [pos="81,46", width="0.75", height="0.50"]; 7 | hg [pos="209,86", width="0.75", height="0.50"]; 8 | Cannon [pos="39,110", width="1.06", height="0.50"]; 9 | ggt [pos="80,181", width="0.75", height="0.50"]; 10 | Epstein [pos="139,127", width="1.00", height="0.50"]; 11 | /* Conway [pos="65,255", width="1.11", height="0.50"]; */ 12 | Marden -- ldt [pos="143,36 136,43 129,50 123,57"]; 13 | Marden -- kg [pos="127,30 120,32 112,35 105,38"]; 14 | Marden -- hg [pos="171,36 180,47 188,59 196,70"]; 15 | Cannon -- ldt [pos="65,96 72,92 80,88 88,84"]; 16 | Cannon -- kg [pos="50,93 57,83 64,73 70,63"]; 17 | Cannon -- ggt [pos="49,128 56,140 63,152 70,164"]; 18 | kg -- Epstein [pos="93,62 104,78 116,94 127,110"]; 19 | ldt -- Epstein [pos="119,90 122,97 125,103 129,109"]; 20 | Epstein -- ggt [pos="122,143 113,151 105,158 96,166"]; 21 | hg -- Epstein [pos="189,98 180,103 171,108 163,113"]; 22 | /* ggt -- Conway [pos="76,199 74,212 72,225 69,237"]; */ 23 | } 24 | -------------------------------------------------------------------------------- /test/graphs/dfa.dot: -------------------------------------------------------------------------------- 1 | digraph g { 2 | "start" [ label = "MWGC-" ]; 3 | "n1" [ label = "WC-MG" ]; 4 | "n2" [ label = "MWC-G" ]; 5 | "n3" [ label = "C-MWG" ]; 6 | "n4" [ label = "W-MGC" ]; 7 | "n5" [ label = "MGC-W" ]; 8 | "n6" [ label = "MWG-C" ]; 9 | "n7" [ label = "G-MWC" ]; 10 | "n8" [ label = "MG-WC" ]; 11 | "n9" [ label = "-MWGC" ]; 12 | "start" -> "n1" [ label = "g" ]; 13 | "n1" -> "start" [ label = "g" ]; 14 | subgraph l { rank = same; "n3" "n4" } 15 | subgraph r { rank = same; "n5" "n6" } 16 | "n1" -> "n2" [ label = "m" ]; 17 | "n2" -> "n1" [ label = "m" ]; 18 | "n2" -> "n3" [ label = "w" ]; 19 | "n3" -> "n2" [ label = "w" ]; 20 | "n2" -> "n4" [ label = "c" ]; 21 | "n4" -> "n2" [ label = "c" ]; 22 | "n3" -> "n5" [ label = "g" ]; 23 | "n5" -> "n3" [ label = "g" ]; 24 | "n4" -> "n6" [ label = "g" ]; 25 | "n6" -> "n4" [ label = "g" ]; 26 | "n5" -> "n7" [ label = "c" ]; 27 | "n7" -> "n5" [ label = "c" ]; 28 | "n6" -> "n7" [ label = "w" ]; 29 | "n7" -> "n6" [ label = "w" ]; 30 | "n7" -> "n8" [ label = "m" ]; 31 | "n8" -> "n7" [ label = "m" ]; 32 | "n8" -> "n9" [ label = "g" ]; 33 | "n9" -> "n8" [ label = "g" ]; 34 | } 35 | -------------------------------------------------------------------------------- /test/graphs/dfd.ps: -------------------------------------------------------------------------------- 1 | /xdef {exch def} bind def 2 | /DFDbox { 3 | 10 dict begin 4 | /fflag xdef 5 | /sides xdef 6 | dup 7 | aload pop 8 | % draw the sides 9 | newpath 10 | moveto 11 | 1 1 sides { 12 | 2 mod 0 ne 13 | {moveto} % even sides 14 | {lineto currentpoint stroke moveto} % odd sides 15 | ifelse 16 | } for 17 | fflag % if shape is filled 18 | { 19 | aload pop 20 | newpath 21 | moveto 22 | /y1 xdef 23 | /x1 xdef 24 | lineto stroke newpath 25 | x1 y1 moveto lineto stroke 26 | pop pop 27 | } 28 | {pop} 29 | ifelse 30 | end 31 | } bind def 32 | -------------------------------------------------------------------------------- /test/graphs/dir.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | 3 | a -> b 4 | a -> c [dir=forward] 5 | a -> d [dir=back] 6 | a -> e [dir=both] 7 | a -> f [dir=none] 8 | } 9 | -------------------------------------------------------------------------------- /test/graphs/dpd.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | Marden--ldt; 3 | Marden--kg; 4 | Marden--hg; 5 | Cannon--ldt; 6 | Cannon--kg; 7 | Cannon--ggt; 8 | Epstein--kg; 9 | Epstein--ldt; 10 | Epstein--ggt; 11 | Epstein--hg; 12 | Conway--ggt; 13 | Conway--kt; 14 | Conway--hg; 15 | Conway--lat; 16 | Conway--vd; 17 | Taylor--crys; 18 | Taylor--vd; 19 | Taylor--gcv; 20 | Taylor--fd; 21 | Almgren--crys; 22 | Almgren--vd; 23 | Almgren--gcv; 24 | Almgren--fd; 25 | Freedman--gcv; 26 | Freedman--ldt; 27 | Freedman--ds; 28 | Milnor--ldt; 29 | Milnor--cd; 30 | Milnor--ds; 31 | Milnor--hg; 32 | Milnor--kt; 33 | Douady--cd; 34 | Douady--ds; 35 | Douady--kg; 36 | Hubard--ds; 37 | Hubard--cd; 38 | Hubard--kg; 39 | Hubard--fg; 40 | Mandelbrot--cd; 41 | Mandelbrot--fg; 42 | Mandelbrot--kg; 43 | Wilks--sg; 44 | Wilks--gv; 45 | Wilks--cd; 46 | Wilks--cg; 47 | Dobkin--gv; 48 | Dobkin--vd; 49 | Dobkin--cg; 50 | Chazelle--cg; 51 | Chazelle--gv; 52 | Chazelle--vd; 53 | Peskin--fd; 54 | Peskin--gcv; 55 | Peskin--gv; 56 | Tarjan--cg; 57 | Tarjan--hg; 58 | Mumford--kg; 59 | Mumford--cg; 60 | Mumford--cv; 61 | Mumford--gcv; 62 | Mumford--crys; 63 | Thurston--ggt; 64 | Thurston--vd; 65 | Thurston--cg; 66 | Thurston--gv; 67 | Thurston--kg; 68 | Thurston--cd; 69 | Thurston--ldt; 70 | Thurston--kt; 71 | ldt--ds; 72 | ldt--ggt; 73 | ldt--hg; 74 | ldt--kt; 75 | ldt--cd; 76 | ds--ggt; 77 | ds--cd; 78 | ds--fg; 79 | ds--sg; 80 | kt--hg; 81 | kt--kg; 82 | cd--fg; 83 | cd--kg; 84 | fg--kg; 85 | fg--sg; 86 | ggt--lat; 87 | ggt--hg; 88 | hg--lat; 89 | hg--vd; 90 | hg--cg; 91 | hg--kg; 92 | kg--vd; 93 | sg--dv; 94 | sg--gv; 95 | sg--cv; 96 | lat--crys; 97 | lat--vd; 98 | vd--crys; 99 | vd--gcv; 100 | vd--cv; 101 | cv--vd; 102 | cv--gcv; 103 | cv--cg; 104 | cv--gv; 105 | crys--fd; 106 | crys--gcv; 107 | gcv--fd; 108 | gcv--cg; 109 | cg--fd; 110 | } 111 | -------------------------------------------------------------------------------- /test/graphs/edgeclip.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | ab -> cd 3 | ab -> CD [tailclip=false] 4 | AB -> CD [headclip=false] 5 | AB -> cd [tailclip=false, headclip=false] 6 | } 7 | -------------------------------------------------------------------------------- /test/graphs/fig6.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | size = "8,8"; 3 | {rank=min S8 S24 S1 S35 S30} 4 | {rank=max T8 T24 T1 T35 T30} 5 | S8 -> 9; 6 | S24 -> 27; 7 | S24 -> 25; 8 | S1 -> 10; 9 | S1 -> 2; 10 | S35 -> 36; 11 | S35 -> 43; 12 | S30 -> 31; 13 | S30 -> 33; 14 | 9 -> 42; 15 | 9 -> T1; 16 | 25 -> T1; 17 | 25 -> 26; 18 | 27 -> T24; 19 | 2 -> 3; 20 | 2 -> 16; 21 | 2 -> 17; 22 | 2 -> T1; 23 | 2 -> 18; 24 | 10 -> 11; 25 | 10 -> 14; 26 | 10 -> T1; 27 | 10 -> 13; 28 | 10 -> 12; 29 | 31 -> T1; 30 | 31 -> 32; 31 | 33 -> T30; 32 | 33 -> 34; 33 | 42 -> 4; 34 | 26 -> 4; 35 | 3 -> 4; 36 | 16 -> 15; 37 | 17 -> 19; 38 | 18 -> 29; 39 | 11 -> 4; 40 | 14 -> 15; 41 | 37 -> 39; 42 | 37 -> 41; 43 | 37 -> 38; 44 | 37 -> 40; 45 | 13 -> 19; 46 | 12 -> 29; 47 | 43 -> 38; 48 | 43 -> 40; 49 | 36 -> 19; 50 | 32 -> 23; 51 | 34 -> 29; 52 | 39 -> 15; 53 | 41 -> 29; 54 | 38 -> 4; 55 | 40 -> 19; 56 | 4 -> 5; 57 | 19 -> 21; 58 | 19 -> 20; 59 | 19 -> 28; 60 | 5 -> 6; 61 | 5 -> T35; 62 | 5 -> 23; 63 | 21 -> 22; 64 | 20 -> 15; 65 | 28 -> 29; 66 | 6 -> 7; 67 | 15 -> T1; 68 | 22 -> 23; 69 | 22 -> T35; 70 | 29 -> T30; 71 | 7 -> T8; 72 | 23 -> T24; 73 | 23 -> T1; 74 | } 75 | -------------------------------------------------------------------------------- /test/graphs/fsm.dot: -------------------------------------------------------------------------------- 1 | digraph finite_state_machine { 2 | 3 | node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8; 4 | node [shape = circle]; 5 | rankdir=LR; 6 | LR_0 -> LR_2 [ label = "SS(B)" ]; 7 | LR_0 -> LR_1 [ label = "SS(S)" ]; 8 | LR_1 -> LR_3 [ label = "S($end)" ]; 9 | LR_2 -> LR_6 [ label = "SS(b)" ]; 10 | LR_2 -> LR_5 [ label = "SS(a)" ]; 11 | LR_2 -> LR_4 [ label = "S(A)" ]; 12 | LR_5 -> LR_7 [ label = "S(b)" ]; 13 | LR_5 -> LR_5 [ label = "S(a)" ]; 14 | LR_6 -> LR_6 [ label = "S(b)" ]; 15 | LR_6 -> LR_5 [ label = "S(a)" ]; 16 | LR_7 -> LR_8 [ label = "S(b)" ]; 17 | LR_7 -> LR_5 [ label = "S(a)" ]; 18 | LR_8 -> LR_6 [ label = "S(b)" ]; 19 | LR_8 -> LR_5 [ label = "S(a)" ]; 20 | } 21 | -------------------------------------------------------------------------------- /test/graphs/grammar.dot: -------------------------------------------------------------------------------- 1 | digraph L0 { 2 | size = "8,8"; 3 | ordering=out; 4 | node [shape = box]; 5 | 6 | n0 [label="E"]; 7 | n1 [label="T"]; 8 | n2 [label="F"]; 9 | n3 [label="IDENT : a "]; 10 | n4 [label="+"]; 11 | n5 [label="T"]; 12 | n6 [label="F"]; 13 | n7 [label="("]; 14 | n8 [label="E"]; 15 | n9 [label="T"]; 16 | n10 [label="F"]; 17 | n11 [label="IDENT : b "]; 18 | n12 [label="*"]; 19 | n13 [label="F"]; 20 | n14 [label="IDENT : c "]; 21 | n15 [label=")"]; 22 | n16 [label="*"]; 23 | n17 [label="F"]; 24 | n18 [label="("]; 25 | n19 [label="E"]; 26 | n20 [label="T"]; 27 | n21 [label="F"]; 28 | n22 [label="IDENT : d "]; 29 | n23 [label="*"]; 30 | n24 [label="F"]; 31 | n25 [label="IDENT : e "]; 32 | n26 [label="+"]; 33 | n27 [label="T"]; 34 | n28 [label="F"]; 35 | n29 [label="("]; 36 | n30 [label="E"]; 37 | n31 [label="T"]; 38 | n32 [label="F"]; 39 | n33 [label="IDENT : a "]; 40 | n34 [label="*"]; 41 | n35 [label="F"]; 42 | n36 [label="IDENT : b "]; 43 | n37 [label=")"]; 44 | n38 [label=")"]; 45 | n39 [label="+"]; 46 | n40 [label="T"]; 47 | n41 [label="F"]; 48 | n42 [label="IDENT : q "]; 49 | n0 -> { n1 n4 n5 n39 n40 }; 50 | n1 -> n2 ; 51 | n2 -> n3 ; 52 | n5 -> { n6 n16 n17 }; 53 | n6 -> { n7 n8 n15 }; 54 | n8 -> n9 ; 55 | n9 -> { n10 n12 n13 }; 56 | n10 -> n11 ; 57 | n13 -> n14 ; 58 | n17 -> { n18 n19 n38 }; 59 | n19 -> { n20 n26 n27 }; 60 | n20 -> { n21 n23 n24 }; 61 | n21 -> n22 ; 62 | n24 -> n25 ; 63 | n27 -> n28 ; 64 | n28 -> { n29 n30 n37 }; 65 | n30 -> n31 ; 66 | n31 -> { n32 n34 n35 }; 67 | n32 -> n33 ; 68 | n35 -> n36 ; 69 | n40 -> n41 ; 70 | n41 -> n42 ; 71 | } 72 | -------------------------------------------------------------------------------- /test/graphs/hashtable.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | nodesep=.05; 3 | rankdir=LR; 4 | node [shape=record,width=.1,height=.1]; 5 | 6 | node0 [label = " | | | | | | | ",height=2.0]; 7 | node [width = 1.5]; 8 | node1 [label = "{ n14 | 719 |

}"]; 9 | node2 [label = "{ a1 | 805 |

}"]; 10 | node3 [label = "{ i9 | 718 |

}"]; 11 | node4 [label = "{ e5 | 989 |

}"]; 12 | node5 [label = "{ t20 | 959 |

}"] ; 13 | node6 [label = "{ o15 | 794 |

}"] ; 14 | node7 [label = "{ s19 | 659 |

}"] ; 15 | 16 | node0:f0 -> node1:n; 17 | node0:f1 -> node2:n; 18 | node0:f2 -> node3:n; 19 | node0:f5 -> node4:n; 20 | node0:f6 -> node5:n; 21 | node2:p -> node6:n; 22 | node4:p -> node7:n; 23 | } 24 | -------------------------------------------------------------------------------- /test/graphs/honda-tokoro.dot: -------------------------------------------------------------------------------- 1 | digraph "Honda-Tokoro" { 2 | rankdir="LR" ranksep="0.2" edge[labelfontsize="8" fontsize="8" labeldistance="0.8" arrowsize="0.9" labelangle="-30" dir="none"] nodesep="0.2" node[width="0" height="0" fontsize="10"] 3 | 4 | /*Net net00*/ 5 | 6 | n000 [label="z"] 7 | n001->n000 [headlabel=":s:" arrowhead="invdot"] 8 | n001 [label="m"] 9 | n002->n001 [samehead="m002" headlabel=":r:" samearrowhead="1" arrowhead="invdot" arrowtail="inv"] 10 | n002 [label="p1"] 11 | n003->n002 [headlabel=":s:" arrowhead="dot"] 12 | n003 [label="b"] 13 | n004->n003 14 | n004 [label="x1"] 15 | n022->n004 [weight="0" headlabel=":s/r:" fontsize="8" arrowhead="invdot"] 16 | n003->n002 [samehead="m000" fontsize="8" samearrowhead="1" arrowtail="inv"] 17 | n005->n002 [samehead="m000" headlabel=":u:" fontsize="8" samearrowhead="1" arrowhead="dot" arrowtail="inv"] 18 | n005->n001 [samehead="m002" samearrowhead="1"] 19 | n005 [label="b"] 20 | n006->n005 [arrowtail="inv"] 21 | n006 [label="p2"] 22 | n007->n006 [headlabel=":s:" arrowhead="dot"] 23 | n007 [label="b"] 24 | n008->n007 25 | n008 [label="x2"] 26 | n022->n008 [weight="0" headlabel=":s/r:" fontsize="8" arrowhead="invdot"] 27 | n007->n006 [samehead="m001" headlabel=":u:" fontsize="8" samearrowhead="1" arrowhead="dot" arrowtail="inv"] 28 | n009->n006 [samehead="m001" samearrowhead="1" arrowtail="inv"] 29 | n009 [label="b2"] 30 | n022->n009 [fontsize="8"] 31 | n022->n009 [fontsize="8"] 32 | n010->n006 [samehead="m001" samearrowhead="1" arrowtail="inv"] 33 | n010 [label="b2"] 34 | n022->n010 [fontsize="8"] 35 | n022->n010 [fontsize="8"] 36 | n011->n000 [headlabel=":r:" arrowhead="invdot" arrowtail="inv"] 37 | n011 [label="n"] 38 | n012->n011 [samehead="m005" headlabel=":s:" samearrowhead="1" arrowhead="dot"] 39 | n012 [label="b"] 40 | n013->n012 41 | n013 [label="c1"] 42 | n014->n013 [headlabel=":r:" arrowhead="invdot"] 43 | n014 [label="b"] 44 | n015->n014 [arrowtail="inv"] 45 | n015 [label="y1"] 46 | n023->n015 [weight="0" headlabel=":s/r:" fontsize="8" arrowhead="dot"] 47 | n016->n015 [samehead="m003" headlabel=":u:" fontsize="8" samearrowhead="1" arrowhead="dot" arrowtail="inv"] 48 | n018->n015 [samehead="m003" fontsize="8" samearrowhead="1" arrowtail="inv"] 49 | n014->n011 [samehead="m006" headlabel=":u:" fontsize="8" samearrowhead="1" arrowhead="dot" arrowtail="inv"] 50 | n012->n011 [samehead="m006" fontsize="8" samearrowhead="1" arrowtail="inv"] 51 | n016->n011 [samehead="m005" samearrowhead="1"] 52 | n016 [label="b"] 53 | n017->n016 54 | n017 [label="c2"] 55 | n018->n017 [headlabel=":r:" arrowhead="invdot"] 56 | n018 [label="b"] 57 | n019->n018 [arrowtail="inv"] 58 | n019 [label="y2"] 59 | n023->n019 [weight="0" headlabel=":s/r:" fontsize="8" arrowhead="dot"] 60 | n020->n019 [samehead="m004" headlabel=":u:" samearrowhead="1" arrowhead="dot" arrowtail="inv"] 61 | n020 [label="b2"] 62 | n023->n020 [fontsize="8"] 63 | n023->n020 [fontsize="8"] 64 | n021->n019 [samehead="m004" samearrowhead="1" arrowtail="inv"] 65 | n021 [label="b2"] 66 | n023->n021 [fontsize="8"] 67 | n023->n021 [fontsize="8"] 68 | n022 [width="0.5" label="[P]" shape="box" style="dashed" height="0.35"] 69 | n023 [width="0.5" label="[Q]" shape="box" style="dashed" height="0.35"] 70 | {/*L=x1*/rank=same n004 n015} 71 | {/*L=p1*/rank=same n002 n013} 72 | {/*L=b*/rank=same n009 n010 n020 n021} 73 | {/*L=x2*/rank=same n008 n019} 74 | {/*L=p2*/rank=same n006 n017} 75 | {/*L=m*/rank=same n001 n011} 76 | } 77 | -------------------------------------------------------------------------------- /test/graphs/html.dot: -------------------------------------------------------------------------------- 1 | digraph structs { 2 | node [shape=plaintext] 3 | struct1 [label=< 4 | 5 | 6 |
leftmid dleright
>]; 7 | struct2 [label=< 8 | 9 | 10 |
onetwo
>]; 11 | struct3 [label=< 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
hello
world
bgh
cde
f
>]; 26 | struct1:f1 -> struct2:f0; 27 | struct1:f2 -> struct3:here; 28 | } 29 | 30 | -------------------------------------------------------------------------------- /test/graphs/html2.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir=LR 3 | node [shape=plaintext] 4 | a [ 5 | label=< 6 | 7 | 8 | 9 |
class
qualifier
> 10 | ] 11 | b [shape=ellipse style=filled 12 | label=< 13 | 14 | 15 | 17 | 23 | 24 | 25 | 26 |
elephanttwo
18 | 19 | 20 | 21 | 22 |
corn
c
f
penguin
4
> 27 | ] 28 | c [ 29 | label=line 2
line 3
> 30 | ] 31 | 32 | subgraph { rank=same b c } 33 | a:here -> b:there [arrowtail = diamond] 34 | c -> b 35 | d [shape=triangle] 36 | d -> c [label=< 37 | 38 | 39 | 40 | 41 | 42 |
Edge labels
also
> 43 | ] 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /test/graphs/in.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | ordering=in 3 | 1 -> 2 4 | 4 -> 3 5 | 1 -> 3 6 | } 7 | -------------------------------------------------------------------------------- /test/graphs/jcctree.dot: -------------------------------------------------------------------------------- 1 | digraph "tree" { 2 | // The problem disappeared when I removed the "ELEM3 -> ID5;" line! 3 | //size="4,5"; 4 | ordering=out; 5 | node [shape=plaintext]; 6 | SPEC -> DEF2; 7 | SPEC -> DEF1; 8 | DEF1 -> ID1; 9 | DEF1 -> SET1; 10 | DEF1 -> SC1; 11 | DEF2 -> ID2; 12 | DEF2 -> SET2; 13 | DEF2 -> SC2; 14 | SET1 -> OPEN1; 15 | SET1 -> ELEM1; 16 | SET1 -> SC3; 17 | SET1 -> ELEM2; 18 | SET1 -> CLOSE1; 19 | ELEM1 -> ID3; 20 | SET2 -> OPEN2; 21 | SET2 -> ELEM3; 22 | SET2 -> CLOSE2; 23 | ELEM2 -> ID4; 24 | ELEM3 -> ID5; 25 | DEF1 [label=DEF]; 26 | DEF2 [label=DEF]; 27 | SET1 [label=SET]; 28 | SC1 [label=";"]; 29 | SC3 [label=";"]; 30 | SET2 [label=SET]; 31 | SC2 [label=";"]; 32 | OPEN1 [label="{"]; 33 | OPEN2 [label="{"]; 34 | CLOSE1 [label="}"]; 35 | CLOSE2 [label="}"]; 36 | ELEM1 [label=ELEMENT]; 37 | ELEM2 [label=ELEMENT]; 38 | ELEM3 [label=ELEMENT]; 39 | ID1 [label=cities]; 40 | ID2 [label=insects]; 41 | ID3 [label=andover]; 42 | ID4 [label=boston]; 43 | ID5 [label=fly]; 44 | } 45 | -------------------------------------------------------------------------------- /test/graphs/jsort.dot: -------------------------------------------------------------------------------- 1 | digraph prof { 2 | size="6,4"; ratio = fill; 3 | node [style=filled]; 4 | start -> main [color="0.002 0.999 0.999"]; 5 | start -> on_exit [color="0.649 0.701 0.701"]; 6 | main -> sort [color="0.348 0.839 0.839"]; 7 | main -> merge [color="0.515 0.762 0.762"]; 8 | main -> term [color="0.647 0.702 0.702"]; 9 | main -> signal [color="0.650 0.700 0.700"]; 10 | main -> sbrk [color="0.650 0.700 0.700"]; 11 | main -> unlink [color="0.650 0.700 0.700"]; 12 | main -> newfile [color="0.650 0.700 0.700"]; 13 | main -> fclose [color="0.650 0.700 0.700"]; 14 | main -> close [color="0.650 0.700 0.700"]; 15 | main -> brk [color="0.650 0.700 0.700"]; 16 | main -> setbuf [color="0.650 0.700 0.700"]; 17 | main -> copyproto [color="0.650 0.700 0.700"]; 18 | main -> initree [color="0.650 0.700 0.700"]; 19 | main -> safeoutfil [color="0.650 0.700 0.700"]; 20 | main -> getpid [color="0.650 0.700 0.700"]; 21 | main -> sprintf [color="0.650 0.700 0.700"]; 22 | main -> creat [color="0.650 0.700 0.700"]; 23 | main -> rem [color="0.650 0.700 0.700"]; 24 | main -> oldfile [color="0.650 0.700 0.700"]; 25 | sort -> msort [color="0.619 0.714 0.714"]; 26 | sort -> filbuf [color="0.650 0.700 0.700"]; 27 | sort -> newfile [color="0.650 0.700 0.700"]; 28 | sort -> fclose [color="0.650 0.700 0.700"]; 29 | sort -> setbuf [color="0.650 0.700 0.700"]; 30 | sort -> setfil [color="0.650 0.700 0.700"]; 31 | msort -> qsort [color="0.650 0.700 0.700"]; 32 | msort -> insert [color="0.650 0.700 0.700"]; 33 | msort -> wline [color="0.650 0.700 0.700"]; 34 | msort -> div [color="0.650 0.700 0.700"]; 35 | msort -> cmpsave [color="0.650 0.700 0.700"]; 36 | merge -> insert [color="0.650 0.700 0.700"]; 37 | merge -> rline [color="0.650 0.700 0.700"]; 38 | merge -> wline [color="0.650 0.700 0.700"]; 39 | merge -> unlink [color="0.650 0.700 0.700"]; 40 | merge -> fopen [color="0.650 0.700 0.700"]; 41 | merge -> fclose [color="0.650 0.700 0.700"]; 42 | merge -> setfil [color="0.650 0.700 0.700"]; 43 | merge -> mul [color="0.650 0.700 0.700"]; 44 | merge -> setbuf [color="0.650 0.700 0.700"]; 45 | merge -> cmpsave [color="0.650 0.700 0.700"]; 46 | insert -> cmpa [color="0.650 0.700 0.700"]; 47 | wline -> flsbuf [color="0.649 0.700 0.700"]; 48 | qsort -> cmpa [color="0.650 0.700 0.700"]; 49 | rline -> filbuf [color="0.649 0.700 0.700"]; 50 | xflsbuf -> write [color="0.650 0.700 0.700"]; 51 | flsbuf -> xflsbuf [color="0.649 0.700 0.700"]; 52 | filbuf -> read [color="0.650 0.700 0.700"]; 53 | term -> unlink [color="0.650 0.700 0.700"]; 54 | term -> signal [color="0.650 0.700 0.700"]; 55 | term -> setfil [color="0.650 0.700 0.700"]; 56 | term -> exit [color="0.650 0.700 0.700"]; 57 | endopen -> open [color="0.650 0.700 0.700"]; 58 | fopen -> endopen [color="0.639 0.705 0.705"]; 59 | fopen -> findiop [color="0.650 0.700 0.700"]; 60 | newfile -> fopen [color="0.634 0.707 0.707"]; 61 | newfile -> setfil [color="0.650 0.700 0.700"]; 62 | fclose -> fflush [color="0.642 0.704 0.704"]; 63 | fclose -> close [color="0.650 0.700 0.700"]; 64 | fflush -> xflsbuf [color="0.635 0.707 0.707"]; 65 | malloc -> morecore [color="0.325 0.850 0.850"]; 66 | malloc -> demote [color="0.650 0.700 0.700"]; 67 | morecore -> sbrk [color="0.650 0.700 0.700"]; 68 | morecore -> getfreehdr [color="0.650 0.700 0.700"]; 69 | morecore -> free [color="0.650 0.700 0.700"]; 70 | morecore -> getpagesize [color="0.650 0.700 0.700"]; 71 | morecore -> putfreehdr [color="0.650 0.700 0.700"]; 72 | morecore -> udiv [color="0.650 0.700 0.700"]; 73 | morecore -> umul [color="0.650 0.700 0.700"]; 74 | on_exit -> malloc [color="0.325 0.850 0.850"]; 75 | signal -> sigvec [color="0.650 0.700 0.700"]; 76 | moncontrol -> profil [color="0.650 0.700 0.700"]; 77 | getfreehdr -> sbrk [color="0.650 0.700 0.700"]; 78 | free -> insert [color="0.650 0.700 0.700"]; 79 | insert -> getfreehdr [color="0.650 0.700 0.700"]; 80 | setfil -> div [color="0.650 0.700 0.700"]; 81 | setfil -> rem [color="0.650 0.700 0.700"]; 82 | sigvec -> sigblock [color="0.650 0.700 0.700"]; 83 | sigvec -> sigsetmask [color="0.650 0.700 0.700"]; 84 | doprnt -> urem [color="0.650 0.700 0.700"]; 85 | doprnt -> udiv [color="0.650 0.700 0.700"]; 86 | doprnt -> strlen [color="0.650 0.700 0.700"]; 87 | doprnt -> localeconv [color="0.650 0.700 0.700"]; 88 | sprintf -> doprnt [color="0.650 0.700 0.700"]; 89 | cmpa [color="0.000 1.000 1.000"]; 90 | wline [color="0.201 0.753 1.000"]; 91 | insert [color="0.305 0.625 1.000"]; 92 | rline [color="0.355 0.563 1.000"]; 93 | sort [color="0.408 0.498 1.000"]; 94 | qsort [color="0.449 0.447 1.000"]; 95 | write [color="0.499 0.386 1.000"]; 96 | read [color="0.578 0.289 1.000"]; 97 | msort [color="0.590 0.273 1.000"]; 98 | merge [color="0.603 0.258 1.000"]; 99 | unlink [color="0.628 0.227 1.000"]; 100 | filbuf [color="0.641 0.212 1.000"]; 101 | open [color="0.641 0.212 1.000"]; 102 | sbrk [color="0.647 0.204 1.000"]; 103 | signal [color="0.647 0.204 1.000"]; 104 | moncontrol [color="0.647 0.204 1.000"]; 105 | xflsbuf [color="0.650 0.200 1.000"]; 106 | flsbuf [color="0.650 0.200 1.000"]; 107 | div [color="0.650 0.200 1.000"]; 108 | cmpsave [color="0.650 0.200 1.000"]; 109 | rem [color="0.650 0.200 1.000"]; 110 | setfil [color="0.650 0.200 1.000"]; 111 | close [color="0.650 0.200 1.000"]; 112 | fclose [color="0.650 0.200 1.000"]; 113 | fflush [color="0.650 0.200 1.000"]; 114 | setbuf [color="0.650 0.200 1.000"]; 115 | endopen [color="0.650 0.200 1.000"]; 116 | findiop [color="0.650 0.200 1.000"]; 117 | fopen [color="0.650 0.200 1.000"]; 118 | mul [color="0.650 0.200 1.000"]; 119 | newfile [color="0.650 0.200 1.000"]; 120 | sigblock [color="0.650 0.200 1.000"]; 121 | sigsetmask [color="0.650 0.200 1.000"]; 122 | sigvec [color="0.650 0.200 1.000"]; 123 | udiv [color="0.650 0.200 1.000"]; 124 | urem [color="0.650 0.200 1.000"]; 125 | brk [color="0.650 0.200 1.000"]; 126 | getfreehdr [color="0.650 0.200 1.000"]; 127 | strlen [color="0.650 0.200 1.000"]; 128 | umul [color="0.650 0.200 1.000"]; 129 | doprnt [color="0.650 0.200 1.000"]; 130 | copyproto [color="0.650 0.200 1.000"]; 131 | creat [color="0.650 0.200 1.000"]; 132 | demote [color="0.650 0.200 1.000"]; 133 | exit [color="0.650 0.200 1.000"]; 134 | free [color="0.650 0.200 1.000"]; 135 | getpagesize [color="0.650 0.200 1.000"]; 136 | getpid [color="0.650 0.200 1.000"]; 137 | initree [color="0.650 0.200 1.000"]; 138 | insert [color="0.650 0.200 1.000"]; 139 | localeconv [color="0.650 0.200 1.000"]; 140 | main [color="0.650 0.200 1.000"]; 141 | malloc [color="0.650 0.200 1.000"]; 142 | morecore [color="0.650 0.200 1.000"]; 143 | oldfile [color="0.650 0.200 1.000"]; 144 | on_exit [color="0.650 0.200 1.000"]; 145 | profil [color="0.650 0.200 1.000"]; 146 | putfreehdr [color="0.650 0.200 1.000"]; 147 | safeoutfil [color="0.650 0.200 1.000"]; 148 | sprintf [color="0.650 0.200 1.000"]; 149 | term [color="0.650 0.200 1.000"]; 150 | } 151 | -------------------------------------------------------------------------------- /test/graphs/labelclust-fbc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom"; 10 | labeljust="center"; 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelclust-fbd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-fbl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom"; 10 | labeljust="left"; 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelclust-fbr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom"; 10 | labeljust="right"; 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelclust-fdc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labeljust="center"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-fdd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | } 10 | subgraph cluster1 { 11 | c; 12 | d; 13 | c->d; 14 | label = "cluster1"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /test/graphs/labelclust-fdl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labeljust="left"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-fdr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labeljust="right"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ftc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="top"; 10 | labeljust="center"; 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ftd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="top"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ftl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="top"; 10 | labeljust="left"; 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ftr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="top"; 10 | labeljust="right"; 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelclust-nbc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="bottom"; 9 | labeljust="center"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-nbd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="bottom"; 9 | } 10 | subgraph cluster1 { 11 | c; 12 | d; 13 | c->d; 14 | label = "cluster1"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /test/graphs/labelclust-nbl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="bottom"; 9 | labeljust="left"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-nbr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="bottom"; 9 | labeljust="right"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ndc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labeljust="center"; 9 | } 10 | subgraph cluster1 { 11 | c; 12 | d; 13 | c->d; 14 | label = "cluster1"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ndd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | } 9 | subgraph cluster1 { 10 | c; 11 | d; 12 | c->d; 13 | label = "cluster1"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ndl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labeljust="left"; 9 | } 10 | subgraph cluster1 { 11 | c; 12 | d; 13 | c->d; 14 | label = "cluster1"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ndr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labeljust="right"; 9 | } 10 | subgraph cluster1 { 11 | c; 12 | d; 13 | c->d; 14 | label = "cluster1"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ntc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="top"; 9 | labeljust="center"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ntd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="top"; 9 | } 10 | subgraph cluster1 { 11 | c; 12 | d; 13 | c->d; 14 | label = "cluster1"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ntl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="top"; 9 | labeljust="left"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelclust-ntr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="top"; 9 | labeljust="right"; 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelroot-fbc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labelloc="bottom"; 5 | labeljust="center"; 6 | subgraph cluster0 { 7 | a; 8 | b; 9 | a->b; 10 | label = "cluster0"; 11 | labelloc="bottom" 12 | } 13 | subgraph cluster1 { 14 | c; 15 | d; 16 | c->d; 17 | label = "cluster1"; 18 | labelloc="top" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/graphs/labelroot-fbd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labelloc="bottom"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-fbl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labelloc="bottom"; 5 | labeljust="left"; 6 | subgraph cluster0 { 7 | a; 8 | b; 9 | a->b; 10 | label = "cluster0"; 11 | labelloc="bottom" 12 | } 13 | subgraph cluster1 { 14 | c; 15 | d; 16 | c->d; 17 | label = "cluster1"; 18 | labelloc="top" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/graphs/labelroot-fbr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labelloc="bottom"; 5 | labeljust="right"; 6 | subgraph cluster0 { 7 | a; 8 | b; 9 | a->b; 10 | label = "cluster0"; 11 | labelloc="bottom" 12 | } 13 | subgraph cluster1 { 14 | c; 15 | d; 16 | c->d; 17 | label = "cluster1"; 18 | labelloc="top" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/graphs/labelroot-fdc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labeljust="center"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-fdd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom" 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | labelloc="top" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelroot-fdl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labeljust="left"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-fdr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labeljust="right"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ftc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labelloc="top"; 5 | labeljust="center"; 6 | subgraph cluster0 { 7 | a; 8 | b; 9 | a->b; 10 | label = "cluster0"; 11 | labelloc="bottom" 12 | } 13 | subgraph cluster1 { 14 | c; 15 | d; 16 | c->d; 17 | label = "cluster1"; 18 | labelloc="top" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ftd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labelloc="top"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ftl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labelloc="top"; 5 | labeljust="left"; 6 | subgraph cluster0 { 7 | a; 8 | b; 9 | a->b; 10 | label = "cluster0"; 11 | labelloc="bottom" 12 | } 13 | subgraph cluster1 { 14 | c; 15 | d; 16 | c->d; 17 | label = "cluster1"; 18 | labelloc="top" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ftr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir="LR"; 3 | label = "label demo"; 4 | labelloc="top"; 5 | labeljust="right"; 6 | subgraph cluster0 { 7 | a; 8 | b; 9 | a->b; 10 | label = "cluster0"; 11 | labelloc="bottom" 12 | } 13 | subgraph cluster1 { 14 | c; 15 | d; 16 | c->d; 17 | label = "cluster1"; 18 | labelloc="top" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/graphs/labelroot-nbc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labelloc="bottom"; 4 | labeljust="center"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-nbd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labelloc="bottom"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom" 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | labelloc="top" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelroot-nbl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labelloc="bottom"; 4 | labeljust="left"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-nbr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labelloc="bottom"; 4 | labeljust="right"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ndc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labeljust="center"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom" 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | labelloc="top" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ndd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="bottom" 9 | } 10 | subgraph cluster1 { 11 | c; 12 | d; 13 | c->d; 14 | label = "cluster1"; 15 | labelloc="top" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ndl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labeljust="left"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom" 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | labelloc="top" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ndr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labeljust="right"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom" 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | labelloc="top" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ntc.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labelloc="top"; 4 | labeljust="center"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ntd.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labelloc="top"; 4 | subgraph cluster0 { 5 | a; 6 | b; 7 | a->b; 8 | label = "cluster0"; 9 | labelloc="bottom" 10 | } 11 | subgraph cluster1 { 12 | c; 13 | d; 14 | c->d; 15 | label = "cluster1"; 16 | labelloc="top" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ntl.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labelloc="top"; 4 | labeljust="left"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/labelroot-ntr.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | labelloc="top"; 4 | labeljust="right"; 5 | subgraph cluster0 { 6 | a; 7 | b; 8 | a->b; 9 | label = "cluster0"; 10 | labelloc="bottom" 11 | } 12 | subgraph cluster1 { 13 | c; 14 | d; 15 | c->d; 16 | label = "cluster1"; 17 | labelloc="top" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/graphs/layer.dot: -------------------------------------------------------------------------------- 1 | 2 | digraph G { 3 | layers="local:pvt:test:new:ofc"; 4 | 5 | node1 [layer="pvt"]; 6 | node2 [layer="all"]; 7 | node3 [layer="pvt:ofc"]; /* pvt, test, new, and ofc */ 8 | node2 -> node3 [layer="pvt:all"]; /* same as pvt:ofc */ 9 | node2 -> node4 [layer=3]; /* same as test */ 10 | } 11 | 12 | -------------------------------------------------------------------------------- /test/graphs/layer2.dot: -------------------------------------------------------------------------------- 1 | 2 | digraph G { 3 | layersep="+" 4 | layers="local+pvt+test+new+ofc"; 5 | 6 | node1 [layer="pvt"]; 7 | node2 [layer="all"]; 8 | node3 [layer="pvt+ofc"]; /* pvt, test, new, and ofc */ 9 | node2 -> node3 [layer="pvt+all"]; /* same as pvt:ofc */ 10 | node2 -> node4 [layer=3]; /* same as test */ 11 | } 12 | 13 | -------------------------------------------------------------------------------- /test/graphs/layers.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | layers="local:pvt:test:new:ofc"; 3 | 4 | node1 [layer="pvt"]; 5 | node2 [layer="all"]; 6 | node3 [layer="pvt:ofc"]; /* pvt, test, new, and ofc */ 7 | node2 -> node3 [layer="pvt:all"]; /* same as pvt:ofc */ 8 | node2 -> node4 [layer=3]; /* same as test */ 9 | } 10 | -------------------------------------------------------------------------------- /test/graphs/ldbxtried.dot: -------------------------------------------------------------------------------- 1 | digraph g { 2 | graph [ 3 | fontsize = "14" 4 | fontname = "Times-Roman" 5 | fontcolor = "black" 6 | color = "black" 7 | ]; 8 | node [ 9 | fontsize = "14" 10 | fontname = "Times-Roman" 11 | fontcolor = "black" 12 | shape = "box" 13 | color = "black" 14 | width = "0.5" 15 | style = "filled" 16 | ]; 17 | edge [ 18 | fontsize = "14" 19 | fontname = "Times-Roman" 20 | fontcolor = "black" 21 | color = "black" 22 | ]; 23 | "n0" [ 24 | label = "18519\n?" 25 | color = "lightblue" 26 | ]; 27 | "n1" [ 28 | label = "4836" 29 | shape = "ellipse" 30 | color = "maroon1" 31 | ]; 32 | "n2" [ 33 | label = "ttyqa" 34 | shape = "ellipse" 35 | color = "maroon1" 36 | ]; 37 | "n448" [ 38 | label = "21079\nlefty" 39 | color = "lightblue" 40 | ]; 41 | "n449" [ 42 | label = "tried.lefty" 43 | shape = "ellipse" 44 | color = "maroon1" 45 | ]; 46 | "n454" [ 47 | fontsize = "7" 48 | label = "bunting\n6000" 49 | shape = "doublecircle" 50 | color = "green" 51 | ]; 52 | "n460" [ 53 | label = "" 54 | shape = "doublecircle" 55 | color = "yellow" 56 | ]; 57 | "n461" [ 58 | label = "" 59 | shape = "doublecircle" 60 | color = "yellow" 61 | ]; 62 | "n462" [ 63 | label = "21084\ntried" 64 | color = "lightblue" 65 | ]; 66 | "n464" [ 67 | label = "21086\nldbx" 68 | color = "lightblue" 69 | ]; 70 | "n466" [ 71 | label = "ldbx" 72 | shape = "ellipse" 73 | color = "maroon1" 74 | ]; 75 | "n468" [ 76 | label = "21087\nlefty" 77 | color = "lightblue" 78 | ]; 79 | "n469" [ 80 | label = "sh21086.1" 81 | shape = "ellipse" 82 | color = "maroon1" 83 | ]; 84 | "n474" [ 85 | fontsize = "7" 86 | label = "bunting\n6000" 87 | shape = "doublecircle" 88 | color = "green" 89 | ]; 90 | "n479" [ 91 | label = "ldbx.lefty" 92 | shape = "ellipse" 93 | color = "maroon1" 94 | ]; 95 | "n482" [ 96 | label = "" 97 | shape = "doublecircle" 98 | color = "yellow" 99 | ]; 100 | "n483" [ 101 | label = "" 102 | shape = "doublecircle" 103 | color = "yellow" 104 | ]; 105 | "n484" [ 106 | label = "21088\ndot" 107 | color = "lightblue" 108 | ]; 109 | "n486" [ 110 | label = "" 111 | shape = "doublecircle" 112 | color = "yellow" 113 | ]; 114 | "n487" [ 115 | label = "" 116 | shape = "doublecircle" 117 | color = "yellow" 118 | ]; 119 | "n488" [ 120 | label = "21089\nxterm" 121 | color = "lightblue" 122 | ]; 123 | "n496" [ 124 | fontsize = "7" 125 | label = "bunting\n6000" 126 | shape = "doublecircle" 127 | color = "green" 128 | ]; 129 | "n500" [ 130 | label = "ptyq2" 131 | shape = "ellipse" 132 | color = "maroon1" 133 | ]; 134 | "n503" [ 135 | label = "21090\nldbxmp" 136 | color = "lightblue" 137 | ]; 138 | "n505" [ 139 | label = "ttyq2" 140 | shape = "ellipse" 141 | color = "maroon1" 142 | ]; 143 | "n512" [ 144 | label = "ptyq5" 145 | shape = "ellipse" 146 | color = "maroon1" 147 | ]; 148 | "n513" [ 149 | label = "ttyq5" 150 | shape = "ellipse" 151 | color = "maroon1" 152 | ]; 153 | "n514" [ 154 | label = "21091\ndbx" 155 | color = "lightblue" 156 | ]; 157 | "n518" [ 158 | label = "tty" 159 | shape = "ellipse" 160 | color = "maroon1" 161 | ]; 162 | "n526" [ 163 | label = "delaunay.c" 164 | shape = "ellipse" 165 | color = "maroon1" 166 | ]; 167 | subgraph "cluster0" { 168 | graph [ 169 | fontsize = "14" 170 | fontname = "Times-Roman" 171 | fontcolor = "black" 172 | label = "toucan" 173 | color = "black" 174 | ]; 175 | node [ 176 | fontsize = "14" 177 | fontname = "Times-Roman" 178 | fontcolor = "black" 179 | shape = "box" 180 | color = "black" 181 | width = "0.5" 182 | style = "filled" 183 | ]; 184 | edge [ 185 | fontsize = "14" 186 | fontname = "Times-Roman" 187 | fontcolor = "black" 188 | color = "black" 189 | ]; 190 | "n0" 191 | "n468" 192 | "n486" 193 | "n460" 194 | "n487" 195 | "n514" 196 | "n461" 197 | "n488" 198 | "n462" 199 | "n464" 200 | "n482" 201 | "n483" 202 | "n448" 203 | "n484" 204 | "n503" 205 | } 206 | "n0" -> "n1" [ 207 | dir = "both" 208 | ]; 209 | "n0" -> "n2" [ 210 | dir = "both" 211 | ]; 212 | "n0" -> "n2" [ 213 | dir = "both" 214 | ]; 215 | "n0" -> "n2" [ 216 | dir = "both" 217 | ]; 218 | "n0" -> "n448" [ 219 | style = "dotted" 220 | ]; 221 | "n448" -> "n2" [ 222 | dir = "both" 223 | ]; 224 | "n448" -> "n2" [ 225 | dir = "both" 226 | ]; 227 | "n448" -> "n2" [ 228 | dir = "both" 229 | ]; 230 | "n448" -> "n449" [ 231 | dir = "back" 232 | ]; 233 | "n448" -> "n454" [ 234 | dir = "both" 235 | ]; 236 | "n448" -> "n460" [ 237 | dir = "back" 238 | ]; 239 | "n448" -> "n461" [ 240 | dir = "forward" 241 | ]; 242 | "n448" -> "n462" [ 243 | style = "dotted" 244 | ]; 245 | "n462" -> "n2" [ 246 | dir = "both" 247 | ]; 248 | "n462" -> "n2" [ 249 | dir = "both" 250 | ]; 251 | "n462" -> "n2" [ 252 | dir = "both" 253 | ]; 254 | "n462" -> "n449" [ 255 | dir = "back" 256 | ]; 257 | "n462" -> "n460" [ 258 | dir = "forward" 259 | ]; 260 | "n462" -> "n461" [ 261 | dir = "back" 262 | ]; 263 | "n462" -> "n460" [ 264 | dir = "forward" 265 | ]; 266 | "n462" -> "n461" [ 267 | dir = "back" 268 | ]; 269 | "n0" -> "n464" [ 270 | style = "dotted" 271 | ]; 272 | "n464" -> "n2" [ 273 | dir = "both" 274 | ]; 275 | "n464" -> "n2" [ 276 | dir = "both" 277 | ]; 278 | "n464" -> "n2" [ 279 | dir = "both" 280 | ]; 281 | "n464" -> "n466" [ 282 | dir = "back" 283 | ]; 284 | "n464" -> "n468" [ 285 | style = "dotted" 286 | ]; 287 | "n468" -> "n2" [ 288 | dir = "both" 289 | ]; 290 | "n468" -> "n2" [ 291 | dir = "both" 292 | ]; 293 | "n468" -> "n469" [ 294 | dir = "back" 295 | ]; 296 | "n468" -> "n474" [ 297 | dir = "both" 298 | ]; 299 | "n468" -> "n479" [ 300 | dir = "back" 301 | ]; 302 | "n468" -> "n482" [ 303 | dir = "back" 304 | ]; 305 | "n468" -> "n483" [ 306 | dir = "forward" 307 | ]; 308 | "n468" -> "n484" [ 309 | style = "dotted" 310 | ]; 311 | "n484" -> "n2" [ 312 | dir = "both" 313 | ]; 314 | "n484" -> "n483" [ 315 | dir = "back" 316 | ]; 317 | "n484" -> "n479" [ 318 | dir = "back" 319 | ]; 320 | "n484" -> "n482" [ 321 | dir = "forward" 322 | ]; 323 | "n468" -> "n486" [ 324 | dir = "back" 325 | ]; 326 | "n468" -> "n487" [ 327 | dir = "forward" 328 | ]; 329 | "n468" -> "n488" [ 330 | style = "dotted" 331 | ]; 332 | "n488" -> "n486" [ 333 | dir = "forward" 334 | ]; 335 | "n488" -> "n2" [ 336 | dir = "both" 337 | ]; 338 | "n488" -> "n487" [ 339 | dir = "back" 340 | ]; 341 | "n488" -> "n469" [ 342 | dir = "back" 343 | ]; 344 | "n488" -> "n2" [ 345 | dir = "both" 346 | ]; 347 | "n488" -> "n479" [ 348 | dir = "back" 349 | ]; 350 | "n488" -> "n496" [ 351 | dir = "both" 352 | ]; 353 | "n488" -> "n500" [ 354 | dir = "both" 355 | ]; 356 | "n488" -> "n503" [ 357 | style = "dotted" 358 | ]; 359 | "n503" -> "n479" [ 360 | dir = "back" 361 | ]; 362 | "n503" -> "n486" [ 363 | dir = "forward" 364 | ]; 365 | "n503" -> "n487" [ 366 | dir = "back" 367 | ]; 368 | "n503" -> "n505" [ 369 | dir = "both" 370 | ]; 371 | "n503" -> "n505" [ 372 | dir = "both" 373 | ]; 374 | "n503" -> "n505" [ 375 | dir = "forward" 376 | ]; 377 | "n503" -> "n512" [ 378 | dir = "both" 379 | ]; 380 | "n503" -> "n514" [ 381 | style = "dotted" 382 | ]; 383 | "n514" -> "n487" [ 384 | dir = "back" 385 | ]; 386 | "n514" -> "n486" [ 387 | dir = "forward" 388 | ]; 389 | "n514" -> "n479" [ 390 | dir = "back" 391 | ]; 392 | "n514" -> "n505" [ 393 | dir = "forward" 394 | ]; 395 | "n503" -> "n486" [ 396 | dir = "forward" 397 | ]; 398 | "n514" -> "n518" [ 399 | dir = "back" 400 | ]; 401 | "n514" -> "n513" [ 402 | dir = "both" 403 | ]; 404 | "n514" -> "n513" [ 405 | dir = "both" 406 | ]; 407 | "n514" -> "n518" [ 408 | dir = "back" 409 | ]; 410 | "n514" -> "n526" [ 411 | dir = "back" 412 | ]; 413 | "n503" -> "n487" [ 414 | dir = "back" 415 | ]; 416 | } 417 | -------------------------------------------------------------------------------- /test/graphs/longflat.dot: -------------------------------------------------------------------------------- 1 | digraph if 2 | { 3 | rankdir=LR; 4 | {rank=same;b;c;} 5 | a->b; 6 | c->b[label="long long long"]; 7 | } 8 | -------------------------------------------------------------------------------- /test/graphs/lsunix1.dot: -------------------------------------------------------------------------------- 1 | /* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */ 2 | digraph unix { 3 | size="6,6"; 4 | edge [style=dashed]; 5 | 6 | "5th Edition" -> "6th Edition"; 7 | "5th Edition" -> "PWB 1.0"; 8 | "6th Edition" -> "LSX"; 9 | "6th Edition" -> "1 BSD"; 10 | "6th Edition" -> "Mini Unix"; 11 | "6th Edition" -> "Wollongong"; 12 | "6th Edition" -> "Interdata"; 13 | "Interdata" -> "Unix/TS 3.0"; 14 | "Interdata" -> "PWB 2.0"; 15 | "Interdata" -> "7th Edition"; 16 | "7th Edition" -> "8th Edition"; 17 | "7th Edition" -> "32V"; 18 | "7th Edition" -> "V7M"; 19 | "7th Edition" -> "Ultrix-11"; 20 | "7th Edition" -> "Xenix"; 21 | "7th Edition" -> "UniPlus+"; 22 | "V7M" -> "Ultrix-11"; 23 | "8th Edition" -> "9th Edition"; 24 | "1 BSD" -> "2 BSD"; 25 | "2 BSD" -> "2.8 BSD"; 26 | "2.8 BSD" -> "Ultrix-11"; 27 | "2.8 BSD" -> "2.9 BSD"; 28 | "32V" -> "3 BSD"; 29 | "3 BSD" -> "4 BSD"; 30 | "4 BSD" -> "4.1 BSD"; 31 | "4.1 BSD" -> "4.2 BSD"; 32 | "4.1 BSD" -> "2.8 BSD"; 33 | "4.1 BSD" -> "8th Edition"; 34 | "4.2 BSD" -> "4.3 BSD"; 35 | "4.2 BSD" -> "Ultrix-32"; 36 | "PWB 1.0" -> "PWB 1.2"; 37 | "PWB 1.0" -> "USG 1.0"; 38 | "PWB 1.2" -> "PWB 2.0"; 39 | "USG 1.0" -> "CB Unix 1"; 40 | "USG 1.0" -> "USG 2.0"; 41 | "CB Unix 1" -> "CB Unix 2"; 42 | "CB Unix 2" -> "CB Unix 3"; 43 | "CB Unix 3" -> "Unix/TS++"; 44 | "CB Unix 3" -> "PDP-11 Sys V"; 45 | "USG 2.0" -> "USG 3.0"; 46 | "USG 3.0" -> "Unix/TS 3.0"; 47 | "PWB 2.0" -> "Unix/TS 3.0"; 48 | "Unix/TS 1.0" -> "Unix/TS 3.0"; 49 | "Unix/TS 3.0" -> "TS 4.0"; 50 | "Unix/TS++" -> "TS 4.0"; 51 | "CB Unix 3" -> "TS 4.0"; 52 | "TS 4.0" -> "System V.0"; 53 | "System V.0" -> "System V.2"; 54 | "System V.2" -> "System V.3"; 55 | } 56 | -------------------------------------------------------------------------------- /test/graphs/lsunix2.dot: -------------------------------------------------------------------------------- 1 | /* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */ 2 | digraph unix { 3 | size="6,6"; 4 | edge [style=dotted]; 5 | 6 | "5th Edition" -> "6th Edition"; 7 | "5th Edition" -> "PWB 1.0"; 8 | "6th Edition" -> "LSX"; 9 | "6th Edition" -> "1 BSD"; 10 | "6th Edition" -> "Mini Unix"; 11 | "6th Edition" -> "Wollongong"; 12 | "6th Edition" -> "Interdata"; 13 | "Interdata" -> "Unix/TS 3.0"; 14 | "Interdata" -> "PWB 2.0"; 15 | "Interdata" -> "7th Edition"; 16 | "7th Edition" -> "8th Edition"; 17 | "7th Edition" -> "32V"; 18 | "7th Edition" -> "V7M"; 19 | "7th Edition" -> "Ultrix-11"; 20 | "7th Edition" -> "Xenix"; 21 | "7th Edition" -> "UniPlus+"; 22 | "V7M" -> "Ultrix-11"; 23 | "8th Edition" -> "9th Edition"; 24 | "1 BSD" -> "2 BSD"; 25 | "2 BSD" -> "2.8 BSD"; 26 | "2.8 BSD" -> "Ultrix-11"; 27 | "2.8 BSD" -> "2.9 BSD"; 28 | "32V" -> "3 BSD"; 29 | "3 BSD" -> "4 BSD"; 30 | "4 BSD" -> "4.1 BSD"; 31 | "4.1 BSD" -> "4.2 BSD"; 32 | "4.1 BSD" -> "2.8 BSD"; 33 | "4.1 BSD" -> "8th Edition"; 34 | "4.2 BSD" -> "4.3 BSD"; 35 | "4.2 BSD" -> "Ultrix-32"; 36 | "PWB 1.0" -> "PWB 1.2"; 37 | "PWB 1.0" -> "USG 1.0"; 38 | "PWB 1.2" -> "PWB 2.0"; 39 | "USG 1.0" -> "CB Unix 1"; 40 | "USG 1.0" -> "USG 2.0"; 41 | "CB Unix 1" -> "CB Unix 2"; 42 | "CB Unix 2" -> "CB Unix 3"; 43 | "CB Unix 3" -> "Unix/TS++"; 44 | "CB Unix 3" -> "PDP-11 Sys V"; 45 | "USG 2.0" -> "USG 3.0"; 46 | "USG 3.0" -> "Unix/TS 3.0"; 47 | "PWB 2.0" -> "Unix/TS 3.0"; 48 | "Unix/TS 1.0" -> "Unix/TS 3.0"; 49 | "Unix/TS 3.0" -> "TS 4.0"; 50 | "Unix/TS++" -> "TS 4.0"; 51 | "CB Unix 3" -> "TS 4.0"; 52 | "TS 4.0" -> "System V.0"; 53 | "System V.0" -> "System V.2"; 54 | "System V.2" -> "System V.3"; 55 | } 56 | -------------------------------------------------------------------------------- /test/graphs/lsunix3.dot: -------------------------------------------------------------------------------- 1 | /* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */ 2 | digraph unix { 3 | size="6,6"; 4 | edge [style=bold, color=red]; 5 | 6 | "5th Edition" -> "6th Edition"; 7 | "5th Edition" -> "PWB 1.0"; 8 | "6th Edition" -> "LSX"; 9 | "6th Edition" -> "1 BSD"; 10 | "6th Edition" -> "Mini Unix"; 11 | "6th Edition" -> "Wollongong"; 12 | "6th Edition" -> "Interdata"; 13 | "Interdata" -> "Unix/TS 3.0"; 14 | "Interdata" -> "PWB 2.0"; 15 | "Interdata" -> "7th Edition"; 16 | "7th Edition" -> "8th Edition"; 17 | "7th Edition" -> "32V"; 18 | "7th Edition" -> "V7M"; 19 | "7th Edition" -> "Ultrix-11"; 20 | "7th Edition" -> "Xenix"; 21 | "7th Edition" -> "UniPlus+"; 22 | "V7M" -> "Ultrix-11"; 23 | "8th Edition" -> "9th Edition"; 24 | "1 BSD" -> "2 BSD"; 25 | "2 BSD" -> "2.8 BSD"; 26 | "2.8 BSD" -> "Ultrix-11"; 27 | "2.8 BSD" -> "2.9 BSD"; 28 | "32V" -> "3 BSD"; 29 | "3 BSD" -> "4 BSD"; 30 | "4 BSD" -> "4.1 BSD"; 31 | "4.1 BSD" -> "4.2 BSD"; 32 | "4.1 BSD" -> "2.8 BSD"; 33 | "4.1 BSD" -> "8th Edition"; 34 | "4.2 BSD" -> "4.3 BSD"; 35 | "4.2 BSD" -> "Ultrix-32"; 36 | "PWB 1.0" -> "PWB 1.2"; 37 | "PWB 1.0" -> "USG 1.0"; 38 | "PWB 1.2" -> "PWB 2.0"; 39 | "USG 1.0" -> "CB Unix 1"; 40 | "USG 1.0" -> "USG 2.0"; 41 | "CB Unix 1" -> "CB Unix 2"; 42 | "CB Unix 2" -> "CB Unix 3"; 43 | "CB Unix 3" -> "Unix/TS++"; 44 | "CB Unix 3" -> "PDP-11 Sys V"; 45 | "USG 2.0" -> "USG 3.0"; 46 | "USG 3.0" -> "Unix/TS 3.0"; 47 | "PWB 2.0" -> "Unix/TS 3.0"; 48 | "Unix/TS 1.0" -> "Unix/TS 3.0"; 49 | "Unix/TS 3.0" -> "TS 4.0"; 50 | "Unix/TS++" -> "TS 4.0"; 51 | "CB Unix 3" -> "TS 4.0"; 52 | "TS 4.0" -> "System V.0"; 53 | "System V.0" -> "System V.2"; 54 | "System V.2" -> "System V.3"; 55 | } 56 | -------------------------------------------------------------------------------- /test/graphs/mike.dot: -------------------------------------------------------------------------------- 1 | digraph mike{ 2 | size = "8,8"; 3 | a -> A; 4 | a -> m; 5 | a -> E; 6 | t -> O; 7 | r -> V; 8 | r -> Q; 9 | p -> B; 10 | m -> R; 11 | l -> C; 12 | c -> C; 13 | W -> X; 14 | W -> D; 15 | V -> W; 16 | T -> U; 17 | Q -> T; 18 | Q -> H; 19 | Q -> A; 20 | O -> K; 21 | L -> U; 22 | K -> L; 23 | K -> J; 24 | K -> E; 25 | J -> I; 26 | R -> B; 27 | P -> F; 28 | H -> R; 29 | H -> P; 30 | U -> H; 31 | G -> U; 32 | E -> G; 33 | C -> Z; 34 | C -> D; 35 | S -> D; 36 | B -> N; 37 | B -> D; 38 | B -> S; 39 | M -> B; 40 | A -> M; 41 | N -> Y; 42 | } 43 | -------------------------------------------------------------------------------- /test/graphs/multi.dot: -------------------------------------------------------------------------------- 1 | digraph G 2 | { 3 | a-> b 4 | } 5 | 6 | digraph H 7 | { 8 | c-> d 9 | } 10 | 11 | -------------------------------------------------------------------------------- /test/graphs/newarrows.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | // leave some space for the head/taillabels 3 | graph [ranksep=1.5 splines=true overlap=false] 4 | 5 | // to avoid confusion, remember this: 6 | // it's spelt tail/head, but it's read start/end 7 | 8 | // emphasize theatrically 9 | // show only explicitly given head/tails 10 | // put head/tail labels farther from the node 11 | // edge [arrowsize=2 dir=none labeldistance=3] 12 | edge [dir=none labeldistance=3] 13 | 14 | // not interested in node labels 15 | node [shape=circle width=0.5 label=""] 16 | 17 | { 18 | edge [samehead=ahead samearrowhead=1] 19 | a->Z [arrowtail=none taillabel=none] 20 | b->Z [arrowtail=normal taillabel=normal] 21 | c->Z [arrowtail=inv taillabel=inv] 22 | d->Z [arrowtail=dot taillabel=dot] 23 | e->Z [arrowtail=odot taillabel=odot] 24 | f->Z [arrowtail=invdot taillabel=invdot] 25 | g->Z [arrowtail=invodot taillabel=invodot] 26 | h->Z [arrowtail=open taillabel=open] 27 | i->Z [arrowtail=halfopen taillabel=halfopen arrowhead=inv headlabel=samehead] 28 | j->Z [arrowtail=empty taillabel=empty] 29 | k->Z [arrowtail=invempty taillabel=invempty] 30 | l->Z [arrowtail=diamond taillabel=diamond] 31 | m->Z [arrowtail=odiamond taillabel=odiamond] 32 | n->Z [arrowtail=box taillabel=box] 33 | o->Z [arrowtail=obox taillabel=obox] 34 | p->Z [arrowtail=tee taillabel=tee] 35 | q->Z [arrowtail=crow taillabel=crow] 36 | } 37 | { 38 | edge [sametail=atail samearrowtail=1] 39 | Z->A [arrowhead=none headlabel=none] 40 | Z->B [arrowhead=normal headlabel=normal] 41 | Z->C [arrowhead=inv headlabel=inv] 42 | Z->D [arrowhead=dot headlabel=dot] 43 | Z->E [arrowhead=odot headlabel=odot] 44 | Z->F [arrowhead=invdot headlabel=invdot] 45 | Z->G [arrowhead=invodot headlabel=invodot] 46 | Z->H [arrowhead=open headlabel=open] 47 | Z->I [arrowhead=halfopen headlabel=halfopen arrowtail=inv taillabel=sametail] 48 | Z->J [arrowhead=empty headlabel=empty] 49 | Z->K [arrowhead=invempty headlabel=invempty] 50 | Z->L [arrowhead=diamond headlabel=diamond] 51 | Z->M [arrowhead=odiamond headlabel=odiamond] 52 | Z->N [arrowhead=box headlabel=box] 53 | Z->O [arrowhead=obox headlabel=obox] 54 | Z->P [arrowhead=tee headlabel=tee] 55 | Z->Q [arrowhead=crow headlabel=crow] 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /test/graphs/ngk10_4.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | 1 -- 30 [f=1]; 3 | 1 -- 40 [f=14]; 4 | 8 -- 46 [f=1]; 5 | 8 -- 16 [f=18]; 6 | 10 -- 25 [f=1]; 7 | 10 -- 19 [f=5]; 8 | 10 -- 33 [f=1]; 9 | 12 -- 8 [f=1]; 10 | 12 -- 36 [f=5]; 11 | 12 -- 17 [f=16]; 12 | 13 -- 38 [f=1]; 13 | 13 -- 24 [f=19]; 14 | 24 -- 49 [f=1]; 15 | 24 -- 13 [f=1]; 16 | 24 -- 47 [f=12]; 17 | 24 -- 12 [f=19]; 18 | 25 -- 27 [f=1]; 19 | 25 -- 12 [f=1]; 20 | 27 -- 12 [f=1]; 21 | 27 -- 14 [f=8]; 22 | 29 -- 10 [f=1]; 23 | 29 -- 8 [f=17]; 24 | 30 -- 24 [f=1]; 25 | 30 -- 44 [f=15]; 26 | 38 -- 29 [f=1]; 27 | 38 -- 35 [f=15]; 28 | 2 -- 42 [f=2]; 29 | 2 -- 35 [f=3]; 30 | 2 -- 11 [f=19]; 31 | 14 -- 18 [f=2]; 32 | 14 -- 24 [f=15]; 33 | 14 -- 38 [f=18]; 34 | 18 -- 49 [f=2]; 35 | 18 -- 47 [f=20]; 36 | 26 -- 41 [f=2]; 37 | 26 -- 42 [f=15]; 38 | 31 -- 39 [f=2]; 39 | 31 -- 47 [f=17]; 40 | 31 -- 25 [f=14]; 41 | 37 -- 26 [f=2]; 42 | 37 -- 16 [f=14]; 43 | 39 -- 50 [f=2]; 44 | 39 -- 14 [f=2]; 45 | 39 -- 18 [f=17]; 46 | 39 -- 47 [f=10]; 47 | 41 -- 31 [f=2]; 48 | 41 -- 8 [f=16]; 49 | 42 -- 44 [f=2]; 50 | 42 -- 29 [f=12]; 51 | 44 -- 37 [f=2]; 52 | 44 -- 32 [f=15]; 53 | 3 -- 20 [f=2]; 54 | 3 -- 28 [f=19]; 55 | 6 -- 45 [f=2]; 56 | 6 -- 28 [f=10]; 57 | 9 -- 6 [f=2]; 58 | 9 -- 16 [f=1]; 59 | 15 -- 16 [f=2]; 60 | 15 -- 48 [f=2]; 61 | 16 -- 50 [f=2]; 62 | 16 -- 32 [f=14]; 63 | 16 -- 39 [f=8]; 64 | 20 -- 33 [f=2]; 65 | 33 -- 9 [f=2]; 66 | 33 -- 46 [f=3]; 67 | 33 -- 48 [f=17]; 68 | 45 -- 15 [f=2]; 69 | 4 -- 17 [f=4]; 70 | 4 -- 15 [f=6]; 71 | 4 -- 12 [f=16]; 72 | 17 -- 21 [f=4]; 73 | 19 -- 35 [f=4]; 74 | 19 -- 15 [f=9]; 75 | 19 -- 43 [f=4]; 76 | 21 -- 19 [f=4]; 77 | 21 -- 50 [f=4]; 78 | 23 -- 36 [f=4]; 79 | 34 -- 23 [f=4]; 80 | 34 -- 24 [f=11]; 81 | 35 -- 34 [f=4]; 82 | 35 -- 16 [f=6]; 83 | 35 -- 18 [f=16]; 84 | 36 -- 46 [f=4]; 85 | 5 -- 7 [f=1]; 86 | 5 -- 36 [f=6]; 87 | 7 -- 32 [f=1]; 88 | 7 -- 11 [f=2]; 89 | 7 -- 14 [f=17]; 90 | 11 -- 40 [f=1]; 91 | 11 -- 50 [f=1]; 92 | 22 -- 46 [f=1]; 93 | 28 -- 43 [f=1]; 94 | 28 -- 8 [f=18]; 95 | 32 -- 28 [f=1]; 96 | 32 -- 39 [f=13]; 97 | 32 -- 42 [f=15]; 98 | 40 -- 22 [f=1]; 99 | 40 -- 47 [f=1]; 100 | 43 -- 11 [f=1]; 101 | 43 -- 17 [f=19]; 102 | } 103 | -------------------------------------------------------------------------------- /test/graphs/nhg.dot: -------------------------------------------------------------------------------- 1 | digraph automata_0 { 2 | size ="8.5, 11"; 3 | node [shape = circle]; 4 | 0 [ style = filled, color=lightgrey ]; 5 | 2 [ shape = doublecircle ]; 6 | 0 -> 2 [ label = "a " ]; 7 | 0 -> 1 [ label = "other " ]; 8 | 1 -> 2 [ label = "a " ]; 9 | 1 -> 1 [ label = "other " ]; 10 | 2 -> 2 [ label = "a " ]; 11 | 2 -> 1 [ label = "other " ]; 12 | "Machine: a" [ shape = plaintext ]; 13 | } 14 | -------------------------------------------------------------------------------- /test/graphs/nojustify.dot: -------------------------------------------------------------------------------- 1 | digraph G{ 2 | node [shape=box, label="aaaaaaaaaaaaaa\nddd\l"] 3 | n [width=3] 4 | m [width=3, nojustify=true] 5 | n -> m 6 | l -> p 7 | l [shape=record, label="{aaaaaaaaaaaaaa\n | bbbbbb\nddd\l}"] 8 | p [nojustify=true, shape=record, label="{aaaaaaaaaaaaaa\n | bbbbbb\nddd\l}"] 9 | } 10 | -------------------------------------------------------------------------------- /test/graphs/ordering.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | 0 -> 1 3 | 0 -> 2 4 | 1 -> 3 5 | 1 -> 5 6 | 1 -> 7 7 | 2 -> 4 8 | 2 -> 5 9 | 2 -> 6 10 | 2 -> 8 11 | 3 -> 9 12 | 5 -> 9 13 | 6 -> 9 14 | 7 -> 9 15 | 4 -> 10 16 | 8 -> 10 17 | 6 -> 10 18 | } 19 | -------------------------------------------------------------------------------- /test/graphs/overlap.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | Marden--ldt; 3 | Marden--kg; 4 | Marden--hg; 5 | Cannon--ldt; 6 | Cannon--kg; 7 | Cannon--ggt; 8 | Epstein--kg; 9 | Epstein--ldt; 10 | Epstein--ggt; 11 | Epstein--hg; 12 | Conway--ggt; 13 | Conway--kt; 14 | Conway--hg; 15 | Conway--lat; 16 | Conway--vd; 17 | Taylor--crys; 18 | Taylor--vd; 19 | Taylor--gcv; 20 | Taylor--fd; 21 | Almgren--crys; 22 | Almgren--vd; 23 | Almgren--gcv; 24 | Almgren--fd; 25 | Freedman--gcv; 26 | Freedman--ldt; 27 | Freedman--ds; 28 | Milnor--ldt; 29 | Milnor--cd; 30 | Milnor--ds; 31 | Milnor--hg; 32 | Milnor--kt; 33 | Douady--cd; 34 | Douady--ds; 35 | Douady--kg; 36 | Hubard--ds; 37 | Hubard--cd; 38 | Hubard--kg; 39 | Hubard--fg; 40 | Mandelbrot--cd; 41 | Mandelbrot--fg; 42 | Mandelbrot--kg; 43 | Wilks--sg; 44 | Wilks--gv; 45 | Wilks--cd; 46 | Wilks--cg; 47 | Dobkin--gv; 48 | Dobkin--vd; 49 | Dobkin--cg; 50 | Chazelle--cg; 51 | Chazelle--gv; 52 | Chazelle--vd; 53 | Peskin--fd; 54 | Peskin--gcv; 55 | Peskin--gv; 56 | Tarjan--cg; 57 | Tarjan--hg; 58 | Mumford--kg; 59 | Mumford--cg; 60 | Mumford--cv; 61 | Mumford--gcv; 62 | Mumford--crys; 63 | Thurston--ggt; 64 | Thurston--vd; 65 | Thurston--cg; 66 | Thurston--gv; 67 | Thurston--kg; 68 | Thurston--cd; 69 | Thurston--ldt; 70 | Thurston--kt; 71 | ldt--ds; 72 | ldt--ggt; 73 | ldt--hg; 74 | ldt--kt; 75 | ldt--cd; 76 | ds--ggt; 77 | ds--cd; 78 | ds--fg; 79 | ds--sg; 80 | kt--hg; 81 | kt--kg; 82 | cd--fg; 83 | cd--kg; 84 | fg--kg; 85 | fg--sg; 86 | ggt--lat; 87 | ggt--hg; 88 | hg--lat; 89 | hg--vd; 90 | hg--cg; 91 | hg--kg; 92 | kg--vd; 93 | sg--dv; 94 | sg--gv; 95 | sg--cv; 96 | lat--crys; 97 | lat--vd; 98 | vd--crys; 99 | vd--gcv; 100 | vd--cv; 101 | cv--vd; 102 | cv--gcv; 103 | cv--cg; 104 | cv--gv; 105 | crys--fd; 106 | crys--gcv; 107 | gcv--fd; 108 | gcv--cg; 109 | cg--fd; 110 | } 111 | -------------------------------------------------------------------------------- /test/graphs/p.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | kernel [ root=true ] 3 | run -- intr; 4 | intr -- runbl; 5 | runbl -- run; 6 | run -- kernel; 7 | kernel -- zombie; 8 | kernel -- sleep; 9 | kernel -- runmem; 10 | sleep -- swap; 11 | swap -- runswap; 12 | runswap -- new; 13 | runswap -- runmem; 14 | new -- runmem; 15 | sleep -- runmem; 16 | } 17 | -------------------------------------------------------------------------------- /test/graphs/p2.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | run -- intr; 3 | intr -- runbl; 4 | runbl -- run; 5 | run -- runmem; 6 | /* run -- kernel; */ 7 | kernel -- zombie; 8 | kernel -- sleep; 9 | kernel -- runmem; 10 | sleep -- swap; 11 | swap -- runswap; 12 | runswap -- new; 13 | runswap -- runmem; 14 | new -- runmem; 15 | sleep -- runmem; 16 | } 17 | -------------------------------------------------------------------------------- /test/graphs/p3.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | run -- intr; 3 | intr -- runbl; 4 | runbl -- run; 5 | run -- kernel; 6 | kernel -- zombie; 7 | kernel -- sleep; 8 | kernel -- runmem; 9 | sleep -- swap; 10 | swap -- runswap; 11 | runswap -- new; 12 | runswap -- runmem; 13 | new -- runmem; 14 | sleep -- runmem; 15 | kernel -- 1 16 | } 17 | -------------------------------------------------------------------------------- /test/graphs/p4.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | run -- intr; 3 | intr -- runbl; 4 | runbl -- run; 5 | run -- kernel; 6 | /* run -- runmem; */ 7 | kernel -- zombie 8 | kernel -- sleep; 9 | kernel -- runmem; 10 | sleep -- swap; 11 | swap -- runswap; 12 | runswap -- new; 13 | runswap -- runmem; 14 | new -- runmem; 15 | sleep -- runmem; 16 | zombie -- 1 -- 2 -- 4 -- 5 -- 6 -- 7 -- 8 -- zombie; 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/pack.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | 1 -- { 2 3 4 5 6} 3 | 2 -- { 8 9 10} 4 | 3 -- 11 -- 12 -- 13 5 | a1 -- { a2 a3 a4 a5 a6} 6 | a2 -- { a8 a9 a10} 7 | A -- B 8 | C 9 | } 10 | -------------------------------------------------------------------------------- /test/graphs/pgram.dot: -------------------------------------------------------------------------------- 1 | digraph test { 2 | 3 | size="7,9.5"; 4 | page="8,10.5"; 5 | ratio=fill; 6 | rankdir=LR; 7 | 8 | { rank=same; 9 | node [shape=house]; 10 | A;C;E;G;I;K;M;O;Q;S;U;W;Y; 11 | node [shape=invhouse]; 12 | B;D;F;H;J;L;N;P;R;T;V;X;Z; 13 | } 14 | 15 | { rank=same; 16 | node [shape=parallelogram]; 17 | "Parallelogram" [label="This is a test\nof a multiline\nlabel in an\nparallelogram with approx\nsquare aspect"]; 18 | "a ----- long thin parallelogram"; 19 | "xx" [label="m"]; 20 | "yy" [label="a\nb\nc\nd\ne\nf"]; 21 | node [shape=octagon]; 22 | "Octagon" [label="This is a test\nof a multiline\nlabel in an\noctagon with approx\nsquare aspect"]; 23 | node [shape=parallelogram]; 24 | "Parallelogram" [label="This is a test\nof a multiline\nlabel in an\nparallelogram with approx\nsquare aspect"]; 25 | "a ----- long thin parallelogram"; 26 | "zz" [label="m"]; 27 | "qq" [label="a\nb\nc\nd\ne\nf"]; 28 | ordering=out; 29 | } 30 | 31 | Parallelogram -> A; 32 | Parallelogram -> B; 33 | Parallelogram -> C; 34 | Parallelogram -> D; 35 | Parallelogram -> E; 36 | Parallelogram -> F; 37 | Parallelogram -> G; 38 | Parallelogram -> H; 39 | Parallelogram -> I; 40 | Parallelogram -> J; 41 | Parallelogram -> K; 42 | Parallelogram -> L; 43 | Parallelogram -> M; 44 | Parallelogram -> N; 45 | Parallelogram -> O; 46 | Parallelogram -> P; 47 | Parallelogram -> Q; 48 | Parallelogram -> R; 49 | Parallelogram -> S; 50 | Parallelogram -> T; 51 | Parallelogram -> U; 52 | Parallelogram -> V; 53 | Parallelogram -> W; 54 | Parallelogram -> X; 55 | Parallelogram -> Y; 56 | Parallelogram -> Z; 57 | 58 | { rank=same; 59 | node [shape=triangle]; 60 | a;c;e;g;i;k;m;o;q;s;u;w;y; 61 | node [shape=tripleoctagon]; 62 | b;d;f;h;j;l;n;p;r;t;v;x;z; 63 | } 64 | 65 | a -> Parallelogram -> Octagon; 66 | b -> Parallelogram -> Octagon; 67 | c -> Parallelogram -> Octagon; 68 | d -> Parallelogram -> Octagon; 69 | e -> Parallelogram -> Octagon; 70 | f -> Parallelogram -> Octagon; 71 | g -> Parallelogram -> Octagon; 72 | h -> Parallelogram -> Octagon; 73 | i -> Parallelogram -> Octagon; 74 | j -> Parallelogram -> Octagon; 75 | k -> Parallelogram -> Octagon; 76 | l -> Parallelogram -> Octagon; 77 | m -> Parallelogram -> Octagon; 78 | n -> Parallelogram -> Octagon; 79 | o -> Parallelogram -> Octagon; 80 | p -> Parallelogram -> Octagon; 81 | q -> Parallelogram -> Octagon; 82 | r -> Parallelogram -> Octagon; 83 | s -> Parallelogram -> Octagon; 84 | t -> Parallelogram -> Octagon; 85 | u -> Parallelogram -> Octagon; 86 | v -> Parallelogram -> Octagon; 87 | w -> Parallelogram -> Octagon; 88 | x -> Parallelogram -> Octagon; 89 | y -> Parallelogram -> Octagon; 90 | z -> Parallelogram -> Octagon; 91 | } 92 | -------------------------------------------------------------------------------- /test/graphs/pm2way.dot: -------------------------------------------------------------------------------- 1 | digraph g { 2 | graph [ 3 | ]; 4 | node [ 5 | fontsize = "14" 6 | fontname = "Times-Roman" 7 | fontcolor = "black" 8 | shape = "box" 9 | color = "black" 10 | width = "0.5" 11 | ]; 12 | edge [ 13 | fontsize = "14" 14 | fontname = "Times-Roman" 15 | fontcolor = "black" 16 | color = "black" 17 | ]; 18 | "22690" [ 19 | label = "22690\n?" 20 | pname = "?" 21 | kind = "proc" 22 | ]; 23 | "22692" [ 24 | label = "22692\ndotty" 25 | pname = "dotty" 26 | kind = "proc" 27 | ]; 28 | "116842+2595" [ 29 | label = "116842+2595\n/home/ek/work/sun4/bin/dotty" 30 | fname = "/home/ek/work/sun4/bin/dotty" 31 | shape = "ellipse" 32 | kind = "file" 33 | ]; 34 | "22693" [ 35 | label = "22693\nlefty" 36 | pname = "lefty" 37 | kind = "proc" 38 | ]; 39 | "182440-1" [ 40 | label = "182440-1\n182441-1\npipe" 41 | fontsize = "7" 42 | fname = "pipe" 43 | shape = "doublecircle" 44 | subkind = "pipe" 45 | kind = "file" 46 | ]; 47 | "182442-1" [ 48 | label = "182442-1\n182443-1\npipe" 49 | fontsize = "7" 50 | fname = "pipe" 51 | shape = "doublecircle" 52 | subkind = "pipe" 53 | kind = "file" 54 | ]; 55 | "22694" [ 56 | label = "22694\ndot" 57 | pname = "dot" 58 | kind = "proc" 59 | ]; 60 | "4761+2595" [ 61 | label = "4761+2595\n/home/ek/pm2.dot" 62 | fname = "/home/ek/pm2.dot" 63 | shape = "ellipse" 64 | kind = "file" 65 | ]; 66 | "22690" -> "22692" [ 67 | fontsize = "14" 68 | fontname = "Times-Roman" 69 | fontcolor = "black" 70 | color = "black" 71 | ]; 72 | "22692" -> "116842+2595" [ 73 | fontsize = "14" 74 | fontname = "Times-Roman" 75 | fontcolor = "black" 76 | dir = "back" 77 | color = "black" 78 | ]; 79 | "22692" -> "22693" [ 80 | fontsize = "14" 81 | fontname = "Times-Roman" 82 | fontcolor = "black" 83 | color = "black" 84 | ]; 85 | "22693" -> "182440-1" [ 86 | fontsize = "14" 87 | fontname = "Times-Roman" 88 | fontcolor = "black" 89 | dir = "back" 90 | color = "black" 91 | ]; 92 | "22693" -> "182442-1" [ 93 | fontsize = "14" 94 | fontname = "Times-Roman" 95 | fontcolor = "black" 96 | dir = "forward" 97 | color = "black" 98 | ]; 99 | "22693" -> "22694" [ 100 | fontsize = "14" 101 | fontname = "Times-Roman" 102 | fontcolor = "black" 103 | color = "black" 104 | ]; 105 | "22694" -> "182440-1" [ 106 | fontsize = "14" 107 | fontname = "Times-Roman" 108 | fontcolor = "black" 109 | dir = "forward" 110 | color = "black" 111 | ]; 112 | "22694" -> "182442-1" [ 113 | fontsize = "14" 114 | fontname = "Times-Roman" 115 | fontcolor = "black" 116 | dir = "back" 117 | color = "black" 118 | ]; 119 | "22693" -> "4761+2595" [ 120 | fontsize = "14" 121 | fontname = "Times-Roman" 122 | fontcolor = "black" 123 | dir = "back" 124 | color = "black" 125 | ]; 126 | } 127 | -------------------------------------------------------------------------------- /test/graphs/pmpipe.dot: -------------------------------------------------------------------------------- 1 | digraph g { 2 | graph [ 3 | ]; 4 | node [ 5 | fontsize = "14" 6 | fontname = "Times-Roman" 7 | fontcolor = "black" 8 | shape = "box" 9 | color = "black" 10 | width = "0.5" 11 | ]; 12 | edge [ 13 | fontsize = "14" 14 | fontname = "Times-Roman" 15 | fontcolor = "black" 16 | color = "black" 17 | ]; 18 | "23296" [ 19 | label = "23296\n?" 20 | pname = "?" 21 | kind = "proc" 22 | ]; 23 | "182948-1" [ 24 | label = "182948-1\n182949-1\npipe" 25 | fontsize = "7" 26 | fname = "pipe" 27 | shape = "doublecircle" 28 | subkind = "pipe" 29 | kind = "file" 30 | ]; 31 | "23310" [ 32 | label = "23310\ncat" 33 | pname = "cat" 34 | kind = "proc" 35 | ]; 36 | "182950-1" [ 37 | label = "182950-1\n182951-1\npipe" 38 | fontsize = "7" 39 | fname = "pipe" 40 | shape = "doublecircle" 41 | subkind = "pipe" 42 | kind = "file" 43 | ]; 44 | "23311" [ 45 | label = "23311\ncat" 46 | pname = "cat" 47 | kind = "proc" 48 | ]; 49 | "182952-1" [ 50 | label = "182952-1\n182953-1\npipe" 51 | fontsize = "7" 52 | fname = "pipe" 53 | shape = "doublecircle" 54 | subkind = "pipe" 55 | kind = "file" 56 | ]; 57 | "23312" [ 58 | label = "23312\ncat" 59 | pname = "cat" 60 | kind = "proc" 61 | ]; 62 | "182954-1" [ 63 | label = "182954-1\n182955-1\npipe" 64 | fontsize = "7" 65 | fname = "pipe" 66 | shape = "doublecircle" 67 | subkind = "pipe" 68 | kind = "file" 69 | ]; 70 | "23313" [ 71 | label = "23313\ncat" 72 | pname = "cat" 73 | kind = "proc" 74 | ]; 75 | "79893+2568" [ 76 | label = "79893+2568\n/usr/share/lib/termcap" 77 | fname = "/usr/share/lib/termcap" 78 | shape = "ellipse" 79 | kind = "file" 80 | ]; 81 | "85+2560" [ 82 | label = "85+2560\n?" 83 | fname = "?" 84 | shape = "ellipse" 85 | kind = "file" 86 | ]; 87 | "23314" [ 88 | label = "23314\ncat" 89 | pname = "cat" 90 | kind = "proc" 91 | ]; 92 | "4151865284+0" [ 93 | label = "4151865284+0\n/tmp/termcap" 94 | fname = "/tmp/termcap" 95 | shape = "ellipse" 96 | kind = "file" 97 | ]; 98 | "23296" -> "23310" [ 99 | fontsize = "14" 100 | fontname = "Times-Roman" 101 | fontcolor = "black" 102 | color = "black" 103 | ]; 104 | "23296" -> "23311" [ 105 | fontsize = "14" 106 | fontname = "Times-Roman" 107 | fontcolor = "black" 108 | color = "black" 109 | ]; 110 | "23311" -> "182948-1" [ 111 | fontsize = "14" 112 | fontname = "Times-Roman" 113 | fontcolor = "black" 114 | dir = "back" 115 | color = "black" 116 | ]; 117 | "23310" -> "182948-1" [ 118 | fontsize = "14" 119 | fontname = "Times-Roman" 120 | fontcolor = "black" 121 | dir = "forward" 122 | color = "black" 123 | ]; 124 | "23296" -> "23312" [ 125 | fontsize = "14" 126 | fontname = "Times-Roman" 127 | fontcolor = "black" 128 | color = "black" 129 | ]; 130 | "23312" -> "182952-1" [ 131 | fontsize = "14" 132 | fontname = "Times-Roman" 133 | fontcolor = "black" 134 | dir = "forward" 135 | color = "black" 136 | ]; 137 | "23312" -> "182950-1" [ 138 | fontsize = "14" 139 | fontname = "Times-Roman" 140 | fontcolor = "black" 141 | dir = "back" 142 | color = "black" 143 | ]; 144 | "23296" -> "23313" [ 145 | fontsize = "14" 146 | fontname = "Times-Roman" 147 | fontcolor = "black" 148 | color = "black" 149 | ]; 150 | "23313" -> "182954-1" [ 151 | fontsize = "14" 152 | fontname = "Times-Roman" 153 | fontcolor = "black" 154 | dir = "forward" 155 | color = "black" 156 | ]; 157 | "23311" -> "182950-1" [ 158 | fontsize = "14" 159 | fontname = "Times-Roman" 160 | fontcolor = "black" 161 | dir = "forward" 162 | color = "black" 163 | ]; 164 | "23310" -> "79893+2568" [ 165 | fontsize = "14" 166 | fontname = "Times-Roman" 167 | fontcolor = "black" 168 | dir = "back" 169 | color = "black" 170 | ]; 171 | "23296" -> "85+2560" [ 172 | fontsize = "14" 173 | fontname = "Times-Roman" 174 | fontcolor = "black" 175 | dir = "both" 176 | color = "black" 177 | ]; 178 | "23296" -> "23314" [ 179 | fontsize = "14" 180 | fontname = "Times-Roman" 181 | fontcolor = "black" 182 | color = "black" 183 | ]; 184 | "23314" -> "85+2560" [ 185 | fontsize = "14" 186 | fontname = "Times-Roman" 187 | fontcolor = "black" 188 | dir = "both" 189 | color = "black" 190 | ]; 191 | "23314" -> "182954-1" [ 192 | fontsize = "14" 193 | fontname = "Times-Roman" 194 | fontcolor = "black" 195 | dir = "back" 196 | color = "black" 197 | ]; 198 | "23296" -> "85+2560" [ 199 | fontsize = "14" 200 | fontname = "Times-Roman" 201 | fontcolor = "black" 202 | dir = "both" 203 | color = "black" 204 | ]; 205 | "23314" -> "4151865284+0" [ 206 | fontsize = "14" 207 | fontname = "Times-Roman" 208 | fontcolor = "black" 209 | dir = "forward" 210 | color = "black" 211 | ]; 212 | "23313" -> "182952-1" [ 213 | fontsize = "14" 214 | fontname = "Times-Roman" 215 | fontcolor = "black" 216 | dir = "back" 217 | color = "black" 218 | ]; 219 | } 220 | -------------------------------------------------------------------------------- /test/graphs/polypoly.dot: -------------------------------------------------------------------------------- 1 | digraph polypoly { 2 | 3 | /* size="7,9.5"; */ 4 | /* page="8.5,11"; */ 5 | /* ratio=fill; */ 6 | node [shape=polygon]; 7 | { rank=same; 8 | node [sides=0]; 9 | node [peripheries=1]; 10 | 0000 [label="M"]; 11 | 0001 [label="MMMMMMMMMM"]; 12 | 0002 [label="M\nM\nM\nM\nM\nM"]; 13 | 0003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 14 | node [peripheries=2]; 15 | 0010 [label="M"]; 16 | 0011 [label="MMMMMMMMMM"]; 17 | 0012 [label="M\nM\nM\nM\nM\nM"]; 18 | 0013 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 19 | node [distortion=-.3]; 20 | 0110 [label="M"]; 21 | 0111 [label="MMMMMMMMMM"]; 22 | 0112 [label="M\nM\nM\nM\nM\nM"]; 23 | 0113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 24 | } 25 | { rank=same; 26 | node [sides=3]; 27 | node [peripheries=1]; 28 | node [orientation=0]; 29 | 3000 [label="M"]; 30 | 3001 [label="MMMMMMMMMM"]; 31 | 3002 [label="M\nM\nM\nM\nM\nM"]; 32 | 3003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 33 | node [peripheries=2]; 34 | node [orientation=60]; 35 | 3110 [label="M"]; 36 | 3111 [label="MMMMMMMMMM"]; 37 | 3112 [label="M\nM\nM\nM\nM\nM"]; 38 | 3113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 39 | } 40 | 3000->0000; 41 | { rank=same; 42 | node [sides=4]; 43 | node [peripheries=1]; 44 | node [orientation=0]; 45 | 4000 [label="M"]; 46 | 4001 [label="MMMMMMMMMM"]; 47 | 4002 [label="M\nM\nM\nM\nM\nM"]; 48 | 4003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 49 | node [peripheries=2]; 50 | node [orientation=45]; 51 | 4110 [label="M"]; 52 | 4111 [label="MMMMMMMMMM"]; 53 | 4112 [label="M\nM\nM\nM\nM\nM"]; 54 | 4113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 55 | } 56 | 4000->3000; 57 | { rank=same; 58 | node [sides=5]; 59 | node [peripheries=1]; 60 | node [orientation=0]; 61 | 5000 [label="M"]; 62 | 5001 [label="MMMMMMMMMM"]; 63 | 5002 [label="M\nM\nM\nM\nM\nM"]; 64 | 5003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 65 | node [peripheries=2]; 66 | node [orientation=36]; 67 | 5110 [label="M"]; 68 | 5111 [label="MMMMMMMMMM"]; 69 | 5112 [label="M\nM\nM\nM\nM\nM"]; 70 | 5113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 71 | } 72 | 5000->4000; 73 | { rank=same; 74 | node [sides=6]; 75 | node [peripheries=1]; 76 | node [orientation=0]; 77 | 6000 [label="M"]; 78 | 6001 [label="MMMMMMMMMM"]; 79 | 6002 [label="M\nM\nM\nM\nM\nM"]; 80 | 6003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 81 | node [peripheries=2]; 82 | node [orientation=30]; 83 | 6110 [label="M"]; 84 | 6111 [label="MMMMMMMMMM"]; 85 | 6112 [label="M\nM\nM\nM\nM\nM"]; 86 | 6113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 87 | } 88 | 6000->5000; 89 | { rank=same; 90 | node [sides=7]; 91 | node [peripheries=1]; 92 | node [orientation=0]; 93 | 7000 [label="M"]; 94 | 7001 [label="MMMMMMMMMM"]; 95 | 7002 [label="M\nM\nM\nM\nM\nM"]; 96 | 7003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 97 | node [peripheries=2]; 98 | node [orientation=25.7]; 99 | 7110 [label="M"]; 100 | 7111 [label="MMMMMMMMMM"]; 101 | 7112 [label="M\nM\nM\nM\nM\nM"]; 102 | 7113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 103 | } 104 | 7000->6000; 105 | { rank=same; 106 | node [sides=8]; 107 | node [peripheries=1]; 108 | node [orientation=0]; 109 | 8000 [label="M"]; 110 | 8001 [label="MMMMMMMMMM"]; 111 | 8002 [label="M\nM\nM\nM\nM\nM"]; 112 | 8003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 113 | node [peripheries=2]; 114 | node [orientation=22.5]; 115 | 8110 [label="M"]; 116 | 8111 [label="MMMMMMMMMM"]; 117 | 8112 [label="M\nM\nM\nM\nM\nM"]; 118 | 8113 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 119 | } 120 | 8000->7000; 121 | { rank=same; 122 | node [sides=4]; 123 | node [peripheries=1]; 124 | node [regular=1]; 125 | node [distortion=.5]; 126 | node [orientation=0]; 127 | 9000 [label="M"]; 128 | node [orientation=45.]; 129 | 9001 [label="M"]; 130 | node [orientation=90.]; 131 | 9002 [label="M"]; 132 | node [orientation=135.]; 133 | 9003 [label="M"]; 134 | node [orientation=180.]; 135 | 9004 [label="M"]; 136 | node [orientation=225.]; 137 | 9005 [label="M"]; 138 | node [orientation=270.]; 139 | 9006 [label="M"]; 140 | node [orientation=315.]; 141 | 9007 [label="M"]; 142 | node [peripheries=2]; 143 | node [orientation=0]; 144 | 9010 [label="M"]; 145 | node [orientation=45.]; 146 | 9011 [label="M"]; 147 | node [orientation=90.]; 148 | 9012 [label="M"]; 149 | node [orientation=135.]; 150 | 9013 [label="M"]; 151 | node [orientation=180.]; 152 | 9014 [label="M"]; 153 | node [orientation=225.]; 154 | 9015 [label="M"]; 155 | node [orientation=270.]; 156 | 9016 [label="M"]; 157 | node [orientation=315.]; 158 | 9017 [label="M"]; 159 | } 160 | { rank=same; 161 | node [shape=ellipse] 162 | node [peripheries=1]; 163 | 10000 [label="M"]; 164 | 10001 [label="MMMMMMMMMM"]; 165 | 10002 [label="M\nM\nM\nM\nM\nM"]; 166 | 10003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 167 | node [peripheries=2]; 168 | 10010 [label="M"] 169 | 10011 [label="MMMMMMMMMM"]; 170 | 10012 [label="M\nM\nM\nM\nM\nM"]; 171 | 10013 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 172 | node [peripheries=3]; 173 | 10014 [label="M"]; 174 | 10015 [label="MMMMMMMMMM"]; 175 | 10016 [label="M\nM\nM\nM\nM\nM"]; 176 | 10017 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 177 | } 178 | { rank=same; 179 | node [shape=circle] 180 | node [peripheries=1]; 181 | 20000 [label="M"]; 182 | 20001 [label="MMMMMMMMMM"]; 183 | 20002 [label="M\nM\nM\nM\nM\nM"]; 184 | 20003 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 185 | node [peripheries=2]; 186 | 20010 [label="M"]; 187 | 20011 [label="MMMMMMMMMM"]; 188 | 20012 [label="M\nM\nM\nM\nM\nM"]; 189 | 20013 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 190 | node [peripheries=3]; 191 | 20014 [label="M"]; 192 | 20015 [label="MMMMMMMMMM"]; 193 | 20016 [label="M\nM\nM\nM\nM\nM"]; 194 | 20017 [label="MMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM\nMMMMMMMMMM"]; 195 | } 196 | 0000 -> 10000 197 | 10000 -> 20000 198 | } 199 | -------------------------------------------------------------------------------- /test/graphs/ports.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | node [shape=box]; 3 | TOP -> subgraph a{rank=same a; b; c; d; e; f; }; 4 | subgraph a{rank=same a; b; c; d; e; f; } -> BOTTOM; 5 | b [shape=record, label="left |{up | middle | down } | right"] 6 | d [shape=none 7 | label=< 8 | 9 | 10 | 11 | 17 | 18 |
LEFTMIDDLE 12 | 13 | 14 | 15 |
RIGHTTOP
RIGHTBOTTOM
16 |
> ] 19 | A:s -> a:n 20 | a:w ->f:e 21 | f:n -> d:htmlleft 22 | a:ne -> d:inner:n 23 | a:s ->b:down:se 24 | a:w -> B:e 25 | D -> b:left 26 | C -> b:middle:e 27 | } 28 | -------------------------------------------------------------------------------- /test/graphs/process.dot: -------------------------------------------------------------------------------- 1 | graph G { 2 | run -- intr; 3 | intr -- runbl; 4 | runbl -- run; 5 | run -- kernel; 6 | kernel -- zombie; 7 | kernel -- sleep; 8 | kernel -- runmem; 9 | sleep -- swap; 10 | swap -- runswap; 11 | runswap -- new; 12 | runswap -- runmem; 13 | new -- runmem; 14 | sleep -- runmem; 15 | } 16 | -------------------------------------------------------------------------------- /test/graphs/ps.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | a [style=filled shape=DFDbox] 3 | a -> b 4 | } 5 | -------------------------------------------------------------------------------- /test/graphs/ps_user_shapes.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | n [label=""] 3 | } 4 | -------------------------------------------------------------------------------- /test/graphs/pslib.dot: -------------------------------------------------------------------------------- 1 | digraph test 2 | { 3 | sdl_task [shape=sdl_task, color=red, fillcolor=cyan, style=filled, peripheries=0]; 4 | sdl_task2 [shape=sdl_task, label="sdl_task", peripheries=0]; 5 | sdl_task -> sdl_task2; 6 | sdl_input_from_right [shape=sdl_input_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0]; 7 | sdl_input_from_right2 [shape=sdl_input_from_right, label="sdl_input_from_right ", peripheries=0]; 8 | sdl_input_from_right -> sdl_input_from_right2; 9 | sdl_input_from_left [shape=sdl_input_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0]; 10 | sdl_input_from_left2 [shape=sdl_input_from_left, label=" sdl_input_from_left", peripheries=0]; 11 | sdl_input_from_left -> sdl_input_from_left2; 12 | sdl_priority_input_from_right [shape=sdl_priority_input_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0]; 13 | sdl_priority_input_from_right2 [shape=sdl_priority_input_from_right, label="sdl_priority_input_from_right ", peripheries=0]; 14 | sdl_priority_input_from_right -> sdl_priority_input_from_right2; 15 | sdl_priority_input_from_left [shape=sdl_priority_input_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0]; 16 | sdl_priority_input_from_left2 [shape=sdl_priority_input_from_left, label=" sdl_priority_input_from_left", peripheries=0]; 17 | sdl_priority_input_from_left -> sdl_priority_input_from_left2; 18 | sdl_start [shape=sdl_start, color=red, fillcolor=cyan, style=filled, peripheries=0]; 19 | sdl_start2 [shape=sdl_start, label=" ", peripheries=0]; 20 | sdl_start -> sdl_start2; 21 | sdl_procedure_start [shape=sdl_procedure_start, color=red, fillcolor=cyan, style=filled, peripheries=0]; 22 | sdl_procedure_start2 [shape=sdl_procedure_start, label=" ", peripheries=0]; 23 | sdl_procedure_start -> sdl_procedure_start2; 24 | sdl_state [shape=sdl_state, color=red, fillcolor=cyan, style=filled, peripheries=0]; 25 | sdl_state2 [shape=sdl_state, peripheries=0]; 26 | sdl_state -> sdl_state2; 27 | sdl_output_to_right [shape=sdl_output_to_right, color=red, fillcolor=cyan, style=filled, peripheries=0]; 28 | sdl_output_to_right2 [shape=sdl_output_to_right, label="sdl_output_to_right ", peripheries=0]; 29 | sdl_output_to_right -> sdl_output_to_right2; 30 | sdl_output_to_left [shape=sdl_output_to_left, color=red, fillcolor=cyan, style=filled, peripheries=0]; 31 | sdl_output_to_left2 [shape=sdl_output_to_left, label=" sdl_output_to_left", peripheries=0]; 32 | sdl_output_to_left -> sdl_output_to_left2; 33 | sdl_condition [shape=sdl_condition, color=red, fillcolor=cyan, style=filled, peripheries=0]; 34 | sdl_condition2 [shape=sdl_condition, label=" sdl_condition ", peripheries=0]; 35 | sdl_condition -> sdl_condition2; 36 | sdl_save [shape=sdl_save, color=red, fillcolor=cyan, style=filled, peripheries=0]; 37 | sdl_save2 [shape=sdl_save, label=" sdl_save ", peripheries=0]; 38 | sdl_save -> sdl_save2; 39 | sdl_stop [shape=sdl_stop, peripheries=0]; 40 | sdl_stop2 [shape=sdl_stop, label="", peripheries=0]; 41 | sdl_stop -> sdl_stop2 [arrowhead=none, headclip=false]; 42 | sdl_return [shape=sdl_return, color=red, fillcolor=cyan, style=filled, peripheries=0]; 43 | sdl_return2 [shape=sdl_return, label="", peripheries=0]; 44 | sdl_return -> sdl_return2; 45 | sdl_create [shape=sdl_create, color=red, fillcolor=cyan, style=filled, peripheries=0]; 46 | sdl_create2 [shape=sdl_create, peripheries=0]; 47 | sdl_create -> sdl_create2; 48 | sdl_call [shape=sdl_call, color=red, fillcolor=cyan, style=filled, peripheries=0]; 49 | sdl_call2 [shape=sdl_call, label=" sdl_call ", peripheries=0]; 50 | sdl_call -> sdl_call2; 51 | sdl_text [shape=sdl_text, color=red, fillcolor=cyan, style=filled, peripheries=0]; 52 | sdl_text2 [shape=sdl_text, peripheries=0]; 53 | sdl_text -> sdl_text2; 54 | sdl_text_extension_from_left [shape=sdl_text_extension_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0]; 55 | sdl_text_extension_from_left2 [shape=sdl_text_extension_from_left, peripheries=0]; 56 | sdl_text_extension_from_left -> sdl_text_extension_from_left2; 57 | sdl_text_extension_from_right [shape=sdl_text_extension_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0]; 58 | sdl_text_extension_from_right2 [shape=sdl_text_extension_from_right, peripheries=0]; 59 | sdl_text_extension_from_right -> sdl_text_extension_from_right2; 60 | sdl_comment_from_left [shape=sdl_comment_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0]; 61 | sdl_comment_from_left2 [shape=sdl_comment_from_left, style=dashed, peripheries=0]; 62 | sdl_comment_from_left -> sdl_comment_from_left2; 63 | sdl_comment_from_right [shape=sdl_comment_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0]; 64 | sdl_comment_from_right2 [shape=sdl_comment_from_right, style=dashed, peripheries=0]; 65 | sdl_comment_from_right -> sdl_comment_from_right2; 66 | sdl_connector [shape=sdl_connector, color=red, fillcolor=cyan, style=filled, peripheries=0]; 67 | sdl_connector2 [shape=sdl_connector, peripheries=0]; 68 | sdl_connector -> sdl_connector2; 69 | sdl_set [shape=sdl_set, color=red, fillcolor=cyan, style=filled, peripheries=0]; 70 | sdl_set2 [shape=sdl_set, label=" sdl_set2", peripheries=0]; 71 | sdl_set -> sdl_set2; 72 | sdl_reset [shape=sdl_reset, color=red, fillcolor=cyan, style=filled, peripheries=0]; 73 | sdl_reset2 [shape=sdl_reset, label=" sdl_reset2", peripheries=0]; 74 | sdl_reset -> sdl_reset2; 75 | sdl_export [shape=sdl_export, color=red, fillcolor=cyan, style=filled, peripheries=0]; 76 | sdl_export2 [shape=sdl_export, label=" sdl_export", peripheries=0]; 77 | sdl_export -> sdl_export2; 78 | } -------------------------------------------------------------------------------- /test/graphs/pydot_children_wrong_order_clustlabel.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | subgraph cluster0 { 3 | a->{c b}; 4 | label = "cluster0"; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /test/graphs/pydot_children_wrong_order_style.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | b [style=bold] 3 | c [style=dashed] 4 | d [style=dotted] 5 | e [style="setlinewidth(3)"] 6 | f [style=invis] 7 | g [style=solid] 8 | a -> b [style=bold] 9 | a -> c [style=dashed] 10 | a -> d [style=dotted] 11 | a -> e [style="setlinewidth(3)"] 12 | a -> f [style=invis] 13 | a -> g [style=solid] 14 | B [shape=box,style="bold,rounded"] 15 | C [shape=diamond,style="dashed,rounded"] 16 | D [style="dotted,rounded"] 17 | E [style="setlinewidth(3),rounded"] 18 | BD [style="bold,rounded,diagonals"] 19 | CD [shape=diamond, style="dashed,rounded,diagonals"] 20 | DD [style="dotted,rounded,diagonals"] 21 | ED [style="setlinewidth(3),rounded,diagonals"] 22 | BFD [style="filled, bold,rounded,diagonals"] 23 | CFD [style="filled, dashed,rounded,diagonals"] 24 | DFD [style="filled, dotted,rounded,diagonals"] 25 | EFD [style="filled, setlinewidth(3),rounded,diagonals"] 26 | B -> BD -> BFD 27 | C -> CD -> CFD 28 | D -> DD -> DFD 29 | E -> ED -> EFD 30 | subgraph clusterA { 31 | style=rounded 32 | 1 -> {2 3} 33 | } 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /test/graphs/record.dot: -------------------------------------------------------------------------------- 1 | digraph Alf { 2 | size = "6,9"; 3 | node [ shape = record ]; 4 | Decl [ label = "\n\nDecl|{name|access|decl_flags|extern_c_linkage}"]; 5 | Nontype_decl [ label = "Nontype_decl|{type}"]; 6 | Defined_decl [ label = "Defined_decl|{linkage}"]; 7 | Data_decl [ label = "Data_decl|{storage_class}"]; 8 | Function_decl [ label = "Function_decl|{formals|defaults}"]; 9 | Data [ label = "Data|{initializer}"]; 10 | Function [ label = "Function|{body}"]; 11 | Constructor [ label = "Constructor|{member_initializers}"]; 12 | Aggregate -> Type_decl ; 13 | Class -> Aggregate; 14 | Union -> Aggregate; 15 | Data -> Data_decl; 16 | Data -> Defn; 17 | Data_decl -> Defined_decl; 18 | Data_member -> Nontype_decl ; 19 | Defined_decl -> Nontype_decl; 20 | Defn -> Defined_decl; 21 | Enum -> Type_decl ; 22 | Enumerator -> Nontype_decl ; 23 | Function -> Defn; 24 | Function -> Function_decl; 25 | Constructor -> Function; 26 | Destructor -> Function; 27 | Function_decl -> Defined_decl; 28 | Nontype_decl -> Decl ; 29 | Template_type_arg -> Type_decl ; 30 | Type_decl -> Decl ; 31 | Typedef -> Type_decl ; 32 | } 33 | -------------------------------------------------------------------------------- /test/graphs/record2.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | node [shape=record]; 3 | a [label = " foo | x | bar"]; 4 | b [label = "a | { foo | x | bar } | b"]; 5 | a:f0 -> b:f1 6 | } 7 | -------------------------------------------------------------------------------- /test/graphs/records.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | rankdir=LR; 3 | node [shape=record]; 4 | a [ label =" Graphs can\lbe fun\l| mid| right"]; 5 | b [ label =" | b | " ]; 6 | c [ label =" | c | " ]; 7 | x [ label =" | x | " ]; 8 | y [ label =" | y | " ]; 9 | z [ label =" | z | " ]; 10 | a:bala -> b:left; 11 | a:f1 -> d; 12 | a:f2 -> y:"p1"; 13 | c:"p1" -> d; 14 | b:mid -> x:"p1"; 15 | c:"p2" -> y:"p2"; 16 | b:left -> z:"p2"; 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/rootlabel.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | label = "label demo"; 3 | subgraph cluster0 { 4 | a; 5 | b; 6 | a->b; 7 | label = "cluster0"; 8 | labelloc="bottom" 9 | } 10 | subgraph cluster1 { 11 | c; 12 | d; 13 | c->d; 14 | label = "cluster1"; 15 | labelloc="top" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/graphs/rowcolsep.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | node [shape=box] 3 | 4 | aaa -> bbb 5 | aaa -> BBB 6 | AAA -> BBB 7 | AAA -> bbb 8 | } 9 | -------------------------------------------------------------------------------- /test/graphs/rowe.dot: -------------------------------------------------------------------------------- 1 | digraph rowe { 2 | node [shape = box]; 3 | size = "6,6"; 4 | 1 -> 2; 5 | 1 -> 10; 6 | 10 -> 14; 7 | 10 -> 12; 8 | 10 -> 13; 9 | 10 -> 11; 10 | 2 -> 18; 11 | 2 -> 17; 12 | 2 -> 16; 13 | 2 -> 3; 14 | 11 -> 4; 15 | 16 -> 4; 16 | 3 -> 4; 17 | 4 -> 5; 18 | 13 -> 19; 19 | 17 -> 19; 20 | 5 -> 23; 21 | 5 -> 35; 22 | 5 -> 6; 23 | 37 -> 39; 24 | 37 -> 41; 25 | 37 -> 40; 26 | 37 -> 38; 27 | 19 -> 20; 28 | 19 -> 28; 29 | 19 -> 21; 30 | 12 -> 29; 31 | 18 -> 29; 32 | 41 -> 29; 33 | 28 -> 29; 34 | 29 -> 30; 35 | 30 -> 31; 36 | 30 -> 33; 37 | 31 -> 32; 38 | 21 -> 22; 39 | 32 -> 23; 40 | 22 -> 23; 41 | 6 -> 7; 42 | 23 -> 24; 43 | 7 -> 8; 44 | 24 -> 25; 45 | 24 -> 27; 46 | 35 -> 43; 47 | 35 -> 36; 48 | 8 -> 9; 49 | 14 -> 15; 50 | 39 -> 15; 51 | 20 -> 15; 52 | 33 -> 34; 53 | 43 -> 40; 54 | 43 -> 38; 55 | 25 -> 26; 56 | 9 -> 42; 57 | 10 -> 1; 58 | 15 -> 1; 59 | 23 -> 1; 60 | 31 -> 1; 61 | 2 -> 1; 62 | 25 -> 1; 63 | 9 -> 1; 64 | 38 -> 4; 65 | 26 -> 4; 66 | 42 -> 4; 67 | 40 -> 19; 68 | 36 -> 19; 69 | 34 -> 29; 70 | 33 -> 30; 71 | 27 -> 24; 72 | } 73 | -------------------------------------------------------------------------------- /test/graphs/russian.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | Контрагенты -> БанковскиеСчета; 3 | Организации -> БанковскиеСчета; 4 | ВопросыДляАнкетирования -> ВариантыОтветовОпросов; 5 | Контрагенты -> ДоговорыВзаиморасчетов; 6 | Номенклатура -> ЕдиницыИзмерения; 7 | НоменклатурныеГруппы -> ЕдиницыИзмерения; 8 | СвойстваОбектов -> ЗначенияСвойствОбектов; 9 | } -------------------------------------------------------------------------------- /test/graphs/shapes.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | a [shape=box] 3 | b [shape=polygon] 4 | c [shape=ellipse] 5 | d [shape=circle] 6 | e [shape=point] 7 | f [shape=egg] 8 | g [shape=triangle] 9 | h [shape=plaintext] 10 | i [shape=diamond] 11 | j [shape=trapezium] 12 | k [shape=parallelogram] 13 | l [shape=house] 14 | m [shape=pentagon] 15 | n [shape=hexagon] 16 | o [shape=septagon] 17 | p [shape=octagon] 18 | q [shape=doublecircle] 19 | r [shape=doubleoctagon] 20 | s [shape=tripleoctagon] 21 | t [shape=invtriangle] 22 | u [shape=invtrapezium] 23 | v [shape=invhouse] 24 | w [shape=Mdiamond] 25 | x [shape=Msquare] 26 | y [shape=Mcircle] 27 | z [shape=rect] 28 | 1 [shape=rectangle] 29 | 2 [shape=none] 30 | 3 [shape=note] 31 | 4 [shape=tab] 32 | 5 [shape=box3d] 33 | 6 [shape=component] 34 | a -> b -> c -> d -> e -> f -> g 35 | h -> i -> j -> k -> l -> m -> n 36 | o -> p -> q -> r -> s -> t -> u 37 | v -> w -> x -> y -> z -> 1 -> 2 38 | 3 -> 4 -> 5 -> 6 39 | } 40 | -------------------------------------------------------------------------------- /test/graphs/shells.dot: -------------------------------------------------------------------------------- 1 | digraph shells { 2 | size="7,8"; 3 | node [fontsize=24, shape = plaintext]; 4 | 5 | 1972 -> 1976; 6 | 1976 -> 1978; 7 | 1978 -> 1980; 8 | 1980 -> 1982; 9 | 1982 -> 1984; 10 | 1984 -> 1986; 11 | 1986 -> 1988; 12 | 1988 -> 1990; 13 | 1990 -> future; 14 | 15 | node [fontsize=20, shape = box]; 16 | { rank=same; 1976 Mashey Bourne; } 17 | { rank=same; 1978 Formshell csh; } 18 | { rank=same; 1980 esh vsh; } 19 | { rank=same; 1982 ksh "System-V"; } 20 | { rank=same; 1984 v9sh tcsh; } 21 | { rank=same; 1986 "ksh-i"; } 22 | { rank=same; 1988 KornShell Perl rc; } 23 | { rank=same; 1990 tcl Bash; } 24 | { rank=same; "future" POSIX "ksh-POSIX"; } 25 | 26 | Thompson -> Mashey; 27 | Thompson -> Bourne; 28 | Thompson -> csh; 29 | csh -> tcsh; 30 | Bourne -> ksh; 31 | Bourne -> esh; 32 | Bourne -> vsh; 33 | Bourne -> "System-V"; 34 | Bourne -> v9sh; 35 | v9sh -> rc; 36 | Bourne -> Bash; 37 | "ksh-i" -> Bash; 38 | KornShell -> Bash; 39 | esh -> ksh; 40 | vsh -> ksh; 41 | Formshell -> ksh; 42 | csh -> ksh; 43 | KornShell -> POSIX; 44 | "System-V" -> POSIX; 45 | ksh -> "ksh-i"; 46 | "ksh-i" -> KornShell; 47 | KornShell -> "ksh-POSIX"; 48 | Bourne -> Formshell; 49 | 50 | edge [style=invis]; 51 | 1984 -> v9sh -> tcsh ; 52 | 1988 -> rc -> KornShell; 53 | Formshell -> csh; 54 | KornShell -> Perl; 55 | } 56 | -------------------------------------------------------------------------------- /test/graphs/size.dot: -------------------------------------------------------------------------------- 1 | /* Courtesy of Ian Darwin 2 | * and Geoff Collyer 3 | * Mildly updated by Ian Darwin in 2000. 4 | */ 5 | digraph unix { 6 | node [color=lightblue2, style=filled]; 7 | "5th Edition" -> "6th Edition"; 8 | "5th Edition" -> "PWB 1.0"; 9 | "6th Edition" -> "LSX"; 10 | "6th Edition" -> "1 BSD"; 11 | "6th Edition" -> "Mini Unix"; 12 | "6th Edition" -> "Wollongong"; 13 | "6th Edition" -> "Interdata"; 14 | "Interdata" -> "Unix/TS 3.0"; 15 | "Interdata" -> "PWB 2.0"; 16 | "Interdata" -> "7th Edition"; 17 | "7th Edition" -> "8th Edition"; 18 | "7th Edition" -> "32V"; 19 | "7th Edition" -> "V7M"; 20 | "7th Edition" -> "Ultrix-11"; 21 | "7th Edition" -> "Xenix"; 22 | "7th Edition" -> "UniPlus+"; 23 | "V7M" -> "Ultrix-11"; 24 | "8th Edition" -> "9th Edition"; 25 | "9th Edition" -> "10th Edition"; 26 | "1 BSD" -> "2 BSD"; 27 | "2 BSD" -> "2.8 BSD"; 28 | "2.8 BSD" -> "Ultrix-11"; 29 | "2.8 BSD" -> "2.9 BSD"; 30 | "32V" -> "3 BSD"; 31 | "3 BSD" -> "4 BSD"; 32 | "4 BSD" -> "4.1 BSD"; 33 | "4.1 BSD" -> "4.2 BSD"; 34 | "4.1 BSD" -> "2.8 BSD"; 35 | "4.1 BSD" -> "8th Edition"; 36 | "4.2 BSD" -> "4.3 BSD"; 37 | "4.2 BSD" -> "Ultrix-32"; 38 | "4.3 BSD" -> "4.4 BSD"; 39 | "4.4 BSD" -> "FreeBSD"; 40 | "4.4 BSD" -> "NetBSD"; 41 | "4.4 BSD" -> "OpenBSD"; 42 | "PWB 1.0" -> "PWB 1.2"; 43 | "PWB 1.0" -> "USG 1.0"; 44 | "PWB 1.2" -> "PWB 2.0"; 45 | "USG 1.0" -> "CB Unix 1"; 46 | "USG 1.0" -> "USG 2.0"; 47 | "CB Unix 1" -> "CB Unix 2"; 48 | "CB Unix 2" -> "CB Unix 3"; 49 | "CB Unix 3" -> "Unix/TS++"; 50 | "CB Unix 3" -> "PDP-11 Sys V"; 51 | "USG 2.0" -> "USG 3.0"; 52 | "USG 3.0" -> "Unix/TS 3.0"; 53 | "PWB 2.0" -> "Unix/TS 3.0"; 54 | "Unix/TS 1.0" -> "Unix/TS 3.0"; 55 | "Unix/TS 3.0" -> "TS 4.0"; 56 | "Unix/TS++" -> "TS 4.0"; 57 | "CB Unix 3" -> "TS 4.0"; 58 | "TS 4.0" -> "System V.0"; 59 | "System V.0" -> "System V.2"; 60 | "System V.2" -> "System V.3"; 61 | "System V.3" -> "System V.4"; 62 | } 63 | -------------------------------------------------------------------------------- /test/graphs/states.dot: -------------------------------------------------------------------------------- 1 | /* 2 | The command line is 3 | 4 | dot -Tps -Grankdir=LR states.dot > states.ps 5 | 6 | and the file is: 7 | */ 8 | digraph states { 9 | size="3,2"; 10 | rankdir=LR; 11 | node [shape=ellipse]; 12 | empty [label = "Empty"]; 13 | stolen [label = "Stolen"]; 14 | waiting [label = "Waiting"]; 15 | full [label = "Full"]; 16 | empty -> full [label = "return"] 17 | empty -> stolen [label = "dispatch", wt=28] 18 | stolen -> full [label = "return"]; 19 | stolen -> waiting [label = "touch"]; 20 | waiting -> full [label = "return"]; 21 | } 22 | -------------------------------------------------------------------------------- /test/graphs/structs.dot: -------------------------------------------------------------------------------- 1 | digraph structs { 2 | node [shape=record]; 3 | struct1 [shape=record,label=" left| middle| right"]; 4 | struct2 [shape=record,label=" one| two"]; 5 | struct3 [shape=record,label="hello\nworld |{ b |{c| d|e}| f}| g | h"]; 6 | struct1:f1 -> struct2:f0; 7 | struct1:f2 -> struct3:here; 8 | } 9 | 10 | -------------------------------------------------------------------------------- /test/graphs/train11.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | size="6,6"; 3 | node [shape=circle,fontsize=8]; 4 | rankdir=LR; 5 | st9 -> st9 [label="11/1"]; 6 | st9 -> st10 [label="10/1"]; 7 | st8 -> st8 [label="10/1"]; 8 | st8 -> st0 [label="00/-"]; 9 | st7 -> st8 [label="10/1"]; 10 | st7 -> st7 [label="00/1"]; 11 | st6 -> st6 [label="01/1"]; 12 | st6 -> st0 [label="00/-"]; 13 | st5 -> st6 [label="01/1"]; 14 | st5 -> st5 [label="11/1"]; 15 | st4 -> st4 [label="01/1"]; 16 | st4 -> st0 [label="00/-"]; 17 | st3 -> st4 [label="01/1"]; 18 | st3 -> st3 [label="00/1"]; 19 | st2 -> st9 [label="11/1"]; 20 | st2 -> st7 [label="00/1"]; 21 | st2 -> st2 [label="01/1"]; 22 | st10 -> st10 [label="10/1"]; 23 | st10 -> st0 [label="00/-"]; 24 | st1 -> st5 [label="11/1"]; 25 | st1 -> st3 [label="00/1"]; 26 | st1 -> st1 [label="10/1"]; 27 | st0 -> st2 [label="01/-"]; 28 | st0 -> st1 [label="10/-"]; 29 | st0 -> st0 [label="00/0"]; 30 | } 31 | -------------------------------------------------------------------------------- /test/graphs/trapeziumlr.dot: -------------------------------------------------------------------------------- 1 | digraph test { 2 | 3 | size="7,9.5"; 4 | page="8,10.5"; 5 | ratio=fill; 6 | rankdir=LR; 7 | 8 | { rank=same; 9 | node [shape=house]; 10 | A;C;E;G;I;K;M;O;Q;S;U;W;Y; 11 | node [shape=invhouse]; 12 | B;D;F;H;J;L;N;P;R;T;V;X;Z; 13 | } 14 | 15 | { rank=same; 16 | node [shape=trapezium]; 17 | "Trapezium"; 18 | ordering=out; 19 | } 20 | 21 | Trapezium -> A; 22 | Trapezium -> B; 23 | Trapezium -> C; 24 | Trapezium -> D; 25 | Trapezium -> E; 26 | Trapezium -> F; 27 | Trapezium -> G; 28 | Trapezium -> H; 29 | Trapezium -> I; 30 | Trapezium -> J; 31 | Trapezium -> K; 32 | Trapezium -> L; 33 | Trapezium -> M; 34 | Trapezium -> N; 35 | Trapezium -> O; 36 | Trapezium -> P; 37 | Trapezium -> Q; 38 | Trapezium -> R; 39 | Trapezium -> S; 40 | Trapezium -> T; 41 | Trapezium -> U; 42 | Trapezium -> V; 43 | Trapezium -> W; 44 | Trapezium -> X; 45 | Trapezium -> Y; 46 | Trapezium -> Z; 47 | 48 | { rank=same; 49 | node [shape=parallelogram]; 50 | a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z; 51 | } 52 | 53 | a -> Trapezium; 54 | b -> Trapezium; 55 | c -> Trapezium; 56 | d -> Trapezium; 57 | e -> Trapezium; 58 | f -> Trapezium; 59 | g -> Trapezium; 60 | h -> Trapezium; 61 | i -> Trapezium; 62 | j -> Trapezium; 63 | k -> Trapezium; 64 | l -> Trapezium; 65 | m -> Trapezium; 66 | n -> Trapezium; 67 | o -> Trapezium; 68 | p -> Trapezium; 69 | q -> Trapezium; 70 | r -> Trapezium; 71 | s -> Trapezium; 72 | t -> Trapezium; 73 | u -> Trapezium; 74 | v -> Trapezium; 75 | w -> Trapezium; 76 | x -> Trapezium; 77 | y -> Trapezium; 78 | z -> Trapezium; 79 | } 80 | -------------------------------------------------------------------------------- /test/graphs/tree.dot: -------------------------------------------------------------------------------- 1 | digraph g { 2 | node [shape = record,height=.1]; 3 | node0[label = " | G| "]; 4 | node1[label = " | E| "]; 5 | node2[label = " | B| "]; 6 | node3[label = " | F| "]; 7 | node4[label = " | R| "]; 8 | node5[label = " | H| "]; 9 | node6[label = " | Y| "]; 10 | node7[label = " | A| "]; 11 | node8[label = " | C| "]; 12 | "node0":f2 -> "node4":f1; 13 | "node0":f0 -> "node1":f1; 14 | "node1":f0 -> "node2":f1; 15 | "node1":f2 -> "node3":f1; 16 | "node2":f2 -> "node8":f1; 17 | "node2":f0 -> "node7":f1; 18 | "node4":f2 -> "node6":f1; 19 | "node4":f0 -> "node5":f1; 20 | } 21 | -------------------------------------------------------------------------------- /test/graphs/triedds.dot: -------------------------------------------------------------------------------- 1 | digraph g { 2 | graph [ 3 | rankdir = "LR" 4 | ]; 5 | node [ 6 | fontsize = "16" 7 | shape = "ellipse" 8 | ]; 9 | edge [ 10 | ]; 11 | "node0" [ 12 | label = " 0x10ba8| " 13 | shape = "record" 14 | ]; 15 | "node1" [ 16 | label = " 0xf7fc4380| | |-1" 17 | shape = "record" 18 | ]; 19 | "node2" [ 20 | label = " 0xf7fc44b8| | |2" 21 | shape = "record" 22 | ]; 23 | "node3" [ 24 | label = " 3.43322790286038071e-06|44.79998779296875|0" 25 | shape = "record" 26 | ]; 27 | "node4" [ 28 | label = " 0xf7fc4380| | |2" 29 | shape = "record" 30 | ]; 31 | "node5" [ 32 | label = " (nil)| | |-1" 33 | shape = "record" 34 | ]; 35 | "node6" [ 36 | label = " 0xf7fc4380| | |1" 37 | shape = "record" 38 | ]; 39 | "node7" [ 40 | label = " 0xf7fc4380| | |2" 41 | shape = "record" 42 | ]; 43 | "node8" [ 44 | label = " (nil)| | |-1" 45 | shape = "record" 46 | ]; 47 | "node9" [ 48 | label = " (nil)| | |-1" 49 | shape = "record" 50 | ]; 51 | "node10" [ 52 | label = " (nil)| | |-1" 53 | shape = "record" 54 | ]; 55 | "node11" [ 56 | label = " (nil)| | |-1" 57 | shape = "record" 58 | ]; 59 | "node12" [ 60 | label = " 0xf7fc43e0| | |1" 61 | shape = "record" 62 | ]; 63 | "node0":f0 -> "node1":f0 [ 64 | id = 0 65 | ]; 66 | "node0":f1 -> "node2":f0 [ 67 | id = 1 68 | ]; 69 | "node1":f0 -> "node3":f0 [ 70 | id = 2 71 | ]; 72 | "node1":f1 -> "node4":f0 [ 73 | id = 3 74 | ]; 75 | "node1":f2 -> "node5":f0 [ 76 | id = 4 77 | ]; 78 | "node4":f0 -> "node3":f0 [ 79 | id = 5 80 | ]; 81 | "node4":f1 -> "node6":f0 [ 82 | id = 6 83 | ]; 84 | "node4":f2 -> "node10":f0 [ 85 | id = 7 86 | ]; 87 | "node6":f0 -> "node3":f0 [ 88 | id = 8 89 | ]; 90 | "node6":f1 -> "node7":f0 [ 91 | id = 9 92 | ]; 93 | "node6":f2 -> "node9":f0 [ 94 | id = 10 95 | ]; 96 | "node7":f0 -> "node3":f0 [ 97 | id = 11 98 | ]; 99 | "node7":f1 -> "node1":f0 [ 100 | id = 12 101 | ]; 102 | "node7":f2 -> "node8":f0 [ 103 | id = 13 104 | ]; 105 | "node10":f1 -> "node11":f0 [ 106 | id = 14 107 | ]; 108 | "node10":f2 -> "node12":f0 [ 109 | id = 15 110 | ]; 111 | "node11":f2 -> "node1":f0 [ 112 | id = 16 113 | ]; 114 | } 115 | -------------------------------------------------------------------------------- /test/graphs/try.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | subgraph cluster_small { 3 | a -> b; 4 | label=small; 5 | } 6 | 7 | subgraph cluster_big { 8 | p -> q -> r -> s -> t; 9 | label=big; 10 | t -> p; 11 | } 12 | 13 | t -> a; 14 | b -> q; 15 | } 16 | -------------------------------------------------------------------------------- /test/graphs/unix.dot: -------------------------------------------------------------------------------- 1 | /* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */ 2 | digraph unix { 3 | size="6,6"; 4 | "5th Edition" -> "6th Edition"; 5 | "5th Edition" -> "PWB 1.0"; 6 | "6th Edition" -> "LSX"; 7 | "6th Edition" -> "1 BSD"; 8 | "6th Edition" -> "Mini Unix"; 9 | "6th Edition" -> "Wollongong"; 10 | "6th Edition" -> "Interdata"; 11 | "Interdata" -> "Unix/TS 3.0"; 12 | "Interdata" -> "PWB 2.0"; 13 | "Interdata" -> "7th Edition"; 14 | "7th Edition" -> "8th Edition"; 15 | "7th Edition" -> "32V"; 16 | "7th Edition" -> "V7M"; 17 | "7th Edition" -> "Ultrix-11"; 18 | "7th Edition" -> "Xenix"; 19 | "7th Edition" -> "UniPlus+"; 20 | "V7M" -> "Ultrix-11"; 21 | "8th Edition" -> "9th Edition"; 22 | "1 BSD" -> "2 BSD"; 23 | "2 BSD" -> "2.8 BSD"; 24 | "2.8 BSD" -> "Ultrix-11"; 25 | "2.8 BSD" -> "2.9 BSD"; 26 | "32V" -> "3 BSD"; 27 | "3 BSD" -> "4 BSD"; 28 | "4 BSD" -> "4.1 BSD"; 29 | "4.1 BSD" -> "4.2 BSD"; 30 | "4.1 BSD" -> "2.8 BSD"; 31 | "4.1 BSD" -> "8th Edition"; 32 | "4.2 BSD" -> "4.3 BSD"; 33 | "4.2 BSD" -> "Ultrix-32"; 34 | "PWB 1.0" -> "PWB 1.2"; 35 | "PWB 1.0" -> "USG 1.0"; 36 | "PWB 1.2" -> "PWB 2.0"; 37 | "USG 1.0" -> "CB Unix 1"; 38 | "USG 1.0" -> "USG 2.0"; 39 | "CB Unix 1" -> "CB Unix 2"; 40 | "CB Unix 2" -> "CB Unix 3"; 41 | "CB Unix 3" -> "Unix/TS++"; 42 | "CB Unix 3" -> "PDP-11 Sys V"; 43 | "USG 2.0" -> "USG 3.0"; 44 | "USG 3.0" -> "Unix/TS 3.0"; 45 | "PWB 2.0" -> "Unix/TS 3.0"; 46 | "Unix/TS 1.0" -> "Unix/TS 3.0"; 47 | "Unix/TS 3.0" -> "TS 4.0"; 48 | "Unix/TS++" -> "TS 4.0"; 49 | "CB Unix 3" -> "TS 4.0"; 50 | "TS 4.0" -> "System V.0"; 51 | "System V.0" -> "System V.2"; 52 | "System V.2" -> "System V.3"; 53 | } 54 | -------------------------------------------------------------------------------- /test/graphs/unix2.dot: -------------------------------------------------------------------------------- 1 | /* Courtesy of Ian Darwin 2 | * and Geoff Collyer 3 | * Mildly updated by Ian Darwin in 2000. 4 | */ 5 | digraph unix { 6 | size="6,6"; 7 | node [color=lightblue2, style=filled]; 8 | "5th Edition" -> "6th Edition"; 9 | "5th Edition" -> "PWB 1.0"; 10 | "6th Edition" -> "LSX"; 11 | "6th Edition" -> "1 BSD"; 12 | "6th Edition" -> "Mini Unix"; 13 | "6th Edition" -> "Wollongong"; 14 | "6th Edition" -> "Interdata"; 15 | "Interdata" -> "Unix/TS 3.0"; 16 | "Interdata" -> "PWB 2.0"; 17 | "Interdata" -> "7th Edition"; 18 | "7th Edition" -> "8th Edition"; 19 | "7th Edition" -> "32V"; 20 | "7th Edition" -> "V7M"; 21 | "7th Edition" -> "Ultrix-11"; 22 | "7th Edition" -> "Xenix"; 23 | "7th Edition" -> "UniPlus+"; 24 | "V7M" -> "Ultrix-11"; 25 | "8th Edition" -> "9th Edition"; 26 | "9th Edition" -> "10th Edition"; 27 | "1 BSD" -> "2 BSD"; 28 | "2 BSD" -> "2.8 BSD"; 29 | "2.8 BSD" -> "Ultrix-11"; 30 | "2.8 BSD" -> "2.9 BSD"; 31 | "32V" -> "3 BSD"; 32 | "3 BSD" -> "4 BSD"; 33 | "4 BSD" -> "4.1 BSD"; 34 | "4.1 BSD" -> "4.2 BSD"; 35 | "4.1 BSD" -> "2.8 BSD"; 36 | "4.1 BSD" -> "8th Edition"; 37 | "4.2 BSD" -> "4.3 BSD"; 38 | "4.2 BSD" -> "Ultrix-32"; 39 | "4.3 BSD" -> "4.4 BSD"; 40 | "4.4 BSD" -> "FreeBSD"; 41 | "4.4 BSD" -> "NetBSD"; 42 | "4.4 BSD" -> "OpenBSD"; 43 | "PWB 1.0" -> "PWB 1.2"; 44 | "PWB 1.0" -> "USG 1.0"; 45 | "PWB 1.2" -> "PWB 2.0"; 46 | "USG 1.0" -> "CB Unix 1"; 47 | "USG 1.0" -> "USG 2.0"; 48 | "CB Unix 1" -> "CB Unix 2"; 49 | "CB Unix 2" -> "CB Unix 3"; 50 | "CB Unix 3" -> "Unix/TS++"; 51 | "CB Unix 3" -> "PDP-11 Sys V"; 52 | "USG 2.0" -> "USG 3.0"; 53 | "USG 3.0" -> "Unix/TS 3.0"; 54 | "PWB 2.0" -> "Unix/TS 3.0"; 55 | "Unix/TS 1.0" -> "Unix/TS 3.0"; 56 | "Unix/TS 3.0" -> "TS 4.0"; 57 | "Unix/TS++" -> "TS 4.0"; 58 | "CB Unix 3" -> "TS 4.0"; 59 | "TS 4.0" -> "System V.0"; 60 | "System V.0" -> "System V.2"; 61 | "System V.2" -> "System V.3"; 62 | "System V.3" -> "System V.4"; 63 | } 64 | -------------------------------------------------------------------------------- /test/graphs/unix2k.dot: -------------------------------------------------------------------------------- 1 | /* Courtesy of Ian Darwin 2 | * and Geoff Collyer 3 | * Mildly updated by Ian Darwin in 2000. 4 | */ 5 | digraph unix { 6 | size="6,6"; 7 | node [color=lightblue2, style=filled]; 8 | "5th Edition" -> "6th Edition"; 9 | "5th Edition" -> "PWB 1.0"; 10 | "6th Edition" -> "LSX"; 11 | "6th Edition" -> "1 BSD"; 12 | "6th Edition" -> "Mini Unix"; 13 | "6th Edition" -> "Wollongong"; 14 | "6th Edition" -> "Interdata"; 15 | "Interdata" -> "Unix/TS 3.0"; 16 | "Interdata" -> "PWB 2.0"; 17 | "Interdata" -> "7th Edition"; 18 | "7th Edition" -> "8th Edition"; 19 | "7th Edition" -> "32V"; 20 | "7th Edition" -> "V7M"; 21 | "7th Edition" -> "Ultrix-11"; 22 | "7th Edition" -> "Xenix"; 23 | "7th Edition" -> "UniPlus+"; 24 | "V7M" -> "Ultrix-11"; 25 | "8th Edition" -> "9th Edition"; 26 | "9th Edition" -> "10th Edition"; 27 | "1 BSD" -> "2 BSD"; 28 | "2 BSD" -> "2.8 BSD"; 29 | "2.8 BSD" -> "Ultrix-11"; 30 | "2.8 BSD" -> "2.9 BSD"; 31 | "32V" -> "3 BSD"; 32 | "3 BSD" -> "4 BSD"; 33 | "4 BSD" -> "4.1 BSD"; 34 | "4.1 BSD" -> "4.2 BSD"; 35 | "4.1 BSD" -> "2.8 BSD"; 36 | "4.1 BSD" -> "8th Edition"; 37 | "4.2 BSD" -> "4.3 BSD"; 38 | "4.2 BSD" -> "Ultrix-32"; 39 | "4.3 BSD" -> "4.4 BSD"; 40 | "4.4 BSD" -> "FreeBSD"; 41 | "4.4 BSD" -> "NetBSD"; 42 | "4.4 BSD" -> "OpenBSD"; 43 | "PWB 1.0" -> "PWB 1.2"; 44 | "PWB 1.0" -> "USG 1.0"; 45 | "PWB 1.2" -> "PWB 2.0"; 46 | "USG 1.0" -> "CB Unix 1"; 47 | "USG 1.0" -> "USG 2.0"; 48 | "CB Unix 1" -> "CB Unix 2"; 49 | "CB Unix 2" -> "CB Unix 3"; 50 | "CB Unix 3" -> "Unix/TS++"; 51 | "CB Unix 3" -> "PDP-11 Sys V"; 52 | "USG 2.0" -> "USG 3.0"; 53 | "USG 3.0" -> "Unix/TS 3.0"; 54 | "PWB 2.0" -> "Unix/TS 3.0"; 55 | "Unix/TS 1.0" -> "Unix/TS 3.0"; 56 | "Unix/TS 3.0" -> "TS 4.0"; 57 | "Unix/TS++" -> "TS 4.0"; 58 | "CB Unix 3" -> "TS 4.0"; 59 | "TS 4.0" -> "System V.0"; 60 | "System V.0" -> "System V.2"; 61 | "System V.2" -> "System V.3"; 62 | "System V.3" -> "System V.4"; 63 | } 64 | -------------------------------------------------------------------------------- /test/graphs/url.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | 3 | URL="http://www.graphviz.org/doc/info/output.html" 4 | label=output 5 | lang [ URL="http://www.graphviz.org/doc/info/lang.html" ] 6 | colors [ 7 | style=filled 8 | fillcolor=lightblue 9 | URL="http://www.graphviz.org/doc/info/output.html" 10 | label=<
colors
>]; 11 | 12 | subgraph cluster0 { 13 | style=filled 14 | fillcolor=yellow 15 | URL="http://www.graphviz.org/doc/info/arrows.html" 16 | label=arrows 17 | command [ style=filled 18 | fillcolor=grey 19 | URL="http://www.graphviz.org/doc/info/command.html" ] 20 | name [ URL="\G \N"] 21 | } 22 | lang -> command [ URL="http://www.graphviz.org/doc/info/shapes.html" 23 | ] 24 | lang -> colors [ URL="\E" edgetooltip=self ] 25 | lang -> size [ URL="headurl" edgetooltip=headurl headlabel=size headULR=headsize] 26 | word -> size [ URL="tailurl" taillabel=size tailULR=tailsize] 27 | word -> garf [ URL="labelurl" label=garf labelURL=garf] 28 | line -> all [ 29 | URL="labelurl" 30 | edgeurl="edgeurl" 31 | edgetooltip=edgetooltip 32 | label=garf 33 | labelURL=garf 34 | headURL=headURL 35 | headlabel=headlabel 36 | headtooltip=headtooltip 37 | tailURL=tailURL 38 | taillabel=taillabel 39 | tailtooltip=tailtooltip 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /test/graphs/user_shapes.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | n [label="", shapefile="jcr.gif"] 3 | x [width=3, height=3, label="", shapefile="jcr.gif"] 4 | m -> n -> x 5 | } 6 | -------------------------------------------------------------------------------- /test/graphs/viewfile.dot: -------------------------------------------------------------------------------- 1 | digraph Viewfile { 2 | node [ style = filled ]; 3 | atoi [color=green]; 4 | chkmalloc [color=green]; 5 | close [color=green]; 6 | error [color=blue]; 7 | exit [color=blue]; 8 | fclose [color=green]; 9 | fgets [color=red]; 10 | fopen [color=green]; 11 | fprintf [color=blue]; 12 | free [color=blue]; 13 | free_list [color=blue]; 14 | fstat [color=green]; 15 | getopt [color=green]; 16 | init_list [color=green]; 17 | insert_list [color=green]; 18 | main [color=green]; 19 | makeargs [color=blue]; 20 | makepairs [color=green]; 21 | malloc [color=green]; 22 | open [color=green]; 23 | printf [color=red]; 24 | read [color=green]; 25 | rewind [color=green]; 26 | viewline [color=green]; 27 | viewlines [color=green]; 28 | walk_list [color=green]; 29 | write [color=green]; 30 | fclose -> close [color=green]; 31 | fgets -> fstat [color=green]; 32 | fgets -> read [color=green]; 33 | fopen -> open [color=green]; 34 | printf -> write [color=green]; 35 | main -> fgets [color=blue]; 36 | main -> getopt [color=green]; 37 | main -> makeargs [color=blue]; 38 | main -> makepairs [color=green]; 39 | main -> chkmalloc [color=green]; 40 | main -> error [color=blue]; 41 | main -> viewlines [color=green]; 42 | makeargs -> chkmalloc [color=blue]; 43 | makepairs -> atoi [color=green]; 44 | makepairs -> init_list [color=green]; 45 | makepairs -> insert_list [color=green]; 46 | makepairs -> chkmalloc [color=green]; 47 | free_list -> free [color=blue]; 48 | init_list -> chkmalloc [color=green]; 49 | insert_list -> chkmalloc [color=green]; 50 | walk_list -> error [color=blue]; 51 | walk_list -> viewline [color=green]; 52 | chkmalloc -> malloc [color=green]; 53 | chkmalloc -> error [color=blue]; 54 | error -> exit [color=blue]; 55 | error -> fprintf [color=blue]; 56 | error -> error [color=blue]; 57 | viewline -> fgets [color=red]; 58 | viewline -> printf [color=red]; 59 | viewline -> rewind [color=green]; 60 | viewlines -> fclose [color=green]; 61 | viewlines -> fopen [color=green]; 62 | viewlines -> walk_list [color=green]; 63 | viewlines -> viewline [color=blue]; 64 | } 65 | -------------------------------------------------------------------------------- /test/graphs/weight.dot: -------------------------------------------------------------------------------- 1 | /* Courtesy of Ian Darwin 2 | * and Geoff Collyer 3 | * Mildly updated by Ian Darwin in 2000. 4 | */ 5 | digraph unix { 6 | node [color=lightblue2, style=filled]; 7 | "5th Edition" -> "6th Edition"; 8 | "5th Edition" -> "PWB 1.0"; 9 | "6th Edition" -> "LSX"; 10 | "6th Edition" -> "1 BSD"; 11 | "6th Edition" -> "Mini Unix"; 12 | "6th Edition" -> "Wollongong"; 13 | "6th Edition" -> "Interdata"; 14 | "Interdata" -> "Unix/TS 3.0"; 15 | "Interdata" -> "PWB 2.0"; 16 | "Interdata" -> "7th Edition"; 17 | "7th Edition" -> "8th Edition" [weight=1000]; 18 | "7th Edition" -> "32V"; 19 | "7th Edition" -> "V7M"; 20 | "7th Edition" -> "Ultrix-11"; 21 | "7th Edition" -> "Xenix"; 22 | "7th Edition" -> "UniPlus+"; 23 | "V7M" -> "Ultrix-11"; 24 | "8th Edition" -> "9th Edition"; 25 | "9th Edition" -> "10th Edition"; 26 | "1 BSD" -> "2 BSD"; 27 | "2 BSD" -> "2.8 BSD"; 28 | "2.8 BSD" -> "Ultrix-11"; 29 | "2.8 BSD" -> "2.9 BSD"; 30 | "32V" -> "3 BSD"; 31 | "3 BSD" -> "4 BSD"; 32 | "4 BSD" -> "4.1 BSD"; 33 | "4.1 BSD" -> "4.2 BSD"; 34 | "4.1 BSD" -> "2.8 BSD"; 35 | "4.1 BSD" -> "8th Edition"; 36 | "4.2 BSD" -> "4.3 BSD"; 37 | "4.2 BSD" -> "Ultrix-32"; 38 | "4.3 BSD" -> "4.4 BSD"; 39 | "4.4 BSD" -> "FreeBSD"; 40 | "4.4 BSD" -> "NetBSD"; 41 | "4.4 BSD" -> "OpenBSD"; 42 | "PWB 1.0" -> "PWB 1.2"; 43 | "PWB 1.0" -> "USG 1.0"; 44 | "PWB 1.2" -> "PWB 2.0"; 45 | "USG 1.0" -> "CB Unix 1"; 46 | "USG 1.0" -> "USG 2.0"; 47 | "CB Unix 1" -> "CB Unix 2"; 48 | "CB Unix 2" -> "CB Unix 3"; 49 | "CB Unix 3" -> "Unix/TS++"; 50 | "CB Unix 3" -> "PDP-11 Sys V"; 51 | "USG 2.0" -> "USG 3.0"; 52 | "USG 3.0" -> "Unix/TS 3.0"; 53 | "PWB 2.0" -> "Unix/TS 3.0"; 54 | "Unix/TS 1.0" -> "Unix/TS 3.0"; 55 | "Unix/TS 3.0" -> "TS 4.0"; 56 | "Unix/TS++" -> "TS 4.0"; 57 | "CB Unix 3" -> "TS 4.0"; 58 | "TS 4.0" -> "System V.0"; 59 | "System V.0" -> "System V.2"; 60 | "System V.2" -> "System V.3"; 61 | "System V.3" -> "System V.4"; 62 | } 63 | -------------------------------------------------------------------------------- /test/graphs/world.dot: -------------------------------------------------------------------------------- 1 | digraph world { 2 | size="7,7"; 3 | {rank=same; S8 S24 S1 S35 S30;} 4 | {rank=same; T8 T24 T1 T35 T30;} 5 | {rank=same; 43 37 36 10 2;} 6 | {rank=same; 25 9 38 40 13 17 12 18;} 7 | {rank=same; 26 42 11 3 33 19 39 14 16;} 8 | {rank=same; 4 31 34 21 41 28 20;} 9 | {rank=same; 27 5 22 32 29 15;} 10 | {rank=same; 6 23;} 11 | {rank=same; 7;} 12 | 13 | S8 -> 9; 14 | S24 -> 25; 15 | S24 -> 27; 16 | S1 -> 2; 17 | S1 -> 10; 18 | S35 -> 43; 19 | S35 -> 36; 20 | S30 -> 31; 21 | S30 -> 33; 22 | 9 -> 42; 23 | 9 -> T1; 24 | 25 -> T1; 25 | 25 -> 26; 26 | 27 -> T24; 27 | 2 -> {3 ; 16 ; 17 ; T1 ; 18} 28 | 10 -> { 11 ; 14 ; T1 ; 13; 12;} 29 | 31 -> T1; 30 | 31 -> 32; 31 | 33 -> T30; 32 | 33 -> 34; 33 | 42 -> 4; 34 | 26 -> 4; 35 | 3 -> 4; 36 | 16 -> 15; 37 | 17 -> 19; 38 | 18 -> 29; 39 | 11 -> 4; 40 | 14 -> 15; 41 | 37 -> {39 ; 41 ; 38 ; 40;} 42 | 13 -> 19; 43 | 12 -> 29; 44 | 43 -> 38; 45 | 43 -> 40; 46 | 36 -> 19; 47 | 32 -> 23; 48 | 34 -> 29; 49 | 39 -> 15; 50 | 41 -> 29; 51 | 38 -> 4; 52 | 40 -> 19; 53 | 4 -> 5; 54 | 19 -> {21 ; 20 ; 28;} 55 | 5 -> {6 ; T35 ; 23;} 56 | 21 -> 22; 57 | 20 -> 15; 58 | 28 -> 29; 59 | 6 -> 7; 60 | 15 -> T1; 61 | 22 -> T35; 62 | 22 -> 23; 63 | 29 -> T30; 64 | 7 -> T8; 65 | 23 -> T24; 66 | 23 -> T1; 67 | } 68 | -------------------------------------------------------------------------------- /test/my_tests/escaped_newlines.dot: -------------------------------------------------------------------------------- 1 | digraph fa { 2 | 1 -> 1 [pos="e,724\ 3 | 5\ 4 | ,\ 5 | 687\ 6 | 7 70\ 7 | 55,6992"] 8 | } 9 | -------------------------------------------------------------------------------- /test/my_tests/html_labels.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | [label=cholo]; 3 | is a node> [label=<
is another
>]; 4 | is another>; 5 | html> -> html>; 6 | "html>" -> is a node>; 7 | is a node> -> is another>; 8 | } -------------------------------------------------------------------------------- /test/my_tests/numeric_ids_unicode.dot: -------------------------------------------------------------------------------- 1 | digraph G { 2 | 0[comment="{412A0B96-B10E-4227-9E99-4AB2CC00142C},{0A353BBE-A648-415A-BC5E-431ED6F5E7FD}", label="Wagen anheben\n[Bordwerkzeug-Tasche]"]; 3 | 1[comment="{5BF457F9-46A0-488C-A6C9-6F7281AC06AA},{E5F44E0B-8926-4B67-818A-F9E7A537D404}", label="Korrosionsbeständigkeit sicherstellen\n[Wagenheber (Zukaufteil)]"]; 4 | 2[comment="{3F78AD5D-42DF-4E1B-B872-57F216B36B23},{E5F44E0B-8926-4B67-818A-F9E7A537D404}", label="Kraft übertragen\n[Wagenheber (Zukaufteil)]"]; 5 | 3[comment="{79482A7A-F3F4-49DD-88CC-903AF72878A8},{E5F44E0B-8926-4B67-818A-F9E7A537D404}", label="Hubweg sicherstellen\n[Wagenheber (Zukaufteil)]"]; 6 | } -------------------------------------------------------------------------------- /test/my_tests/parsing_test.dot: -------------------------------------------------------------------------------- 1 | # reported by: mwojc@p.lodz.pl 2 | 3 | digraph G { 4 | node [label="\N"]; 5 | graph [bb="0,0,342,180"]; 6 | 1 [pos="99,162", width="0.75", height="0.50"]; 7 | 2 [pos="171,162", width="0.75", height="0.50"]; 8 | 3 [pos="243,162", width="0.75", height="0.50"]; 9 | 4 [pos="315,90", width="0.75", height="0.50"]; 10 | 5 [pos="27,90", width="0.75", height="0.50"]; 11 | 6 [pos="99,90", width="0.75", height="0.50"]; 12 | 7 [pos="171,90", width="0.75", height="0.50"]; 13 | 8 [pos="243,90", width="0.75", height="0.50"]; 14 | 9 [pos="99,18", width="0.75", height="0.50"]; 15 | 10 [pos="171,18", width="0.75", height="0.50"]; 16 | 11 [pos="243,18", width="0.75", height="0.50"]; 17 | 1 -> 8 [pos="e,221,101 121,151 145,138 185,119 212,105"]; 18 | 1 -> 4 [pos="e,294,101 120,150 125,148 130,146 135,144 196,121 217,130 279,108 281,107 283,106 285,105"]; 19 | 1 -> 5 [pos="e,42,105 84,147 74,137 61,124 49,112"]; 20 | 1 -> 6 [pos="e,99,108 99,144 99,136 99,127 99,118"]; 21 | 1 -> 7 [pos="e,156,105 114,147 124,137 137,124 149,112"]; 22 | 2 -> 8 [pos="e,228,105 186,147 196,137 209,124 221,112"]; 23 | 2 -> 4 [pos="e,293,101 193,151 217,138 257,119 284,105"]; 24 | 2 -> 5 [pos="e,49,101 149,151 125,138 85,119 58,105"]; 25 | 2 -> 6 [pos="e,114,105 156,147 146,137 133,124 121,112"]; 26 | 2 -> 7 [pos="e,171,108 171,144 171,136 171,127 171,118"]; 27 | 3 -> 8 [pos="e,243,108 243,144 243,136 243,127 243,118"]; 28 | 3 -> 4 [pos="e,300,105 258,147 268,137 281,124 293,112"]; 29 | 3 -> 5 [pos="e,48,101 222,150 217,148 212,146 207,144 145,121 124,130 63,108 61,107 59,106 57,105"]; 30 | 3 -> 6 [pos="e,121,101 221,151 197,138 157,119 130,105"]; 31 | 3 -> 7 [pos="e,186,105 228,147 218,137 205,124 193,112"]; 32 | 4 -> 9 [pos="e,120,29 294,78 289,76 284,74 279,72 217,49 196,58 135,36 133,35 131,35 129,34"]; 33 | 4 -> 10 [pos="e,193,29 293,79 269,66 229,47 202,33"]; 34 | 4 -> 11 [pos="e,258,33 300,75 290,65 277,52 265,40"]; 35 | 5 -> 9 [pos="e,84,33 42,75 52,65 65,52 77,40"]; 36 | 5 -> 10 [pos="e,149,29 49,79 73,66 113,47 140,33"]; 37 | 5 -> 11 [pos="e,222,29 48,78 53,76 58,74 63,72 124,49 145,58 207,36 209,35 211,34 213,33"]; 38 | 6 -> 9 [pos="e,99,36 99,72 99,64 99,55 99,46"]; 39 | 6 -> 10 [pos="e,156,33 114,75 124,65 137,52 149,40"]; 40 | 6 -> 11 [pos="e,221,29 121,79 145,66 185,47 212,33"]; 41 | 7 -> 9 [pos="e,114,33 156,75 146,65 133,52 121,40"]; 42 | 7 -> 10 [pos="e,171,36 171,72 171,64 171,55 171,46"]; 43 | 7 -> 11 [pos="e,228,33 186,75 196,65 209,52 221,40"]; 44 | 8 -> 9 [pos="e,121,29 221,79 197,66 157,47 130,33"]; 45 | 8 -> 10 [pos="e,186,33 228,75 218,65 205,52 193,40"]; 46 | 8 -> 11 [pos="e,243,36 243,72 243,64 243,55 243,46"]; 47 | } -------------------------------------------------------------------------------- /test/test_graph_from_edges.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import functools 4 | from textwrap import dedent 5 | 6 | import pytest 7 | 8 | import pydot_ng 9 | 10 | 11 | @pytest.mark.parametrize( 12 | "directed, graph_type", 13 | ((True, "digraph"), (False, "graph")), 14 | ids=("graph", "digraph"), 15 | ) 16 | @pytest.mark.parametrize("edges", (None, [], ()), ids=(None, "list", "tuple")) 17 | def test_empty_list(directed, graph_type, edges): 18 | graph = pydot_ng.graph_from_edges(edges, directed=directed) 19 | 20 | assert graph.graph_type == graph_type 21 | assert graph.to_string() == dedent( 22 | """\ 23 | {graph_type} G {{ 24 | }} 25 | """.format( 26 | graph_type=graph_type 27 | ) 28 | ) 29 | assert not graph.get_edges() 30 | 31 | 32 | @pytest.mark.parametrize( 33 | "prefix", ("", "some_prefix_"), ids=("no prefix", "prefix") 34 | ) 35 | @pytest.mark.parametrize("src", (1, 2.123, "a", "ą", True)) 36 | @pytest.mark.parametrize("dst", (1, 2.123, "a", "ą", True)) 37 | def test_edge_types(prefix, src, dst): 38 | input_edges = [(src, dst)] 39 | graph = pydot_ng.graph_from_edges(input_edges, node_prefix=prefix) 40 | 41 | edges = graph.get_edges() 42 | assert len(edges) == 1 43 | edge = edges[0] 44 | 45 | with_prefix = functools.partial("{0}{1}".format, prefix) 46 | 47 | assert edge.source == pydot_ng.quote_if_necessary(with_prefix(src)) 48 | assert edge.destination == pydot_ng.quote_if_necessary(with_prefix(dst)) 49 | 50 | 51 | @pytest.mark.parametrize( 52 | "prefix, output", 53 | ( 54 | ( 55 | "", 56 | dedent( 57 | """\ 58 | graph G { 59 | 1 -- 2; 60 | 2 -- "3.14"; 61 | "3.14" -- a; 62 | a -- "ą"; 63 | "ą" -- True; 64 | } 65 | """ 66 | ), 67 | ), 68 | ( 69 | "prefix_", 70 | dedent( 71 | """\ 72 | graph G { 73 | prefix_1 -- prefix_2; 74 | prefix_2 -- "prefix_3.14"; 75 | "prefix_3.14" -- prefix_a; 76 | prefix_a -- "prefix_ą"; 77 | "prefix_ą" -- prefix_True; 78 | } 79 | """ 80 | ), 81 | ), 82 | ), 83 | ids=("no prefix", "prefix"), 84 | ) 85 | def test_from_edge_to_string(prefix, output): 86 | input_edges = [(1, 2), (2, 3.14), (3.14, "a"), ("a", "ą"), ("ą", True)] 87 | 88 | graph = pydot_ng.graph_from_edges(input_edges, node_prefix=prefix) 89 | assert len(graph.get_edges()) == len(input_edges) 90 | assert graph.to_string() == output 91 | -------------------------------------------------------------------------------- /test/test_rendering_dot_files.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | from __future__ import print_function 3 | 4 | import glob 5 | import os 6 | import subprocess 7 | import sys 8 | from hashlib import sha256 9 | 10 | import pydot_ng as pydot 11 | 12 | PY3 = not sys.version_info < (3, 0, 0) 13 | 14 | if PY3: 15 | NULL_SEP = b"" 16 | xrange = range 17 | else: 18 | NULL_SEP = "" 19 | bytes = str 20 | 21 | DOT_BINARY_PATH = pydot.find_graphviz()["dot"] 22 | 23 | 24 | TEST_DIR = os.path.dirname(__file__) 25 | REGRESSION_TESTS_DIR = os.path.join(TEST_DIR, "graphs") 26 | MY_REGRESSION_TESTS_DIR = os.path.join(TEST_DIR, "my_tests") 27 | 28 | TESTS_DIRS = ( 29 | ("regressions", REGRESSION_TESTS_DIR), 30 | ("my_regressions", MY_REGRESSION_TESTS_DIR), 31 | ) 32 | 33 | 34 | def list_dots(path): 35 | searchpath = os.path.join(path, "*.dot") 36 | return [f for f in glob.glob(searchpath)] 37 | 38 | 39 | def pytest_generate_tests(metafunc): 40 | if metafunc.function != test_render_and_compare_dot_files: 41 | return 42 | 43 | idlist = [] 44 | argvalues = [] 45 | for name, dir in TESTS_DIRS: 46 | for filepath in list_dots(dir): 47 | filename = os.path.basename(filepath) 48 | idlist.append("{}-{}".format(name, filename)) 49 | argvalues.append((filepath,)) 50 | metafunc.parametrize( 51 | argnames=["filepath"], 52 | argvalues=argvalues, 53 | ids=idlist, 54 | scope="function", 55 | ) 56 | 57 | 58 | def _render_with_graphviz(filename): 59 | p = subprocess.Popen( 60 | (DOT_BINARY_PATH, "-Tjpe"), 61 | cwd=os.path.dirname(filename), 62 | stdin=open(filename, "rt"), 63 | stderr=subprocess.PIPE, 64 | stdout=subprocess.PIPE, 65 | ) 66 | 67 | stdout = p.stdout 68 | 69 | stdout_output = list() 70 | while True: 71 | data = stdout.read() 72 | if not data: 73 | break 74 | stdout_output.append(data) 75 | stdout.close() 76 | 77 | if stdout_output: 78 | stdout_output = NULL_SEP.join(stdout_output) 79 | 80 | # this returns a status code we should check 81 | p.wait() 82 | 83 | return sha256(stdout_output).hexdigest() 84 | 85 | 86 | def _render_with_pydot(filename): 87 | g = pydot.graph_from_dot_file(filename) 88 | if not isinstance(g, list): 89 | g = [g] 90 | jpe_data = NULL_SEP.join([_g.create(format="jpe") for _g in g]) 91 | return sha256(jpe_data).hexdigest() 92 | 93 | 94 | def test_render_and_compare_dot_files(filepath): 95 | parsed_data_hexdigest = _render_with_pydot(filepath) 96 | original_data_hexdigest = _render_with_graphviz(filepath) 97 | 98 | assert original_data_hexdigest == parsed_data_hexdigest 99 | 100 | 101 | def test_graph_with_shapefiles(): 102 | shapefile_dir = os.path.join(TEST_DIR, "from-past-to-future") 103 | dot_file = os.path.join(shapefile_dir, "from-past-to-future.dot") 104 | 105 | pngs = [ 106 | os.path.join(shapefile_dir, fname) 107 | for fname in os.listdir(shapefile_dir) 108 | if fname.endswith(".png") 109 | ] 110 | 111 | with open(dot_file, "rt") as f: 112 | graph_data = f.read() 113 | # 114 | g = pydot.graph_from_dot_data(graph_data) 115 | g.set_shape_files(pngs) 116 | jpe_data = g.create(format="jpe") 117 | hexdigest = sha256(jpe_data).hexdigest() 118 | hexdigest_original = _render_with_graphviz(dot_file) 119 | 120 | assert hexdigest == hexdigest_original 121 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py27, py36, py37, lint 3 | 4 | 5 | [testenv] 6 | deps = -r{toxinidir}/test-requirements.txt 7 | commands = py.test -v {posargs:test/} 8 | 9 | 10 | [testenv:lint] 11 | deps = 12 | flake8 13 | flake8-bugbear 14 | skip_install = True 15 | commands = 16 | flake8 17 | 18 | 19 | [flake8] 20 | show-source = true 21 | max-line-length = 79 22 | exclude = 23 | .git, 24 | .tox, 25 | .mypy_cache, 26 | .pytest_cache, 27 | __pycache__, 28 | build, 29 | dist 30 | --------------------------------------------------------------------------------