1
1
package reqt
2
2
3
3
object GraphVizGen :
4
+ case class GraphVizSettings (
5
+ fontName : String = " Sans" ,
6
+ fontSize : Int = 10 ,
7
+ rankDir : String = " LR" ,
8
+ ordering : String = " out" ,
9
+ noJustify : Boolean = true ,
10
+ edgeArrowhead : String = " empty" ,
11
+ nodeShape : String = " record" ,
12
+ compound : Boolean = true ,
13
+ )
14
+ object GraphVizSettings :
15
+ given default : GraphVizSettings = GraphVizSettings ()
16
+
17
+ extension (m : Model )
18
+ def toGraphViz (using settings : GraphVizSettings ): String =
19
+ val s = settings.copy(rankDir = " LR" )
20
+ ???
4
21
5
22
def recordNode (
6
23
nodeName : String ,
@@ -14,37 +31,32 @@ object GraphVizGen:
14
31
15
32
def edge (fromNode : String , toNode : String ): String = s " $fromNode -> $toNode"
16
33
17
- def directedGraph (
18
- name : String ,
19
- fontName : String = " Sans" ,
20
- fontSize : Int = 10 ,
21
- rankDir : String = " BT" ,
22
- ordering : String = " out" ,
23
- noJustify : Boolean = true ,
24
- edgeArrowhead : String = " empty" ,
25
- nodeShape : String = " record" ,
26
- )(rankSame : Seq [Seq [String ]])(edges : Seq [(String , String )])(nodeFormats : Seq [String ]) =
27
- s """ |digraph $name {
28
- | fontname = " $fontName"
29
- | fontsize = $fontSize
30
- | rankdir = " $rankDir"
31
- | ordering = " $ordering"
32
- | nojustify = $noJustify
33
- |
34
- | node [
35
- | fontname = " $fontName"
36
- | fontsize = $fontSize
37
- | shape = " $nodeShape"
38
- | ]
39
- |
40
- | edge [
41
- | arrowhead = " $edgeArrowhead"
42
- | ]
43
- |
44
- | ${rankSame.map(_.mkString(" { rank = same; " , " ; " , " ; }" )).mkString(" " , " \n " , " \n " )}
45
- |
46
- | ${nodeFormats.mkString(" " , " \n " , " \n " )}
47
- |
48
- | ${edges.map((f,t) => edge(f,t)).mkString(" " , " \n " , " \n " )}
49
- |}
50
- | """ .stripMargin
34
+ def classDiagram (title : String )
35
+ (rankSame : Seq [Seq [String ]])(edges : Seq [(String , String )])(nodeFormats : Seq [String ])
36
+ (using settings : GraphVizSettings ) =
37
+ val s = settings.copy(rankDir = " BT" )
38
+ import s .*
39
+ s """ |digraph $title {
40
+ | fontname = " $fontName"
41
+ | fontsize = $fontSize
42
+ | rankdir = " $rankDir"
43
+ | ordering = " $ordering"
44
+ | nojustify = $noJustify
45
+ |
46
+ | node [
47
+ | fontname = " $fontName"
48
+ | fontsize = $fontSize
49
+ | shape = " $nodeShape"
50
+ | ]
51
+ |
52
+ | edge [
53
+ | arrowhead = " $edgeArrowhead"
54
+ | ]
55
+ |
56
+ | ${rankSame.map(_.mkString(" { rank = same; " , " ; " , " ; }" )).mkString(" " , " \n " , " \n " )}
57
+ |
58
+ | ${nodeFormats.mkString(" " , " \n " , " \n " )}
59
+ |
60
+ | ${edges.map((f,t) => edge(f,t)).mkString(" " , " \n " , " \n " )}
61
+ |}
62
+ | """ .stripMargin
0 commit comments