summaryrefslogtreecommitdiff
path: root/src/line.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/line.rs')
-rw-r--r--src/line.rs36
1 files changed, 16 insertions, 20 deletions
diff --git a/src/line.rs b/src/line.rs
index fce628c..b60b55c 100644
--- a/src/line.rs
+++ b/src/line.rs
@@ -82,31 +82,27 @@ impl ToString for Line {
}
-fn unlabeled_extern_link(path: String) -> Option<Token> {
- Some( Token::ExternalLink { path, label:String::new() } )
-}
-
-fn labelled_extern_link(s: String) -> Option<Token> {
- let (label, path) = match s.split_once("](") {
- Some((l, t)) => (l.to_string(), t.to_string()),
- None => return None,
- };
- if label.contains("]") || path.contains("]") { return None }
- Some( Token::ExternalLink { label, path } )
+fn external_link(inside: String) -> Option<Token> {
+ if let Some((label, path)) = inside.split_once("::") {
+ let label = label.trim().to_string();
+ let path = path.trim().to_string();
+ Some( Token::ExternalLink { label, path } )
+ } else {
+ Some( Token::ExternalLink { label: String::new(), path: inside })
+ }
}
-macro_rules! con {
+macro_rules! make {
($v:expr) => {|s| Some($v(s)) };
}
-const DELIMITERS: [(fn(String)->Option<Token>, &str, &str, &str); 7] = [
- ( con!(Token::Bold), "**", "**", "*" ),
- ( con!(Token::Italic), "_", "_", "_" ),
- ( con!(Token::Monospace), "`", "`", "`" ),
- ( con!(Token::Math), "$", "$", "$" ),
- ( con!(Token::InternalLink), "[[", "]]", "[]" ),
- ( labelled_extern_link, "[", ")", "[]()" ),
- ( unlabeled_extern_link, "<", ">", "<>" ),
+const DELIMITERS: [(fn(String)->Option<Token>, &str, &str, &str); 6] = [
+ ( make!(Token::Bold), "*", "*", "*" ),
+ ( make!(Token::Italic), "_", "_", "_" ),
+ ( make!(Token::Monospace), "`", "`", "`" ),
+ ( make!(Token::Math), "$", "$", "$" ),
+ ( make!(Token::InternalLink), "{", "}", "{}" ),
+ ( external_link, "<", ">", "<>" ),
];
fn is_whitespace(c: &char) -> bool {