Add -Zgraphviz_dark_mode

Many developers use a dark theme with editors and IDEs, but this
typically doesn't extend to graphviz output.

When I bring up a MIR graphviz document, the white background is
strikingly bright. This new option changes the colors used for graphviz
output to work better in dark-themed UIs.
This commit is contained in:
Rich Kadel 2020-09-08 16:08:35 -07:00
parent 5099914a16
commit c19b2370e4
4 changed files with 46 additions and 11 deletions

View file

@ -599,6 +599,7 @@ pub enum RenderOption {
NoNodeStyles,
Monospace,
DarkTheme,
}
/// Returns vec holding all the default render options.
@ -630,10 +631,23 @@ where
writeln!(w, "digraph {} {{", g.graph_id().as_slice())?;
// Global graph properties
let mut graph_attrs = Vec::new();
let mut content_attrs = Vec::new();
if options.contains(&RenderOption::Monospace) {
writeln!(w, r#" graph[fontname="monospace"];"#)?;
writeln!(w, r#" node[fontname="monospace"];"#)?;
writeln!(w, r#" edge[fontname="monospace"];"#)?;
let font = r#"fontname="monospace""#;
graph_attrs.push(font);
content_attrs.push(font);
};
if options.contains(&RenderOption::DarkTheme) {
graph_attrs.push(r#"bgcolor="black""#);
content_attrs.push(r#"color="white""#);
content_attrs.push(r#"fontcolor="white""#);
}
if !(graph_attrs.is_empty() && content_attrs.is_empty()) {
writeln!(w, r#" graph[{}];"#, graph_attrs.join(" "))?;
let content_attrs_str = content_attrs.join(" ");
writeln!(w, r#" node[{}];"#, content_attrs_str)?;
writeln!(w, r#" edge[{}];"#, content_attrs_str)?;
}
for n in g.nodes().iter() {