将SPIP文本转换为markdown(或HTML)

时间:2016-06-11 17:06:50

标签: markdown spip

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

我想将其数据库内容转换为markdown,但我没有找到任何有用的资源来将SPIP语法转换为HTML(例如,然后通过league/html-to-markdown进行降价),但我是无法找到正确的方法(来自SPIP的代码)来使用它。

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

和你一样,我不知道这样的工具,所以当我不得不面对导出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_replacepreg_replace数组成员在每个字段上注册必须依次执行的所有转换。

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

如果需要,请随时提出更多信息。

答案 1 :(得分:0)

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

它旨在在SPIP中使用,但the main functions很容易适应。