0

有没有人记录过 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 标记之间的差异,那也很棒。

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

4

2 回答 2

2

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

有没有人记录过 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 上开箱即用。无需转换。

于 2022-02-16T23:23:44.570 回答
0

将数千个 Stack Exchange Q&A 转换为 markdown 格式并不像简单地将它们复制到 GitHub Pages 那样简单。python 程序 stack-to-blog.py用于将 Stack Exchange 帖子转换为 GitHub Pages 帖子。完整的stack-to-blog.py程序可以在 Pippim 网站 repo上访问。

程序自动:

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

此处提供了完整的文档。

这是程序运行时的样子:

在此处输入图像描述

于 2022-02-13T14:21:44.633 回答