dot: quote identifiers containing a minus
* spot/twaalgos/dot.cc: Quote identifiers containing a minus. * tests/core/alternating.test: Add test case. * NEWS: Mention the bug.
This commit is contained in:
parent
166a26417c
commit
b4279d3a12
3 changed files with 64 additions and 5 deletions
4
NEWS
4
NEWS
|
|
@ -120,6 +120,10 @@ New in spot 2.10.6.dev (not yet released)
|
||||||
into the universal edge vector, since the later can be
|
into the universal edge vector, since the later can be
|
||||||
reallocated during that process.
|
reallocated during that process.
|
||||||
|
|
||||||
|
- Printing an alternating automaton with print_dot() using 'u' to
|
||||||
|
hide true state could produce some incorrect GraphViz output if
|
||||||
|
the automaton as a true state as part of a universal group.
|
||||||
|
|
||||||
New in spot 2.10.6 (2022-05-18)
|
New in spot 2.10.6 (2022-05-18)
|
||||||
|
|
||||||
Bugs fixed:
|
Bugs fixed:
|
||||||
|
|
|
||||||
|
|
@ -578,10 +578,27 @@ namespace spot
|
||||||
return tmp_dst.str();
|
return tmp_dst.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename U, typename V>
|
void print_hidden_true_name(unsigned to, unsigned from) const
|
||||||
void print_true_state(U to, V from) const
|
|
||||||
{
|
{
|
||||||
os_ << " T" << to << 'T' << from << " [label=\"\", style=invis, ";
|
os_ << 'T' << to << 'T' << from;
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_hidden_true_name(unsigned to, const std::string& from) const
|
||||||
|
{
|
||||||
|
bool neg = from[0] == '-';
|
||||||
|
if (neg)
|
||||||
|
os_ << '"';
|
||||||
|
os_ << 'T' << to << 'T' << from;
|
||||||
|
if (neg)
|
||||||
|
os_ << '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename F>
|
||||||
|
void print_true_state(unsigned to, F from) const
|
||||||
|
{
|
||||||
|
os_ << " ";
|
||||||
|
print_hidden_true_name(to, from);
|
||||||
|
os_ << " [label=\"\", style=invis, ";
|
||||||
os_ << (opt_vertical_ ? "height=0]\n" : "width=0]\n");
|
os_ << (opt_vertical_ ? "height=0]\n" : "width=0]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -606,7 +623,7 @@ namespace spot
|
||||||
print_true_state(d, dest);
|
print_true_state(d, dest);
|
||||||
os_ << " " << dest << " -> ";
|
os_ << " " << dest << " -> ";
|
||||||
if (dst_is_hidden_true_state)
|
if (dst_is_hidden_true_state)
|
||||||
os_ << 'T' << d << 'T' << dest;
|
print_hidden_true_name(d, dest);
|
||||||
else
|
else
|
||||||
os_ << d;
|
os_ << d;
|
||||||
if ((style && *style) || opt_id_)
|
if ((style && *style) || opt_id_)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Copyright (C) 2016-2018, 2020-2021 Laboratoire de Recherche et
|
# Copyright (C) 2016-2018, 2020-2022 Laboratoire de Recherche et
|
||||||
# Développement de l'Epita (LRDE).
|
# Développement de l'Epita (LRDE).
|
||||||
#
|
#
|
||||||
# This file is part of Spot, a model checking library.
|
# This file is part of Spot, a model checking library.
|
||||||
|
|
@ -1009,3 +1009,41 @@ test '2_0_1_1_1_1_3_3' = "`autfilt --stats=$stats in`"
|
||||||
|
|
||||||
autfilt --stats='%[x]U' in 2>stderr && exit2
|
autfilt --stats='%[x]U' in 2>stderr && exit2
|
||||||
grep '%\[x\]U' stderr
|
grep '%\[x\]U' stderr
|
||||||
|
|
||||||
|
cat >in <<EOF
|
||||||
|
HOA: v1
|
||||||
|
States: 2
|
||||||
|
Start: 1
|
||||||
|
AP: 1 "a"
|
||||||
|
acc-name: co-Buchi
|
||||||
|
Acceptance: 1 Fin(0)
|
||||||
|
properties: trans-labels explicit-labels trans-acc complete univ-branch
|
||||||
|
--BODY--
|
||||||
|
State: 0
|
||||||
|
[t] 0
|
||||||
|
State: 1
|
||||||
|
[t] 0&1 {0}
|
||||||
|
[0] 0
|
||||||
|
--END--
|
||||||
|
EOF
|
||||||
|
autfilt -du in >out.dot
|
||||||
|
# T0T-1 is not a valid name for GraphViz, it has to be quoted.
|
||||||
|
cat >exp.dot <<EOF
|
||||||
|
digraph "" {
|
||||||
|
rankdir=LR
|
||||||
|
label="Fin(0)\n[co-Büchi]"
|
||||||
|
labelloc="t"
|
||||||
|
node [shape="circle"]
|
||||||
|
I [label="", style=invis, width=0]
|
||||||
|
I -> 1
|
||||||
|
1 [label="1"]
|
||||||
|
1 -> -1 [label="1\n{0}", arrowhead=onormal]
|
||||||
|
-1 [label=<>,shape=point,width=0.05,height=0.05]
|
||||||
|
"T0T-1" [label="", style=invis, width=0]
|
||||||
|
-1 -> "T0T-1"
|
||||||
|
-1 -> 1
|
||||||
|
T0T1 [label="", style=invis, width=0]
|
||||||
|
1 -> T0T1 [label="a"]
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
diff out.dot exp.dot
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue