@@ -49,10 +49,16 @@ fn try_with_syntax(syntax: &SyntaxReference, code: &str) -> Result<String> {
4949    Ok ( html_generator. finalize ( ) ) 
5050} 
5151
52- fn  select_syntax ( name :  Option < & str > ,  code :  & str )  -> & ' static  SyntaxReference  { 
52+ fn  select_syntax ( 
53+     name :  Option < & str > , 
54+     code :  & str , 
55+     default :  Option < & str > , 
56+ )  -> & ' static  SyntaxReference  { 
5357    name. and_then ( |name| { 
5458        if  name. is_empty ( )  { 
55-             return  SYNTAXES . find_syntax_by_token ( "rust" ) ; 
59+             if  let  Some ( default)  = default { 
60+                 return  SYNTAXES . find_syntax_by_token ( default) ; 
61+             } 
5662        } 
5763        SYNTAXES . find_syntax_by_token ( name) . or_else ( || { 
5864            name. rsplit_once ( '.' ) 
@@ -63,12 +69,12 @@ fn select_syntax(name: Option<&str>, code: &str) -> &'static SyntaxReference {
6369    . unwrap_or_else ( || SYNTAXES . find_syntax_plain_text ( ) ) 
6470} 
6571
66- pub  fn  try_with_lang ( lang :  Option < & str > ,  code :  & str )  -> Result < String >  { 
67-     try_with_syntax ( select_syntax ( lang,  code) ,  code) 
72+ pub  fn  try_with_lang ( lang :  Option < & str > ,  code :  & str ,   default :   Option < & str > )  -> Result < String >  { 
73+     try_with_syntax ( select_syntax ( lang,  code,  default ) ,  code) 
6874} 
6975
70- pub  fn  with_lang ( lang :  Option < & str > ,  code :  & str )  -> String  { 
71-     match  try_with_lang ( lang,  code)  { 
76+ pub  fn  with_lang ( lang :  Option < & str > ,  code :  & str ,   default :   Option < & str > )  -> String  { 
77+     match  try_with_lang ( lang,  code,  default )  { 
7278        Ok ( highlighted)  => highlighted, 
7379        Err ( err)  => { 
7480            if  err. is :: < LimitsExceeded > ( )  { 
@@ -92,23 +98,29 @@ mod tests {
9298
9399    #[ test]  
94100    fn  custom_filetypes ( )  { 
95-         let  toml = select_syntax ( Some ( "toml" ) ,  "" ) ; 
101+         let  toml = select_syntax ( Some ( "toml" ) ,  "" ,   None ) ; 
96102
97-         assert_eq ! ( select_syntax( Some ( "Cargo.toml.orig" ) ,  "" ) . name,  toml. name) ; 
98-         assert_eq ! ( select_syntax( Some ( "Cargo.lock" ) ,  "" ) . name,  toml. name) ; 
103+         assert_eq ! ( 
104+             select_syntax( Some ( "Cargo.toml.orig" ) ,  "" ,  None ) . name, 
105+             toml. name
106+         ) ; 
107+         assert_eq ! ( select_syntax( Some ( "Cargo.lock" ) ,  "" ,  None ) . name,  toml. name) ; 
99108    } 
100109
101110    #[ test]  
102111    fn  dotfile_with_extension ( )  { 
103-         let  toml = select_syntax ( Some ( "toml" ) ,  "" ) ; 
112+         let  toml = select_syntax ( Some ( "toml" ) ,  "" ,   None ) ; 
104113
105-         assert_eq ! ( select_syntax( Some ( ".rustfmt.toml" ) ,  "" ) . name,  toml. name) ; 
114+         assert_eq ! ( 
115+             select_syntax( Some ( ".rustfmt.toml" ) ,  "" ,  None ) . name, 
116+             toml. name
117+         ) ; 
106118    } 
107119
108120    #[ test]  
109121    fn  limits ( )  { 
110122        let  is_limited = |s :  String | { 
111-             try_with_lang ( Some ( "toml" ) ,  & s) 
123+             try_with_lang ( Some ( "toml" ) ,  & s,   None ) 
112124                . unwrap_err ( ) 
113125                . is :: < LimitsExceeded > ( ) 
114126        } ; 
@@ -119,7 +131,7 @@ mod tests {
119131    #[ test]  
120132    fn  limited_escaped ( )  { 
121133        let  text = "<p>\n " . to_string ( )  + "aa" . repeat ( PER_LINE_BYTE_LENGTH_LIMIT ) . as_str ( ) ; 
122-         let  highlighted = with_lang ( Some ( "toml" ) ,  & text) ; 
134+         let  highlighted = with_lang ( Some ( "toml" ) ,  & text,   None ) ; 
123135        assert ! ( highlighted. starts_with( "<p>\n " ) ) ; 
124136    } 
125137} 
0 commit comments