将 Stack Exchange Markdown 转换为 Github Markdown

Convert Stack Exchange Markdown to Github Markdown

是否有人记录了 Stack Exchange 标记和 Github 标记之间的差异?

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

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

另一个例子是“> Block quote”行在行尾附加了两个空格。

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

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

**Note:** Blah, blah, blah

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

需要转成Github图片markdown格式:

![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 标记之间的差异,那也很好。

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

将数以千计的 Stack Exchange 问答转换为降价格式并不容易 只是将它们复制到 GitHub 页。 python 程序 stack-to-blog.py 用于将 Stack Exchange post 转换为 GitHub 页面帖子。 完整的 stack-to-blog.py 程序可以访问 Pippim Website repo .

程序自动:

  • 在 post 上创建 Jekyll 前言和网站前言总数。
  • 根据满足最低标准(例如 up-votes 或接受的答案状态)选择 Stack Exchange 帖子。
  • 如果 self-answered 问题,则包括答案而不是问题。
  • 如果 self-answered 问题,仅接受的答案不合格。其他人的投票是预选赛。
  • 初始测试允许选择一小组随机记录号进行转换。
  • 将 Stack Exchange Markdown 格式转换为 GitHub Pages Kramdown Markdown 格式。
  • 在 GitHub 页中创建指向 Stack Exchange 中原始答案和 Kramdown 的超链接。
  • 创建搜索词到 URL 索引,排除 50% 的词,如“a”、“the”等,以保存 space。
  • 根据最低条件设置有选择地插入 Table 的内容。
  • 有选择地插入部分导航按钮:Top(页面顶部),ToS(部分顶部),ToC(Table 的目录)和 Skip(跳过部分)。
  • 根据代码行有选择地插入“将代码块复制到系统剪贴板”按钮。
  • 创建 HTML 票数最高的“十大答案”。
  • 通过 post.
  • 为数千个标签创建强大的嵌套 expandable/collapsible detail/summary HTML
  • 将 Stack Exchange 帖子中的超链接重新映射到 {{ site.title }} 网站 posts(如果它们已转换)。
  • 修复旧的损坏 #header Stack Exchange Markdown。
  • < block quote Stack Exchange Markdown 转换为 Jekyll Kramdown 中可用的内容。
  • 将 Stack Exchange <!-- language --> 标签转换为受保护的代码块语言。
  • 当没有提供受保护的代码块语言时,首先使用 shebang 语言(如果可用)。
  • 将较旧的 four-space 缩进代码块转换为围栏代码块。
  • 转换 Stack Exchange 超链接,其中网站 post 标题是隐含的而不是明确的。
  • 打印在强制性两天等待期后未被接受的 self-answered 个问题列表。
  • 打印受防护代码块不支持的 Rouge 语法高亮语言列表。
  • 完成后打印总计。

提供了完整的文档 here

这是 运行:

时程序的样子

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

Has anyone documented the differences between Stack Exchange Markup and Github Markup?

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

GitHub 使用他们自己的方言,GitHub Flavored Markdown (GFM). The most notable extensions that GFM introduces are probably tables (supported on SE since late 2020), fenced code blocks (supported on SE since early 2019) 和任务列表(不受支持,但在 SE 上也不是真正必要的)。

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

  1. For example old SE posts with #Header must be converted to # Header.

    应该 已通过迁移到 CommonMark 得到清理:

    we will run a big migration across the network that will convert existing posts to use the new CommonMark format

  2. Another example are "> Block quote" lines have two spaces appended to the end of the line.

    行尾两个空格表示Markdown换行,going all the way back to the original implementation.

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

  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://... 语法是 reference-style link,comes from the original project。它等同于内联形式[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 上,图像默认由 link 包裹,这引入了包裹 [...][1]。但是,这又不是 SE-specific。这就像比较 <img src="..."><a href="..."><img src="..."></a>。这也适用于两个平台。

  4. Another example of "footer hyper links" (for lack of a better noun)

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

  5. Finally tonight I discovered that in Stack Exchange you can have:

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

    That needs reformatting to Github Markdown like this:

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

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

    GFM 不理解旧版 HTML-style SE 语言提示 <!-- language: bash --><!-- language-all: ... -->,因此它会在不突出显示语法的情况下呈现此类代码块。但它们仍将呈现为代码块。

  6. 最后一个例子只是嵌入了 HTML 两个平台 (and the original) 都知道如何呈现:

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

除了 HTML-style 语言提示外,上面显示的每个示例都可以在 Stack Exchange 和 GitHub Flavored Markdown 上直接使用。无需转换。