dot: replace large labels by "(label too long)"
Based on a report by Victor Khomenko. * spot/twaalgos/dot.cc: Here. * tests/core/readsave.test: Add test case. * NEWS: Mention it.
This commit is contained in:
parent
f476483f4a
commit
89fcd2b455
3 changed files with 19 additions and 1 deletions
5
NEWS
5
NEWS
|
|
@ -42,6 +42,11 @@ New in spot 2.7.4.dev (not yet released)
|
||||||
helpful to display automata as "graphs", e.g., when illustrating
|
helpful to display automata as "graphs", e.g., when illustrating
|
||||||
algorithms that do not care about labels.
|
algorithms that do not care about labels.
|
||||||
|
|
||||||
|
- print_dot will replace labels that have more 2048 characters by a
|
||||||
|
"(label too long)" string. This works around a limitation of
|
||||||
|
GraphViz that aborts when some label exceeds 16k characters, and
|
||||||
|
also helps making large automata more readable.
|
||||||
|
|
||||||
- A new complement() function that return automata with unspecified
|
- A new complement() function that return automata with unspecified
|
||||||
acceptance condition. The output can be alternating only if the
|
acceptance condition. The output can be alternating only if the
|
||||||
input was alternating.
|
input was alternating.
|
||||||
|
|
|
||||||
|
|
@ -444,7 +444,15 @@ namespace spot
|
||||||
print_sclatex_psl(os << '$', f) << '$';
|
print_sclatex_psl(os << '$', f) << '$';
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
return escape_for_output(os, str_psl(f));
|
// GraphViz (2.40.1) has a strict limit of 16k for label
|
||||||
|
// length. The limit we use below is more conservative,
|
||||||
|
// because (1) escaping the html element in the string
|
||||||
|
// (e.g., "&" -> "&") can increase it a lot, and (2)
|
||||||
|
// a label of size 2048 is already unreasonable to display.
|
||||||
|
std::string s = str_psl(f);
|
||||||
|
if (s.size() > 2048)
|
||||||
|
s = "(label too long)";
|
||||||
|
return escape_for_output(os, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream&
|
std::ostream&
|
||||||
|
|
|
||||||
|
|
@ -1104,3 +1104,8 @@ digraph "a U b" {
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
diff out expected
|
diff out expected
|
||||||
|
|
||||||
|
f="{{!a;!b}:{{c <-> d} && {e xor f} && {m | {l && {k | {j <-> {i xor {g && h}"
|
||||||
|
f="$f}}}}} && {{n && o} | {!n && p}} && {q -> {r <-> s}}}:{[*0..1];t}}[]-> u"
|
||||||
|
ltl2tgba -f "$f" --dot=bar > out.dot
|
||||||
|
grep 'label too long' out.dot
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue