dot: add x option for dot2tex

* spot/twa/acc.cc, spot/twa/acc.hh: Add a LaTeX output for acceptance
conditions.
* spot/twaalgos/dot.cc: Implement the 'x' option and refactor the code
a bit to limit duplication.
* tests/core/dot2tex.test: New test case (requires dot2tex).
* tests/Makefile.am: Add dot2tex.test.
* tests/core/alternating.test, tests/core/readsave.test,
tests/python/automata-io.ipynb: Adjust expected output.
* NEWS, doc/org/oaut.org: Mention the new option.
This commit is contained in:
Alexandre Duret-Lutz 2017-08-31 18:56:53 +02:00
parent b242122ce8
commit fbb9e4374e
10 changed files with 365 additions and 182 deletions

View file

@ -219,6 +219,7 @@ TESTS_twa = \
core/gragsa.test \
core/dstar.test \
core/readsave.test \
core/dot2tex.test \
core/ltldo.test \
core/ltldo2.test \
core/maskacc.test \

View file

@ -573,27 +573,27 @@ digraph G {
subgraph cluster_0 {
color=green
label=""
4 [label="t"]
4 [label=<t>]
}
subgraph cluster_1 {
color=green
label=""
1 [label="G(a & b)"]
1 [label=<G(a &amp; b)>]
}
subgraph cluster_2 {
color=red
label=""
2 [label="F!a"]
2 [label=<F!a>]
}
subgraph cluster_3 {
color=red
label=""
3 [label="F!b"]
3 [label=<F!b>]
}
subgraph cluster_4 {
color=green
label=""
0 [label="c R (c | G(a & b) | (F!b & F!a))"]
0 [label=<c R (c | G(a &amp; b) | (F!b &amp; F!a))>]
-1 [label=<>,shape=point]
-4 [label=<>,shape=point]
-7 [label=<>,shape=point]
@ -669,26 +669,26 @@ digraph G {
subgraph cluster_0 {
color=green
label=""
4 [label="t"]
4 [label=<t>]
}
subgraph cluster_1 {
color=red
label=""
2 [label="F!a"]
2 [label=<F!a>]
}
subgraph cluster_2 {
color=red
label=""
3 [label="F!b"]
3 [label=<F!b>]
}
subgraph cluster_3 {
color=green
label=""
0 [label="c R (c | G(a & b) | (F!b & F!a))"]
0 [label=<c R (c | G(a &amp; b) | (F!b &amp; F!a))>]
-1 [label=<>,shape=point]
-4 [label=<>,shape=point]
-7 [label=<>,shape=point]
1 [label="G(a & b)"]
1 [label=<G(a &amp; b)>]
-10 [label=<>,shape=point]
}
0 -> 4 [label=<c>]
@ -852,22 +852,22 @@ digraph G {
subgraph cluster_0 {
color=green
label=""
3 [label="t"]
3 [label=<t>]
}
subgraph cluster_1 {
color=green
label=""
1 [label="Fa"]
1 [label=<Fa>]
}
subgraph cluster_2 {
color=green
label=""
2 [label="G!a"]
2 [label=<G!a>]
}
subgraph cluster_3 {
color=green
label=""
0 [label="G((b & Fa) | (!b & G!a))"]
0 [label=<G((b &amp; Fa) | (!b &amp; G!a))>]
-1 [label=<>,shape=point]
-4 [label=<>,shape=point]
}

40
tests/core/dot2tex.test Executable file
View file

@ -0,0 +1,40 @@
#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2017 Laboratoire de Recherche et Développement
# de l'Epita (LRDE).
#
# This file is part of Spot, a model checking library.
#
# Spot is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Spot is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. ./defs
set -e
# This tests our support for LaTeX-embedded dot, for dot2tex.
# Skip this test if we don't find all the tools we need.
(latexmk --version) || exit 77
(pdflatex --version) || exit 77
(dot2tex --version) || exit 77
(dot -V) || exit 77
ltl2tgba 'a U b' --dot=scanx >out.dot
dot2tex --autosize --nominsize out.dot >out.tex
pdflatex out.tex
ltl2tgba 'p0 U p1' --dot=tax >out2.dot
dot2tex --autosize --nominsize out2.dot >out2.tex
grep -F 'p_{0}' out2.tex
grep -F 'mathsf{Inf}' out2.tex
pdflatex out2.tex

View file

@ -406,7 +406,7 @@ digraph G {
edge [fontname="Lato"]
I [label="", style=invis, width=0]
I -> 0
0 [label="0"]
0 [label=<0>]
0 -> 0 [label=<a &amp; b<br/>$zero$one>]
0 -> 0 [label=<!a &amp; !b>]
0 -> 0 [label=<!a &amp; b<br/>$one>]

View file

@ -88,9 +88,9 @@
" size=\"10.2,5\" edge[arrowhead=vee, arrowsize=.7]\n",
" I [label=\"\", style=invis, width=0]\n",
" I -> 1\n",
" 0 [label=\"0\", peripheries=2]\n",
" 0 [label=<0>, peripheries=2]\n",
" 0 -> 0 [label=<1>]\n",
" 1 [label=\"1\"]\n",
" 1 [label=<1>]\n",
" 1 -> 0 [label=<b>]\n",
" 1 -> 1 [label=<a &amp; !b>]\n",
"}\n",
@ -862,4 +862,4 @@
"metadata": {}
}
]
}
}