dependencyDot: fix rendering of HTML labels, fixes #84

This commit is contained in:
Johannes Rudolph 2016-01-08 17:14:00 +01:00
parent cc2c3d1d9e
commit 00d64878aa
3 changed files with 31 additions and 10 deletions

View File

@ -134,12 +134,13 @@ object DependencyGraphSettings {
}
def dependencyDotStringTask =
(moduleGraph, dependencyDotHeader, dependencyDotNodeLabel).map {
(graph, dotHead, nodeLabel) rendering.DOT.dotGraph(graph, dotHead, nodeLabel)
(graph, dotHead, nodeLabel) rendering.DOT.dotGraph(graph, dotHead, nodeLabel, rendering.DOT.AngleBrackets)
}
def browseGraphHTMLTask =
(dependencyDotString, dependencyBrowseGraphTarget, streams).map { (graph, target, streams)
val link = DagreHTML.createLink(graph, target)
(moduleGraph, dependencyDotHeader, dependencyDotNodeLabel, dependencyBrowseGraphTarget, streams).map { (graph, dotHead, nodeLabel, target, streams)
val dotGraph = rendering.DOT.dotGraph(graph, dotHead, nodeLabel, rendering.DOT.LabelTypeHtml)
val link = DagreHTML.createLink(dotGraph, target)
streams.log.info(s"HTML graph written to $link")
link
}

View File

@ -22,12 +22,14 @@ object DOT {
def dotGraph(graph: ModuleGraph,
dotHead: String,
nodeFormation: (String, String, String) String): String = {
nodeFormation: (String, String, String) String,
labelRendering: HTMLLabelRendering): String = {
val nodes = {
for (n graph.nodes) yield {
val style = if (n.isEvicted) EvictedStyle else ""
""" "%s"[labelType="html" label="%s" style="%s"]""".format(n.id.idString,
nodeFormation(n.id.organisation, n.id.name, n.id.version),
val label = nodeFormation(n.id.organisation, n.id.name, n.id.version)
""" "%s"[%s style="%s"]""".format(n.id.idString,
labelRendering.renderLabel(label),
style)
}
}.mkString("\n")
@ -60,4 +62,22 @@ object DOT {
"%s\n%s\n%s\n}".format(dotHead, nodes, edges)
}
sealed trait HTMLLabelRendering {
def renderLabel(labelText: String): String
}
/**
* Render HTML labels in Angle brackets as defined at http://graphviz.org/content/node-shapes#html
*/
case object AngleBrackets extends HTMLLabelRendering {
def renderLabel(labelText: String): String = s"label=<$labelText>"
}
/**
* Render HTML labels with `labelType="html"` and label content in double quotes as supported by
* dagre-d3
*/
case object LabelTypeHtml extends HTMLLabelRendering {
def renderLabel(labelText: String): String = s"""labelType="html" label="$labelText""""
}
}

View File

@ -34,10 +34,10 @@ object Build extends sbt.Build {
| edge [
| arrowtail="none"
| ]
| "test-dot-file-generation:test-dot-file-generation_2.9.2:0.1-SNAPSHOT"[labelType="html" label="test-dot-file-generation<BR/><B>test-dot-file-generation_2.9.2</B><BR/>0.1-SNAPSHOT" style=""]
| "just-a-transitive-dependency:just-a-transitive-dependency_2.9.2:0.1-SNAPSHOT"[labelType="html" label="just-a-transitive-dependency<BR/><B>just-a-transitive-dependency_2.9.2</B><BR/>0.1-SNAPSHOT" style=""]
| "just-a-transitive-dependency-endpoint:just-a-transitive-dependency-endpoint_2.9.2:0.1-SNAPSHOT"[labelType="html" label="just-a-transitive-dependency-endpoint<BR/><B>just-a-transitive-dependency-endpoint_2.9.2</B><BR/>0.1-SNAPSHOT" style=""]
| "just-a-dependency:just-a-dependency_2.9.2:0.1-SNAPSHOT"[labelType="html" label="just-a-dependency<BR/><B>just-a-dependency_2.9.2</B><BR/>0.1-SNAPSHOT" style=""]
| "test-dot-file-generation:test-dot-file-generation_2.9.2:0.1-SNAPSHOT"[label=<test-dot-file-generation<BR/><B>test-dot-file-generation_2.9.2</B><BR/>0.1-SNAPSHOT> style=""]
| "just-a-transitive-dependency:just-a-transitive-dependency_2.9.2:0.1-SNAPSHOT"[label=<just-a-transitive-dependency<BR/><B>just-a-transitive-dependency_2.9.2</B><BR/>0.1-SNAPSHOT> style=""]
| "just-a-transitive-dependency-endpoint:just-a-transitive-dependency-endpoint_2.9.2:0.1-SNAPSHOT"[label=<just-a-transitive-dependency-endpoint<BR/><B>just-a-transitive-dependency-endpoint_2.9.2</B><BR/>0.1-SNAPSHOT> style=""]
| "just-a-dependency:just-a-dependency_2.9.2:0.1-SNAPSHOT"[label=<just-a-dependency<BR/><B>just-a-dependency_2.9.2</B><BR/>0.1-SNAPSHOT> style=""]
| "test-dot-file-generation:test-dot-file-generation_2.9.2:0.1-SNAPSHOT" -> "just-a-transitive-dependency:just-a-transitive-dependency_2.9.2:0.1-SNAPSHOT"
| "just-a-transitive-dependency:just-a-transitive-dependency_2.9.2:0.1-SNAPSHOT" -> "just-a-transitive-dependency-endpoint:just-a-transitive-dependency-endpoint_2.9.2:0.1-SNAPSHOT"
| "test-dot-file-generation:test-dot-file-generation_2.9.2:0.1-SNAPSHOT" -> "just-a-dependency:just-a-dependency_2.9.2:0.1-SNAPSHOT"