2017-06-30 2 views
0

Depuis que j'ai découvert BoostNote (Open source application de prise de notes faite pour les programmeurs), j'ai décidé de migrer d'un MediaWiki local (sur un NAS) à cette nouvelle application.
Mais cela signifie également migrer de la syntaxe MediaWiki vers Markdown !!
J'ai essayé plusieurs outils de conversion en ligne, mais ils ne fonctionnaient pas très bien. Le plus intéressant est Pandoc, mais il a aussi quelques problèmes (par exemple je ne pouvais pas le forcer à utiliser des blocs clôturés au lieu de l'indentation pour délimiter les blocs de code).MediaWiki à Markdown conversion avec PHP preg_replace

SOLUTION:
J'ai fini par écrire un petit script PHP qui représente une solution de travail rapide (barbante il peut ne pas être très élégant et poli;)). Il est basé sur la fonction php preg_replace().
(Le script sera disponible dans la réponse acceptée ci-dessous ... si vous avez des suggestions, s'il vous plaît poster un commentaire)

Répondre

0

Utilisation:

  • Enregistrer les balises MediaWiki dans un fichier txt ('mediawiki. txt) dans le même répertoire du script php
  • exécutez le script
  • un nouveau fichier txt ('markdown.txt') sera créé usgin minorée syntaxe

Appréciez!

<?php 
//Before running this script, fix manually all the mixed list (ordered + unordered). It's the only missing feature. 

$string = file_get_contents("mediawiki.txt"); 

$pattern = array(
    "/\*\*\*(?![^<]*>|[^<>]*<\/)/", //List: replace '***' with ' * ' 
    "/\*\*(?![^<]*>|[^<>]*<\/)/", //List: replace '**' with ' * ' 
    "/\*(?!\s+|[^<]*>|[^<>]*<\/)/", //List: replace '*' with '* ' 
    "/\#\#\#(?![^<]*>|[^<>]*<\/)/", //List: replace '###' with '  1. ' 
    "/\#\#(?![^<]*>|[^<>]*<\/)/", //List: replace '##' with ' 1. ' 
    "/\#(?![^<]*>|[^<>]*<\/)/", //List: replace '#' with '1. ' 
    "/\'\'\'\'\'(.*?)\'\'\'\'\'(?![^<]*>|[^<>]*<\/)/", //Bold & Italic: replace "'''''(text)'''''" with "**_(text)_**" 
    "/\'\'\'([\s\S]*?)\'\'\'(?![^<]*>|[^<>]*<\/)/", //Bold: replace "'''(text)'''" with "**(text)**" 
    "/\'\'([\s\S]*?)\'\'(?![^<]*>|[^<>]*<\/)/", //Italic: replace "''(text)''" with "_(text)_" 
    "/\=\=\=\=([\s\S]*?)\=\=\=\=(?![^<]*>|[^<>]*<\/)/", //Headings: replace "====(text)====" with "#### (text)" 
    "/\=\=\=([\s\S]*?)\=\=\=(?![^<]*>|[^<>]*<\/)/", //Headings: replace "===(text)===" with "### (text)" 
    "/\=\=([\s\S]*?)\=\=(?![^<]*>|[^<>]*<\/)/", //Headings: replace "==(text)==" with "## (text)" 
    "/\=([\s\S]*?)\=(?![^<]*>|[^<>]*<\/)/", //Headings: replace "=(text)=" with "# (text)" 
    "/\{\{[\s\S]*?\|([\s\S]*?)\}\}(?![^<]*>|[^<>]*<\/)/", //Notes: replace "{{...|(text)}}" with "(text)" 
    "/\<pre[\s\S]*?\>([\s\S]*?)\<\/pre\>/", //Code block: replace "<pre ...>(code)</pre>" with "```java```" !!CHANGE THIS (php, javascript, etc)!! 
    "/\<code\>([\s\S]*?)\<\/code\>/", //Inline code: replace "<code>(code)</code>" with "`(code)`" 
); 

$replacement = array(
    " * ", 
    " * ", 
    "* ", 
    "  1. ", 
    " 1. ", 
    "1. ", 
    "**_$1_**", 
    "**$1**", 
    "_$1_", 
    "#### $1", 
    "### $1", 
    "## $1", 
    "# $1", 
    "$1", 
    "```java 
$1 
```", 
    "`$1`", 
); 

$parsedString = preg_replace($pattern, $replacement, $string); 

file_put_contents("markdown.txt", $parsedString); 
?>