@@ -432,15 +432,17 @@ pub trait Labeller<'a,N,E> {
432
432
}
433
433
434
434
impl < ' a > LabelText < ' a > {
435
- pub fn label < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
435
+ pub fn label < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
436
436
LabelStr ( s. into_cow ( ) )
437
437
}
438
438
439
- pub fn escaped < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
439
+ pub fn escaped < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
440
440
EscStr ( s. into_cow ( ) )
441
441
}
442
442
443
- fn escape_char < F > ( c : char , mut f : F ) where F : FnMut ( char ) {
443
+ fn escape_char < F > ( c : char , mut f : F )
444
+ where F : FnMut ( char )
445
+ {
444
446
match c {
445
447
// not escaping \\, since Graphviz escString needs to
446
448
// interpret backslashes; see EscStr above.
@@ -531,29 +533,40 @@ pub enum RenderOption {
531
533
}
532
534
533
535
/// Returns vec holding all the default render options.
534
- pub fn default_options ( ) -> Vec < RenderOption > { vec ! [ ] }
536
+ pub fn default_options ( ) -> Vec < RenderOption > {
537
+ vec ! [ ]
538
+ }
535
539
536
540
/// Renders directed graph `g` into the writer `w` in DOT syntax.
537
541
/// (Simple wrapper around `render_opts` that passes a default set of options.)
538
- pub fn render < ' a , N : Clone +' a , E : Clone +' a , G : Labeller < ' a , N , E > +GraphWalk < ' a , N , E > , W : Write > (
539
- g : & ' a G ,
540
- w : & mut W ) -> io:: Result < ( ) > {
542
+ pub fn render < ' a ,
543
+ N : Clone + ' a ,
544
+ E : Clone + ' a ,
545
+ G : Labeller < ' a , N , E > + GraphWalk < ' a , N , E > ,
546
+ W : Write >
547
+ ( g : & ' a G ,
548
+ w : & mut W )
549
+ -> io:: Result < ( ) > {
541
550
render_opts ( g, w, & [ ] )
542
551
}
543
552
544
553
/// Renders directed graph `g` into the writer `w` in DOT syntax.
545
554
/// (Main entry point for the library.)
546
- pub fn render_opts < ' a , N : Clone +' a , E : Clone +' a , G : Labeller < ' a , N , E > +GraphWalk < ' a , N , E > , W : Write > (
547
- g : & ' a G ,
548
- w : & mut W ,
549
- options : & [ RenderOption ] ) -> io:: Result < ( ) >
550
- {
551
- fn writeln < W : Write > ( w : & mut W , arg : & [ & str ] ) -> io:: Result < ( ) > {
555
+ pub fn render_opts < ' a ,
556
+ N : Clone + ' a ,
557
+ E : Clone + ' a ,
558
+ G : Labeller < ' a , N , E > + GraphWalk < ' a , N , E > ,
559
+ W : Write >
560
+ ( g : & ' a G ,
561
+ w : & mut W ,
562
+ options : & [ RenderOption ] )
563
+ -> io:: Result < ( ) > {
564
+ fn writeln < W : Write > ( w : & mut W , arg : & [ & str ] ) -> io:: Result < ( ) > {
552
565
for & s in arg { try!( w. write_all ( s. as_bytes ( ) ) ) ; }
553
566
write ! ( w, "\n " )
554
567
}
555
568
556
- fn indent < W : Write > ( w : & mut W ) -> io:: Result < ( ) > {
569
+ fn indent < W : Write > ( w : & mut W ) -> io:: Result < ( ) > {
557
570
w. write_all ( b" " )
558
571
}
559
572
@@ -657,9 +670,7 @@ mod tests {
657
670
}
658
671
659
672
impl LabelledGraph {
660
- fn new ( name : & ' static str ,
661
- node_labels : Trivial ,
662
- edges : Vec < Edge > ) -> LabelledGraph {
673
+ fn new ( name : & ' static str , node_labels : Trivial , edges : Vec < Edge > ) -> LabelledGraph {
663
674
LabelledGraph {
664
675
name : name,
665
676
node_labels : node_labels. to_opt_strs ( ) ,
@@ -671,7 +682,8 @@ mod tests {
671
682
impl LabelledGraphWithEscStrs {
672
683
fn new ( name : & ' static str ,
673
684
node_labels : Trivial ,
674
- edges : Vec < Edge > ) -> LabelledGraphWithEscStrs {
685
+ edges : Vec < Edge > )
686
+ -> LabelledGraphWithEscStrs {
675
687
LabelledGraphWithEscStrs {
676
688
graph : LabelledGraph :: new ( name, node_labels, edges)
677
689
}
@@ -695,52 +707,56 @@ mod tests {
695
707
None => LabelStr ( id_name ( n) . name ( ) ) ,
696
708
}
697
709
}
698
- fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
710
+ fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
699
711
LabelStr ( e. label . into_cow ( ) )
700
712
}
701
713
}
702
714
703
715
impl < ' a > Labeller < ' a , Node , & ' a Edge > for LabelledGraphWithEscStrs {
704
- fn graph_id ( & ' a self ) -> Id < ' a > { self . graph . graph_id ( ) }
705
- fn node_id ( & ' a self , n : & Node ) -> Id < ' a > { self . graph . node_id ( n) }
716
+ fn graph_id ( & ' a self ) -> Id < ' a > {
717
+ self . graph . graph_id ( )
718
+ }
719
+ fn node_id ( & ' a self , n : & Node ) -> Id < ' a > {
720
+ self . graph . node_id ( n)
721
+ }
706
722
fn node_label ( & ' a self , n : & Node ) -> LabelText < ' a > {
707
723
match self . graph . node_label ( n) {
708
724
LabelStr ( s) | EscStr ( s) => EscStr ( s) ,
709
725
}
710
726
}
711
- fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
727
+ fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
712
728
match self . graph . edge_label ( e) {
713
729
LabelStr ( s) | EscStr ( s) => EscStr ( s) ,
714
730
}
715
731
}
716
732
}
717
733
718
734
impl < ' a > GraphWalk < ' a , Node , & ' a Edge > for LabelledGraph {
719
- fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
735
+ fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
720
736
( 0 ..self . node_labels . len ( ) ) . collect ( )
721
737
}
722
- fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
738
+ fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
723
739
self . edges . iter ( ) . collect ( )
724
740
}
725
- fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
741
+ fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
726
742
edge. from
727
743
}
728
- fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
744
+ fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
729
745
edge. to
730
746
}
731
747
}
732
748
733
749
impl < ' a > GraphWalk < ' a , Node , & ' a Edge > for LabelledGraphWithEscStrs {
734
- fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
750
+ fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
735
751
self . graph . nodes ( )
736
752
}
737
- fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
753
+ fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
738
754
self . graph . edges ( )
739
755
}
740
- fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
756
+ fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
741
757
edge. from
742
758
}
743
- fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
759
+ fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
744
760
edge. to
745
761
}
746
762
}
@@ -781,8 +797,7 @@ r#"digraph single_node {
781
797
#[ test]
782
798
fn single_edge ( ) {
783
799
let labels : Trivial = UnlabelledNodes ( 2 ) ;
784
- let result = test_input ( LabelledGraph :: new ( "single_edge" , labels,
785
- vec ! ( edge( 0 , 1 , "E" ) ) ) ) ;
800
+ let result = test_input ( LabelledGraph :: new ( "single_edge" , labels, vec ! ( edge( 0 , 1 , "E" ) ) ) ) ;
786
801
assert_eq ! ( result. unwrap( ) ,
787
802
r#"digraph single_edge {
788
803
N0[label="N0"];
@@ -795,7 +810,8 @@ r#"digraph single_edge {
795
810
#[ test]
796
811
fn test_some_labelled ( ) {
797
812
let labels : Trivial = SomeNodesLabelled ( vec ! [ Some ( "A" ) , None ] ) ;
798
- let result = test_input ( LabelledGraph :: new ( "test_some_labelled" , labels,
813
+ let result = test_input ( LabelledGraph :: new ( "test_some_labelled" ,
814
+ labels,
799
815
vec ! [ edge( 0 , 1 , "A-1" ) ] ) ) ;
800
816
assert_eq ! ( result. unwrap( ) ,
801
817
r#"digraph test_some_labelled {
@@ -809,8 +825,7 @@ r#"digraph test_some_labelled {
809
825
#[ test]
810
826
fn single_cyclic_node ( ) {
811
827
let labels : Trivial = UnlabelledNodes ( 1 ) ;
812
- let r = test_input ( LabelledGraph :: new ( "single_cyclic_node" , labels,
813
- vec ! ( edge( 0 , 0 , "E" ) ) ) ) ;
828
+ let r = test_input ( LabelledGraph :: new ( "single_cyclic_node" , labels, vec ! ( edge( 0 , 0 , "E" ) ) ) ) ;
814
829
assert_eq ! ( r. unwrap( ) ,
815
830
r#"digraph single_cyclic_node {
816
831
N0[label="N0"];
@@ -822,9 +837,9 @@ r#"digraph single_cyclic_node {
822
837
#[ test]
823
838
fn hasse_diagram ( ) {
824
839
let labels = AllNodesLabelled ( vec ! ( "{x,y}" , "{x}" , "{y}" , "{}" ) ) ;
825
- let r = test_input ( LabelledGraph :: new (
826
- "hasse_diagram" , labels,
827
- vec ! ( edge( 0 , 1 , "" ) , edge( 0 , 2 , "" ) ,
840
+ let r = test_input ( LabelledGraph :: new ( "hasse_diagram" ,
841
+ labels,
842
+ vec ! ( edge( 0 , 1 , "" ) , edge( 0 , 2 , "" ) ,
828
843
edge( 1 , 3 , "" ) , edge( 2 , 3 , "" ) ) ) ) ;
829
844
assert_eq ! ( r. unwrap( ) ,
830
845
r#"digraph hasse_diagram {
@@ -856,9 +871,9 @@ r#"digraph hasse_diagram {
856
871
857
872
let mut writer = Vec :: new ( ) ;
858
873
859
- let g = LabelledGraphWithEscStrs :: new (
860
- "syntax_tree" , labels,
861
- vec ! ( edge( 0 , 1 , "then" ) , edge( 0 , 2 , "else" ) ,
874
+ let g = LabelledGraphWithEscStrs :: new ( "syntax_tree" ,
875
+ labels,
876
+ vec ! ( edge( 0 , 1 , "then" ) , edge( 0 , 2 , "else" ) ,
862
877
edge( 1 , 3 , ";" ) , edge( 2 , 3 , ";" ) ) ) ;
863
878
864
879
render ( & g, & mut writer) . unwrap ( ) ;
0 commit comments