#markdown #formatter #common-mark

fmtm_ytmimi_markdown_fmt

是 @ytmimi 的 Markdown 格式化器的分支;为 FMTM 提供动力

3 个版本

0.0.3 2024 年 5 月 29 日
0.0.2 2024 年 5 月 29 日
0.0.1 2024 年 5 月 28 日

793文本处理

Download history 460/week @ 2024-05-28 15/week @ 2024-06-04 5/week @ 2024-06-11

109 每月下载次数
fmtm 中使用

MIT 许可证

130KB
2.5K SLoC

FMTM: @ytmimi 的 markdown-fmt 的分支

这是 FMTM(一个友好的 Markdown 格式化器)的依赖项。因此,它需要发布在 crates.io 上。


lib.rs:

轻松格式化 Markdown。 fmtm_ytmimi_markdown_fmt 支持 CommonMarkGitHub Flavored Markdown

入门指南

use fmtm_ytmimi_markdown_fmt::MarkdownFormatter;

let markdown = r##" # Getting Started
1. numbered lists
1.  are easy!
"##;

let expected = r##"# Getting Started
1. numbered lists
1. are easy!
"##;

let output = MarkdownFormatter::default().format(markdown)?;
assert_eq!(output, expected);

使用 MarkdownFormatter 作为构建器

格式化器为您提供了配置 Markdown 格式的控制权。

use fmtm_ytmimi_markdown_fmt::*;
#[derive(Default)]
struct CodeBlockFormatter;
impl FormatterFn for CodeBlockFormatter {
    fn format(
        &mut self,
        buffer_type: BufferType,
        _max_width: Option<usize>,
        input: String,
    ) -> String {
        let BufferType::CodeBlock { info } = buffer_type else {
            unreachable!();
        };
        match info {
            Some(info) if info.as_ref() == "markdown" => {
                MarkdownFormatter::default().format(&input).unwrap_or(input)
            }
            _ => input,
        }
    }
}

let input = r##" # Using the Builder
+ markdown code block nested in a list
  ```markdown
  A nested markdown snippet!

   * unordered lists
   are also pretty easy!
   - `-` or `+` can also be used as unordered list markers.
   ```
"##;

let expected = r##"# Using the Builder
- markdown code block nested in a list
    ```markdown
    A nested markdown snippet!

    * unordered lists
      are also pretty easy!
    - `-` or `+` can also be used as unordered list markers.
    ```
"##;

type MyFormatter = MarkdownFormatter<
    FormatterCombination<
        FnFormatter<CodeBlockFormatter>,
        TrimTo4Indent,
        TrimTo4Indent,
        Paragraph,
    >,
>;
let output =
    MyFormatter::with_config_and_external_formatter(Config::sichanghe_opinion()).format(input)?;
assert_eq!(output, expected);

依赖关系

~3MB
~46K SLoC