【问题标题】:Convert SPIP text to markdown (or HTML)将 SPIP 文本转换为 markdown(或 HTML)
【发布时间】:2016-07-24 06:06:04
【问题描述】:

我必须更新一个基于 SPIP(一种具有特定 Markdown-like 语法的法国 CMS)的旧网站。

我想将其数据库内容转换为 markdown,但我没有找到任何有用的资源将 SPIP 语法转换为 HTML(然后通过 league/html-to-markdown 转换为 markdown,例如),但我不能找到正确的方法(从 SPIP 的代码)用来这样做。

任何帮助都会很棒。

【问题讨论】:

    标签: markdown spip


    【解决方案1】:

    和你一样,我不知道这样的工具,所以当我不得不面对导出 SPIP 数据的问题时,我创建了我的。但是这个工具:

    • 旨在输出 XML 而不是 HTML
    • 是作为SPIP的插件实现的,所以必须先安装,再从SPIP私有区驱动
    • 老实说,因为它发生在几年前,我对此并没有太多的想法

    所以我不能现实地建议你使用它。
    另一方面,如果您想编写自己的工具,您可以利用以下摘录,这是我工具的核心:

    $spip2xml_specifs = [
      'data_fields' => [
      # obj => [
      #   dest_field =>  src_field | [src_field,...]
      # ]
      # in src_field, initial "*" means: do not apply filters
        'rub' => [
          'titre' => '*titre',
          'body'  => ['descriptif','texte'],
        ],
        'art' => [
          'titre' => '*titre',
          'body'  => ['*surtitre','*soustitre','descriptif','chapo','texte','ps'],
        ],
      ),
      'str_replace' => [
        "\r\n"                                => "\n", # normalize Win with *nix
      ],
      'preg_replace' => [
        '¤\n\n\n*¤'                           => "\n\n", # limit multiple \n up to 2
        #
        '¤{{{(.+)}}}¤msU'                     => '<h3>$1</h3>',
        '¤{{(.+)}}¤msU'                       => '<b>$1</b>',
        '¤{(.+)}¤msU'                         => '<i>$1</i>',
        # _  => <br />
        '¤^_ ¤ms'                             => '<br />',
        # ---- => <hr />
        '¤^(-{4,})(\n|$)¤ms'                  => '<hr />',
        /*
        # \n\n => <paragraph>
        '¤(\n\n)?(.+)((?=\n\n)|$)¤Us'         => '<p>$2</p>',
        '¤\n\n¤'                              => '', # drop left (why?) \n\n
        */
        # [...|...->...] => <a href... /a>
        '¤\[->(.*)\]¤msU'                     => '<a href="$1">$1</a>',
        '¤\[(.*)->(.*)\]¤msU'                 => '<a href="$2">$1</a>',
        '¤<a (.*)>(.*)\|(.*)</a>¤msU'         => '<a title="$3" $1>$2</a>',
        # <cadre>, <code> => <blockquote>
        '¤<(?:cadre|quote)>(.*)</\1>¤imsU'    => '<blockquote>$1</blockquote>',
        # -* => <ul... /ul>
        '¤^-\*([^*].*)¤m'                     => '<li>$1</li>',
        '¤(<li>.*</li>)¤s'                    => '<ul>$1</ul>',
        # tableaux, notes, ancres...? modèles non traités -> signaler ?
        #
        # finally remove superfluous <p>
        '¤<p><(h[1-6r]|ul|table)(.*)>(.*)(</\1>)?</p>¤imsU'
                                              => '<$1$2>$3$4',
      ],
    ];
    

    data_fields 数组注册了必须为两个主要数据容器(标题和文章)处理的字段。
    然后str_replace 和preg_replace 数组成员在每个字段上注册必须依次执行的所有转换。

    至少我可以断言这些规范是正确的并且可以正常工作。

    如有需要,请随时询问更多信息。

    【讨论】:

    • 感谢您的建议,脚本看起来不错,如果我没有找到另一个只需稍作更新即可使用的脚本,我会使用它。
    【解决方案2】:

    我终于找到了一个符合我需要的脚本: https://github.com/nhoizey/spip2markdown

    它打算在 SPIP 内部使用,但 the main functions 很容易适应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 2017-05-11
      • 2012-08-07
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多