diff --git a/src/seqdiag/drawer.py b/src/seqdiag/drawer.py index a381158..0a98cb4 100644 --- a/src/seqdiag/drawer.py +++ b/src/seqdiag/drawer.py @@ -97,57 +97,67 @@ def edge_shadow(self, edge): outline=self.shadow, filter='transp-blur') def edge(self, edge): + if edge.href and self.format == 'SVG': + drawer = self.drawer.anchor(edge.href) + else: + drawer = self.drawer + # render shaft of edges m = self.metrics.edge(edge) shaft = m.shaft - self.drawer.line(shaft, fill=edge.color, style=edge.style) + drawer.line(shaft, fill=edge.color, style=edge.style) # render head of edges head = m.head if edge.asynchronous: - self.drawer.line((head[0], head[1]), fill=edge.color) - self.drawer.line((head[1], head[2]), fill=edge.color) + drawer.line((head[0], head[1]), fill=edge.color) + drawer.line((head[1], head[2]), fill=edge.color) else: - self.drawer.polygon(head, outline=edge.color, fill=edge.color) + drawer.polygon(head, outline=edge.color, fill=edge.color) if edge.failed: for line in m.failedmark: - self.drawer.line(line, fill=edge.color) + drawer.line(line, fill=edge.color) if edge.leftnote: polygon = m.leftnoteshape - self.drawer.polygon(polygon, fill=edge.notecolor, - outline=self.fill) + drawer.polygon(polygon, fill=edge.notecolor, + outline=self.fill) folded = [polygon[1], XY(polygon[1].x, polygon[2].y), polygon[2]] - self.drawer.line(folded, fill=self.fill) + drawer.line(folded, fill=self.fill) - self.drawer.textarea(m.leftnotebox, edge.leftnote, - self.metrics.font_for(edge), - fill=edge.color, halign='left') + drawer.textarea(m.leftnotebox, edge.leftnote, + self.metrics.font_for(edge), + fill=edge.color, halign='left') if edge.rightnote: polygon = m.rightnoteshape - self.drawer.polygon(polygon, fill=edge.notecolor, - outline=self.fill) + drawer.polygon(polygon, fill=edge.notecolor, + outline=self.fill) folded = [polygon[1], XY(polygon[1].x, polygon[2].y), polygon[2]] - self.drawer.line(folded, fill=self.fill) + drawer.line(folded, fill=self.fill) - self.drawer.textarea(m.rightnotebox, edge.rightnote, - self.metrics.font_for(edge), - fill=edge.color, halign='left') + drawer.textarea(m.rightnotebox, edge.rightnote, + self.metrics.font_for(edge), + fill=edge.color, halign='left') def edge_label(self, edge): m = self.metrics.edge(edge) + if edge.href and self.format == 'SVG': + drawer = self.drawer.anchor(edge.href) + else: + drawer = self.drawer + if edge.label: if edge.direction in ('right', 'self'): halign = 'left' else: halign = 'right' - self.drawer.textarea(m.textbox, edge.label, + drawer.textarea(m.textbox, edge.label, self.metrics.font_for(edge), fill=edge.color, halign=halign) diff --git a/src/seqdiag/elements.py b/src/seqdiag/elements.py index 22aa43f..c5ee8a6 100644 --- a/src/seqdiag/elements.py +++ b/src/seqdiag/elements.py @@ -125,6 +125,7 @@ def __init__(self, node1, node2): self.diagonal = False self.failed = False self.return_label = '' + self.href = None @property def left_node(self):