markdown-formatter 0.0.13

Flavored Markdown (ZH) content formatter
Documentation
use regex::Regex;

/// 替换中文冒号
///
/// # Arguments
/// - `input` - 待格式化的内容
/// - `remove_extra_whitespace` - 是否需要去除多余的空格
pub fn convert_colon(input: String, remove_extra_whitespace: bool) -> String {
    let mut content = input.replace("", ": ");

    if remove_extra_whitespace {
        content = Regex::new(r": +\n")
            .unwrap()
            .replace_all(&content, ":\n")
            .to_string();
        content = content.trim_end().to_string();
    }

    content
}

/// 替换中文分号
///
/// # Arguments
/// - `input` - 待格式化的内容
/// - `remove_extra_whitespace` - 是否需要去除多余的空格
pub fn convert_semicolon(input: String, remove_extra_whitespace: bool) -> String {
    let mut content = input.replace("", "; ");

    if remove_extra_whitespace {
        content = Regex::new(r"; +\n")
            .unwrap()
            .replace_all(&content, ";\n")
            .to_string();
        content = content.trim_end().to_string();
    }

    content
}

/// 替换中文圆括号
///
/// # Arguments
/// - `input` - 待格式化的内容
/// - `remove_extra_whitespace` - 是否需要去除多余的空格
pub fn convert_parenthesis(input: String, remove_extra_whitespace: bool) -> String {
    let mut content = input.replace("", " (").replace("", ") ");
    if remove_extra_whitespace {
        content = Regex::new(r"\) (?P<match>[*,。?!:“”])")
            .unwrap()
            .replace_all(&content, ")${match}")
            .to_string();

        content = Regex::new(r"(?P<match>[*,。?!:“”]) \(")
            .unwrap()
            .replace_all(&content, "${match}(")
            .to_string();
    }

    content
}

#[cfg(test)]
mod test {
    use super::*;

    #[test]
    fn test_convert_colon() {
        let mut input = String::from("你好:");
        assert_eq!(convert_colon(input, false), "你好: ");

        input = String::from(
            r#"你好:
- 第一点;
- 第二点;"#,
        );
        assert_eq!(
            convert_colon(input, true),
            r#"你好:
- 第一点;
- 第二点;"#
        );
    }

    #[test]
    fn test_convert_semicolon() {
        let mut input = String::from("第一分句;第二份句");
        assert_eq!(
            convert_semicolon(input.clone(), false),
            "第一分句; 第二份句"
        );
        assert_eq!(convert_semicolon(input, true), "第一分句; 第二份句");

        input = String::from(
            r#"说几点问题:
- 第一点;
- 第二点;"#,
        );
        assert_eq!(
            convert_semicolon(input.clone(), true),
            r#"说几点问题:
- 第一点;
- 第二点;"#
        );
        assert_eq!(
            convert_semicolon(input, false),
            r#"说几点问题:
- 第一点; 
- 第二点; "#
        );
    }
}