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