首页 > 解决方案 > 将 Stack Exchange Markdown 转换为 Github Markdown

问题描述

有没有人记录过 Stack Exchange 标记和 Github 标记之间的区别?

我正在进行将 Stack Exchange Markdown 转换为 Github Markdown 的项目。这可能会稍微复杂一些,因为 Github Pages 上的 Jekyll 使用了一种名为“Kramdown”的 Markdown 衍生产品。

我已经在我的 Python 程序中编写了一些转换。例如,旧的 SE 帖子#Header必须转换为# Header.

另一个例子是“> 块引用”行在行尾附加了两个空格。

现在它开始变得棘手(至少对我而言)在 SE 中的图像中指定为:

[![Ubuntu 5 DE.png][1]][1]

**Note:** Blah, blah, blah

  [1]: https://i.stack.imgur.com/MoxHd.jpg

它必须转换为 Github 图像降价格式:

![Ubuntu 5 DE.png](https://i.stack.imgur.com/MoxHd.jpg)

**Note:** Blah, blah, blah

Stack Exchange Markdown 中“页脚超链接”(因为缺少更好的名词)的另一个示例是:

- [Jack Master Volume?][1]

The simplest solution then is to install [JackMix][2]:

find listed [here][3].

[this script][4] is where you are heading:


  [1]: https://discourse.ardour.org/t/jack-master-volume/84650
  [2]: http://www.arnoldarts.de/jackmix/.
  [3]: http://jackaudio.org/applications/
  [4]: https://unix.stackexchange.com/questions/374085/lower-or-increase-pulseaudio-volume-on-all-outputs

需要转换为 Github Markdown 格式的:

- [Jack Master Volume?](https://discourse.ardour.org/t/jack-master-volume/84650)

The simplest solution then is to install [JackMix](http://www.arnoldarts.de/jackmix/.):

find listed [here](http://jackaudio.org/applications/).

[this script](https://unix.stackexchange.com/questions/374085/lower-or-increase-pulseaudio-volume-on-all-outputs) is where you are heading:

最后今晚我发现在 Stack Exchange 中你可以拥有:

<!-- language: bash -->

    #!/bin/bash
    cat "$Filename.zip" | base64 > "$Filename64"

这需要像这样重新格式化为 Github Markdown:

``` bash
#!/bin/bash
cat "$Filename.zip" | base64 > "$Filename64"
```

当 SE Markdown 具有以下功能时,情况会变得更加复杂:

<!-- language-all: lang-bash -->

或者它有这个:

<pre><code>Some lines of code
some more lines of
code </code></pre>

一个现有的 Github Repo 来转换会很棒!如果没有,那么如果有人记录了 Stack Exchange 标记和 Github 标记之间的差异,那也很棒。

如果这个问题有一个月没有得到解答,那么我想我最终会在试错修复过程完成后回答它。

标签: githubtype-conversionmarkdownstackexchange

解决方案


自我回答似乎回答了一个不同的问题,所以我将回答上面提出的问题。

有没有人记录过 Stack Exchange 标记和 Github 标记之间的区别?

截至 2020 年年中,Stack Exchange 使用 CommonMark并支持一些自定义功能“如剧透、MathJax、电路图、堆栈片段等”。

GitHub 使用他们自己的方言,GitHub Flavored Markdown (GFM)。GFM 引入的最值得注意的扩展可能是表格(自 2020 年底以来在 SE 上受支持)、防护代码块(自 2019 年初以来在 SE 上受支持)和任务列表(在 SE 上不受支持但也不是真正必要的)。

上面显示的大多数示例在 Stack Exchange 上或通过兼容的 GFM 实现呈现时都可以正常工作,但让我们依次看一下:

  1. 例如,旧的 SE 帖子#Header必须转换为# Header.

    应该通过迁移到 CommonMark 来清除:

    我们将在网络上进行大规模迁移,将现有帖子转换为使用新的 CommonMark 格式

  2. 另一个例子是“> 块引用”行在行尾附加了两个空格。

    行尾的两个空格表示 Markdown 中的换行符,一直回到原始实现

    Blockquotes 不需要这样的换行符,尽管没有它们它们会重新换行。换行符和块引用是不相关的功能。

  3. 您的图像示例可以在两种格式中互换。让我们看一下SE:

     [![Ubuntu 5 DE.png][1]][1]
    
     **Note:** Blah, blah, blah
    
       [1]: https://i.stack.imgur.com/MoxHd.jpg
    

    此处没有特定于 Stack Exchange 的内容。

    [foo][1]...语法是一个引用样式的[1]: https://...链接,同样来自原始项目。它相当于内联表单[foo](https://...)。两种形式都适用于两个平台。![Ubuntu 5 DE.png][1]……[1]: https://i.stack.imgur.com/MoxHd.jpg与 相同![Ubuntu 5 DE.png](https://i.stack.imgur.com/MoxHd.jpg)

    在 SE 上,默认情况下图像由链接包装,它引入了 wrapping [...][1]。但是,同样,这不是 SE 特定的。这就像<img src="...">比较<a href="..."><img src="..."></a>。这也适用于两个平台。

  4. “页脚超链接”的另一个例子(因为缺少更好的名词)

    这些是已经讨论过的参考样式链接,并且出现在我见过的每个版本的 Markdown 中,包括原始项目。他们在 GFM 中的工作与在 CommonMark 中一样。无需转换。

  5. 最后今晚我发现在 Stack Exchange 中你可以拥有:

    <!-- language: bash -->
    
        #!/bin/bash
        cat "$Filename.zip" | base64 > "$Filename64"
    

    这需要像这样重新格式化为 Github Markdown:

    ``` bash
    #!/bin/bash cat "$Filename.zip" | base64 > "$Filename64"
    ```
    

    这是上面唯一需要任何特殊行为的示例。但是,它大多是开箱即用的。GFM 支持缩进代码块,SE 已经支持围栏代码块超过三年。

    GFM 不理解传统的 HTML 样式的 SE 语言提示<!-- language: bash --><!-- language-all: ... -->,因此它将呈现此类代码块而不会突出显示语法。但它们仍将呈现为代码块。

  6. 最后一个示例只是两个平台(和原始平台)都知道如何呈现的嵌入式 HTML:

     <pre><code>Some lines of code
     some more lines of
     code </code></pre>
    

除了 HTML 风格的语言提示之外,您在上面展示的每个示例都可以在 Stack Exchange 和 GitHub Flavored Markdown 上开箱即用。无需转换。


推荐阅读