如何按标题对 Markdown 各部分进行排序?

问题描述 投票:0回答:2

给定一个大型 Markdown 文件,其结构如下:

# Main

## Sub main Z
### Title Z
Content Z
### Title B
Content B

## Sub main A
### Title A
Content A

如何对其部分进行排序,以便它们按标题的字母顺序排列?

# Main

## Sub main A
### Title A
Content A

## Sub main Z
### Title B
Content B
### Title Z
Content Z
vba sorting ms-word markdown editor
2个回答
3
投票

我认为没有任何解决方案不需要您编写一些代码。

但是,如果您会编码,则编程解决方案非常简单:

  1. 将 Markdown 解析为 AST(抽象语法树)。
  2. 操作 AST,根据需要重新排序节点。
  3. 将修改后的 AST 写回 Markdown。

诀窍是选择一个支持上述步骤的 Markdown 解析器,它可以让你用你选择的语言来完成它,并且可以让你最轻松地完成它。

以下是我个人所知道的符合这些要求的:

潘多克

可能是世界上第一的 Markdown 工具包。 Pandoc的母语是Haskell,但它支持多种语言。如果您打算以后做很多 Markdown 的事情,那么无论如何,了解 Pandoc 可能是有意义的。

  • 它有一个选项

    --section-divs
    ,可以将文档转换为基于标题的节层次结构,这将使每个嵌套级别的节重新排序几乎微不足道(如果您会编码)。

  • 它具有对过滤器的支持,这正是我所描述的解决方案。

  • 它对 Lua 和 Lua 过滤器有特殊支持,这可能是最容易编码的。

  • 您还可以用其他语言编写过滤器:Python、PHP、Perl、Javascript/Typescript、Groovy、Ruby。

  • 快速网络搜索显示了许多示例过滤器。通过更多的搜索,您可能会幸运地找到一个可以完成您已经编写的操作的内容,尽管我对此表示怀疑,因为按字母顺序对部分进行排序似乎是一件不常见的事情。

CMark

CommonMark 的 C 参考实现。支持 C 以外的语言:

它提供了一个共享库(libcmark),其中包含将 CommonMark 文档解析为抽象语法树(AST)、操作 AST 以及将文档渲染为 HTML、groff man、LaTeX、CommonMark 或 AST 的 XML 表示形式的函数。它还提供了一个命令行程序(cmark)用于解析和渲染 CommonMark 文档。

  • 灵活。 CommonMark 输入被解析为 AST,可以在渲染之前以编程方式进行操作。
  • 多个渲染器。支持 HTML、groff man、LaTeX、CommonMark 和自定义 XML 格式的输出。并且很容易编写新的渲染器来支持其他格式。

在 python、lua、ruby 和其他动态语言中使用 libcmark 很容易:请参阅wrappers/子目录以获得一些简单的示例。

备注

专门围绕 AST 操作设计的基于 Javascript 的框架。我从未使用过它,但它可能有使 AST 操作更容易的工具,尽管我只是猜测。

🍀🍀🍀🍀

祝你好运!


-1
投票

我尝试使用

pandoc
,但从AST到Markdown的步骤丢失了许多格式,例如
new line
等。

我找到了另一种方法来做到这一点。我们只需要

MS Word

  1. 打开 Markdown 文件的想法
    Word
  2. 使用下一个代码创建新宏。我们找到所有标题 (
    #
    ) 并应用样式
    Title 1
    Title 2
    等。为您更改样式名称。
Sub insertStyleHeaders()
    Dim hashCount As Integer
    Dim styleStr As String
    
    Set oRng = ActiveDocument.Range
    With oRng.Find
        .text = "#"
        While .Execute
            oRng.MoveEnd wdParagraph
            If InStr(oRng.text, "# ") Then
                hashCount = Len(oRng.text) - Len(Replace(oRng.text, "#", ""))
                styleStr = "Title " + CStr(hashCount)
                oRng.Select
                oRng.Style = ActiveDocument.Styles(styleStr)
            End If
            oRng.Collapse wdCollapseEnd
        Wend
    End With
End Sub
  1. 运行宏后,鼠标右键单击:
    Expand/Collapse
    ->
    Collapse All Headings
  2. 现在我们有下一个文档。您需要通过鼠标选择项目组并调用按标题排序。

enter image description hereenter image description here

  1. 排序结束后,选择所有文档 (
    Ctrl + A
    ) 并应用
    plain text
    /
    default
    样式以删除标题样式。
  2. 最后,使用标尺移动缩进并保存文件。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.