@@ -413,8 +413,8 @@ impl<'a> Id<'a> {
413
413
{
414
414
let mut chars = name. chars ( ) ;
415
415
match chars. next ( ) {
416
- Some ( c) if is_letter_or_underscore ( c) => { ; } ,
417
- _ => return Err ( ( ) )
416
+ Some ( c) if is_letter_or_underscore ( c) => { }
417
+ _ => return Err ( ( ) ) ,
418
418
}
419
419
if !chars. all ( is_constituent) {
420
420
return Err ( ( ) )
@@ -505,24 +505,28 @@ pub fn escape_html(s: &str) -> String {
505
505
}
506
506
507
507
impl < ' a > LabelText < ' a > {
508
- pub fn label < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
508
+ pub fn label < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
509
509
LabelStr ( s. into_cow ( ) )
510
510
}
511
511
512
- pub fn escaped < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
512
+ pub fn escaped < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
513
513
EscStr ( s. into_cow ( ) )
514
514
}
515
515
516
- pub fn html < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
516
+ pub fn html < S : IntoCow < ' a , str > > ( s : S ) -> LabelText < ' a > {
517
517
HtmlStr ( s. into_cow ( ) )
518
518
}
519
519
520
- fn escape_char < F > ( c : char , mut f : F ) where F : FnMut ( char ) {
520
+ fn escape_char < F > ( c : char , mut f : F )
521
+ where F : FnMut ( char )
522
+ {
521
523
match c {
522
524
// not escaping \\, since Graphviz escString needs to
523
525
// interpret backslashes; see EscStr above.
524
526
'\\' => f ( c) ,
525
- _ => for c in c. escape_default ( ) { f ( c) }
527
+ _ => for c in c. escape_default ( ) {
528
+ f ( c)
529
+ } ,
526
530
}
527
531
}
528
532
fn escape_str ( s : & str ) -> String {
@@ -613,29 +617,42 @@ pub enum RenderOption {
613
617
}
614
618
615
619
/// Returns vec holding all the default render options.
616
- pub fn default_options ( ) -> Vec < RenderOption > { vec ! [ ] }
620
+ pub fn default_options ( ) -> Vec < RenderOption > {
621
+ vec ! [ ]
622
+ }
617
623
618
624
/// Renders directed graph `g` into the writer `w` in DOT syntax.
619
625
/// (Simple wrapper around `render_opts` that passes a default set of options.)
620
- pub fn render < ' a , N : Clone +' a , E : Clone +' a , G : Labeller < ' a , N , E > +GraphWalk < ' a , N , E > , W : Write > (
621
- g : & ' a G ,
622
- w : & mut W ) -> io:: Result < ( ) > {
626
+ pub fn render < ' a ,
627
+ N : Clone + ' a ,
628
+ E : Clone + ' a ,
629
+ G : Labeller < ' a , N , E > + GraphWalk < ' a , N , E > ,
630
+ W : Write >
631
+ ( g : & ' a G ,
632
+ w : & mut W )
633
+ -> io:: Result < ( ) > {
623
634
render_opts ( g, w, & [ ] )
624
635
}
625
636
626
637
/// Renders directed graph `g` into the writer `w` in DOT syntax.
627
638
/// (Main entry point for the library.)
628
- pub fn render_opts < ' a , N : Clone +' a , E : Clone +' a , G : Labeller < ' a , N , E > +GraphWalk < ' a , N , E > , W : Write > (
629
- g : & ' a G ,
630
- w : & mut W ,
631
- options : & [ RenderOption ] ) -> io:: Result < ( ) >
632
- {
633
- fn writeln < W : Write > ( w : & mut W , arg : & [ & str ] ) -> io:: Result < ( ) > {
634
- for & s in arg { try!( w. write_all ( s. as_bytes ( ) ) ) ; }
639
+ pub fn render_opts < ' a ,
640
+ N : Clone + ' a ,
641
+ E : Clone + ' a ,
642
+ G : Labeller < ' a , N , E > + GraphWalk < ' a , N , E > ,
643
+ W : Write >
644
+ ( g : & ' a G ,
645
+ w : & mut W ,
646
+ options : & [ RenderOption ] )
647
+ -> io:: Result < ( ) > {
648
+ fn writeln < W : Write > ( w : & mut W , arg : & [ & str ] ) -> io:: Result < ( ) > {
649
+ for & s in arg {
650
+ try!( w. write_all ( s. as_bytes ( ) ) ) ;
651
+ }
635
652
write ! ( w, "\n " )
636
653
}
637
654
638
- fn indent < W : Write > ( w : & mut W ) -> io:: Result < ( ) > {
655
+ fn indent < W : Write > ( w : & mut W ) -> io:: Result < ( ) > {
639
656
w. write_all ( b" " )
640
657
}
641
658
@@ -748,7 +765,7 @@ mod tests {
748
765
// A simple wrapper around LabelledGraph that forces the labels to
749
766
// be emitted as EscStr.
750
767
struct LabelledGraphWithEscStrs {
751
- graph : LabelledGraph
768
+ graph : LabelledGraph ,
752
769
}
753
770
754
771
enum NodeLabels < L > {
@@ -762,13 +779,9 @@ mod tests {
762
779
impl NodeLabels < & ' static str > {
763
780
fn to_opt_strs ( self ) -> Vec < Option < & ' static str > > {
764
781
match self {
765
- UnlabelledNodes ( len)
766
- => vec ! [ None ; len] ,
767
- AllNodesLabelled ( lbls)
768
- => lbls. into_iter ( ) . map (
769
- |l|Some ( l) ) . collect ( ) ,
770
- SomeNodesLabelled ( lbls)
771
- => lbls. into_iter ( ) . collect ( ) ,
782
+ UnlabelledNodes ( len) => vec ! [ None ; len] ,
783
+ AllNodesLabelled ( lbls) => lbls. into_iter ( ) . map ( |l| Some ( l) ) . collect ( ) ,
784
+ SomeNodesLabelled ( lbls) => lbls. into_iter ( ) . collect ( ) ,
772
785
}
773
786
}
774
787
@@ -785,7 +798,8 @@ mod tests {
785
798
fn new ( name : & ' static str ,
786
799
node_labels : Trivial ,
787
800
edges : Vec < Edge > ,
788
- node_styles : Option < Vec < Style > > ) -> LabelledGraph {
801
+ node_styles : Option < Vec < Style > > )
802
+ -> LabelledGraph {
789
803
let count = node_labels. len ( ) ;
790
804
LabelledGraph {
791
805
name : name,
@@ -794,21 +808,17 @@ mod tests {
794
808
node_styles : match node_styles {
795
809
Some ( nodes) => nodes,
796
810
None => vec ! [ Style :: None ; count] ,
797
- }
811
+ } ,
798
812
}
799
813
}
800
814
}
801
815
802
816
impl LabelledGraphWithEscStrs {
803
817
fn new ( name : & ' static str ,
804
818
node_labels : Trivial ,
805
- edges : Vec < Edge > ) -> LabelledGraphWithEscStrs {
806
- LabelledGraphWithEscStrs {
807
- graph : LabelledGraph :: new ( name,
808
- node_labels,
809
- edges,
810
- None )
811
- }
819
+ edges : Vec < Edge > )
820
+ -> LabelledGraphWithEscStrs {
821
+ LabelledGraphWithEscStrs { graph : LabelledGraph :: new ( name, node_labels, edges, None ) }
812
822
}
813
823
}
814
824
@@ -826,61 +836,65 @@ mod tests {
826
836
fn node_label ( & ' a self , n : & Node ) -> LabelText < ' a > {
827
837
match self . node_labels [ * n] {
828
838
Some ( ref l) => LabelStr ( l. into_cow ( ) ) ,
829
- None => LabelStr ( id_name ( n) . name ( ) ) ,
839
+ None => LabelStr ( id_name ( n) . name ( ) ) ,
830
840
}
831
841
}
832
- fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
842
+ fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
833
843
LabelStr ( e. label . into_cow ( ) )
834
844
}
835
845
fn node_style ( & ' a self , n : & Node ) -> Style {
836
846
self . node_styles [ * n]
837
847
}
838
- fn edge_style ( & ' a self , e : & & ' a Edge ) -> Style {
848
+ fn edge_style ( & ' a self , e : & & ' a Edge ) -> Style {
839
849
e. style
840
850
}
841
851
}
842
852
843
853
impl < ' a > Labeller < ' a , Node , & ' a Edge > for LabelledGraphWithEscStrs {
844
- fn graph_id ( & ' a self ) -> Id < ' a > { self . graph . graph_id ( ) }
845
- fn node_id ( & ' a self , n : & Node ) -> Id < ' a > { self . graph . node_id ( n) }
854
+ fn graph_id ( & ' a self ) -> Id < ' a > {
855
+ self . graph . graph_id ( )
856
+ }
857
+ fn node_id ( & ' a self , n : & Node ) -> Id < ' a > {
858
+ self . graph . node_id ( n)
859
+ }
846
860
fn node_label ( & ' a self , n : & Node ) -> LabelText < ' a > {
847
861
match self . graph . node_label ( n) {
848
862
LabelStr ( s) | EscStr ( s) | HtmlStr ( s) => EscStr ( s) ,
849
863
}
850
864
}
851
- fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
865
+ fn edge_label ( & ' a self , e : & & ' a Edge ) -> LabelText < ' a > {
852
866
match self . graph . edge_label ( e) {
853
867
LabelStr ( s) | EscStr ( s) | HtmlStr ( s) => EscStr ( s) ,
854
868
}
855
869
}
856
870
}
857
871
858
872
impl < ' a > GraphWalk < ' a , Node , & ' a Edge > for LabelledGraph {
859
- fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
873
+ fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
860
874
( 0 ..self . node_labels . len ( ) ) . collect ( )
861
875
}
862
- fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
876
+ fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
863
877
self . edges . iter ( ) . collect ( )
864
878
}
865
- fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
879
+ fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
866
880
edge. from
867
881
}
868
- fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
882
+ fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
869
883
edge. to
870
884
}
871
885
}
872
886
873
887
impl < ' a > GraphWalk < ' a , Node , & ' a Edge > for LabelledGraphWithEscStrs {
874
- fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
888
+ fn nodes ( & ' a self ) -> Nodes < ' a , Node > {
875
889
self . graph . nodes ( )
876
890
}
877
- fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
891
+ fn edges ( & ' a self ) -> Edges < ' a , & ' a Edge > {
878
892
self . graph . edges ( )
879
893
}
880
- fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
894
+ fn source ( & ' a self , edge : & & ' a Edge ) -> Node {
881
895
edge. from
882
896
}
883
- fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
897
+ fn target ( & ' a self , edge : & & ' a Edge ) -> Node {
884
898
edge. to
885
899
}
886
900
}
@@ -899,7 +913,7 @@ mod tests {
899
913
900
914
#[ test]
901
915
fn empty_graph ( ) {
902
- let labels : Trivial = UnlabelledNodes ( 0 ) ;
916
+ let labels: Trivial = UnlabelledNodes ( 0 ) ;
903
917
let r = test_input ( LabelledGraph :: new ( "empty_graph" , labels, vec ! [ ] , None ) ) ;
904
918
assert_eq ! ( r. unwrap( ) ,
905
919
r#"digraph empty_graph {
@@ -909,7 +923,7 @@ r#"digraph empty_graph {
909
923
910
924
#[ test]
911
925
fn single_node ( ) {
912
- let labels : Trivial = UnlabelledNodes ( 1 ) ;
926
+ let labels: Trivial = UnlabelledNodes ( 1 ) ;
913
927
let r = test_input ( LabelledGraph :: new ( "single_node" , labels, vec ! [ ] , None ) ) ;
914
928
assert_eq ! ( r. unwrap( ) ,
915
929
r#"digraph single_node {
@@ -920,7 +934,7 @@ r#"digraph single_node {
920
934
921
935
#[ test]
922
936
fn single_node_with_style ( ) {
923
- let labels : Trivial = UnlabelledNodes ( 1 ) ;
937
+ let labels: Trivial = UnlabelledNodes ( 1 ) ;
924
938
let styles = Some ( vec ! [ Style :: Dashed ] ) ;
925
939
let r = test_input ( LabelledGraph :: new ( "single_node" , labels, vec ! [ ] , styles) ) ;
926
940
assert_eq ! ( r. unwrap( ) ,
@@ -932,9 +946,11 @@ r#"digraph single_node {
932
946
933
947
#[ test]
934
948
fn single_edge ( ) {
935
- let labels : Trivial = UnlabelledNodes ( 2 ) ;
936
- let result = test_input ( LabelledGraph :: new ( "single_edge" , labels,
937
- vec ! [ edge( 0 , 1 , "E" , Style :: None ) ] , None ) ) ;
949
+ let labels: Trivial = UnlabelledNodes ( 2 ) ;
950
+ let result = test_input ( LabelledGraph :: new ( "single_edge" ,
951
+ labels,
952
+ vec ! [ edge( 0 , 1 , "E" , Style :: None ) ] ,
953
+ None ) ) ;
938
954
assert_eq ! ( result. unwrap( ) ,
939
955
r#"digraph single_edge {
940
956
N0[label="N0"];
@@ -946,9 +962,11 @@ r#"digraph single_edge {
946
962
947
963
#[ test]
948
964
fn single_edge_with_style ( ) {
949
- let labels : Trivial = UnlabelledNodes ( 2 ) ;
950
- let result = test_input ( LabelledGraph :: new ( "single_edge" , labels,
951
- vec ! [ edge( 0 , 1 , "E" , Style :: Bold ) ] , None ) ) ;
965
+ let labels: Trivial = UnlabelledNodes ( 2 ) ;
966
+ let result = test_input ( LabelledGraph :: new ( "single_edge" ,
967
+ labels,
968
+ vec ! [ edge( 0 , 1 , "E" , Style :: Bold ) ] ,
969
+ None ) ) ;
952
970
assert_eq ! ( result. unwrap( ) ,
953
971
r#"digraph single_edge {
954
972
N0[label="N0"];
@@ -960,10 +978,12 @@ r#"digraph single_edge {
960
978
961
979
#[ test]
962
980
fn test_some_labelled ( ) {
963
- let labels : Trivial = SomeNodesLabelled ( vec ! [ Some ( "A" ) , None ] ) ;
981
+ let labels: Trivial = SomeNodesLabelled ( vec ! [ Some ( "A" ) , None ] ) ;
964
982
let styles = Some ( vec ! [ Style :: None , Style :: Dotted ] ) ;
965
- let result = test_input ( LabelledGraph :: new ( "test_some_labelled" , labels,
966
- vec ! [ edge( 0 , 1 , "A-1" , Style :: None ) ] , styles) ) ;
983
+ let result = test_input ( LabelledGraph :: new ( "test_some_labelled" ,
984
+ labels,
985
+ vec ! [ edge( 0 , 1 , "A-1" , Style :: None ) ] ,
986
+ styles) ) ;
967
987
assert_eq ! ( result. unwrap( ) ,
968
988
r#"digraph test_some_labelled {
969
989
N0[label="A"];
@@ -975,9 +995,11 @@ r#"digraph test_some_labelled {
975
995
976
996
#[ test]
977
997
fn single_cyclic_node ( ) {
978
- let labels : Trivial = UnlabelledNodes ( 1 ) ;
979
- let r = test_input ( LabelledGraph :: new ( "single_cyclic_node" , labels,
980
- vec ! [ edge( 0 , 0 , "E" , Style :: None ) ] , None ) ) ;
998
+ let labels: Trivial = UnlabelledNodes ( 1 ) ;
999
+ let r = test_input ( LabelledGraph :: new ( "single_cyclic_node" ,
1000
+ labels,
1001
+ vec ! [ edge( 0 , 0 , "E" , Style :: None ) ] ,
1002
+ None ) ) ;
981
1003
assert_eq ! ( r. unwrap( ) ,
982
1004
r#"digraph single_cyclic_node {
983
1005
N0[label="N0"];
@@ -989,11 +1011,13 @@ r#"digraph single_cyclic_node {
989
1011
#[ test]
990
1012
fn hasse_diagram ( ) {
991
1013
let labels = AllNodesLabelled ( vec ! ( "{x,y}" , "{x}" , "{y}" , "{}" ) ) ;
992
- let r = test_input ( LabelledGraph :: new (
993
- "hasse_diagram" , labels,
994
- vec ! [ edge( 0 , 1 , "" , Style :: None ) , edge( 0 , 2 , "" , Style :: None ) ,
995
- edge( 1 , 3 , "" , Style :: None ) , edge( 2 , 3 , "" , Style :: None ) ] ,
996
- None ) ) ;
1014
+ let r = test_input ( LabelledGraph :: new ( "hasse_diagram" ,
1015
+ labels,
1016
+ vec ! [ edge( 0 , 1 , "" , Style :: None ) ,
1017
+ edge( 0 , 2 , "" , Style :: None ) ,
1018
+ edge( 1 , 3 , "" , Style :: None ) ,
1019
+ edge( 2 , 3 , "" , Style :: None ) ] ,
1020
+ None ) ) ;
997
1021
assert_eq ! ( r. unwrap( ) ,
998
1022
r#"digraph hasse_diagram {
999
1023
N0[label="{x,y}"];
@@ -1024,10 +1048,12 @@ r#"digraph hasse_diagram {
1024
1048
1025
1049
let mut writer = Vec :: new ( ) ;
1026
1050
1027
- let g = LabelledGraphWithEscStrs :: new (
1028
- "syntax_tree" , labels,
1029
- vec ! [ edge( 0 , 1 , "then" , Style :: None ) , edge( 0 , 2 , "else" , Style :: None ) ,
1030
- edge( 1 , 3 , ";" , Style :: None ) , edge( 2 , 3 , ";" , Style :: None ) ] ) ;
1051
+ let g = LabelledGraphWithEscStrs :: new ( "syntax_tree" ,
1052
+ labels,
1053
+ vec ! [ edge( 0 , 1 , "then" , Style :: None ) ,
1054
+ edge( 0 , 2 , "else" , Style :: None ) ,
1055
+ edge( 1 , 3 , ";" , Style :: None ) ,
1056
+ edge( 2 , 3 , ";" , Style :: None ) ] ) ;
1031
1057
1032
1058
render ( & g, & mut writer) . unwrap ( ) ;
1033
1059
let mut r = String :: new ( ) ;
@@ -1051,8 +1077,8 @@ r#"digraph syntax_tree {
1051
1077
fn simple_id_construction ( ) {
1052
1078
let id1 = Id :: new ( "hello" ) ;
1053
1079
match id1 {
1054
- Ok ( _) => { ; } ,
1055
- Err ( ..) => panic ! ( "'hello' is not a valid value for id anymore" )
1080
+ Ok ( _) => { }
1081
+ Err ( ..) => panic ! ( "'hello' is not a valid value for id anymore" ) ,
1056
1082
}
1057
1083
}
1058
1084
@@ -1061,7 +1087,7 @@ r#"digraph syntax_tree {
1061
1087
let id2 = Id :: new ( "Weird { struct : ure } !!!" ) ;
1062
1088
match id2 {
1063
1089
Ok ( _) => panic ! ( "graphviz id suddenly allows spaces, brackets and stuff" ) ,
1064
- Err ( ..) => { ; }
1090
+ Err ( ..) => { }
1065
1091
}
1066
1092
}
1067
1093
}
0 commit comments