DokuWiki

It's better when it's simple

User Tools

Site Tools


tips:moinmoin2doku

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tips:moinmoin2doku [2011-03-10 16:56] – [Python] 134.104.27.160tips:moinmoin2doku [2023-09-01 18:31] (current) – [Discussion] glen
Line 1: Line 1:
 ====== Migration from MoinMoin to DokuWiki ====== ====== Migration from MoinMoin to DokuWiki ======
  
 +Code written in Python/PHP that can do full conversion: all pages and their history, including edit log. Also copies attachments.
  
-Below you will find scripts in PHP and Python to facilitate the conversion processBefore running them you must eliminate the leftmost ">" in <>/code> and <>code> in the Python convert_page functions, or remove the ">>"'s in the $replace Array(... in PHP scripts.+Checkout files from [[https://github.com/glensc/moin2doku]] and run: 
 +  * ''./moin2doku.py -a -d **<DokuWiki installation dir>**''
  
-> FIXME Are there any parameters that need to be passed to the PHP script and how is that to be done?  According to the code there should be three parameters Passed through the URL?  Syntax?  Can anyone help?+Consult README for details.
  
-Another document on switching appears at http://www.emilsit.net/blog/archives/migrating-from-moinmoin-to-dokuwiki/+**NB:** The project is no longer maintained (as I got my wiki converted), but it may work for you (at least better starting point than I had), feel free to send Pull-Requests --- [[user>glen|glen]] //2015-04-08 16:06// 
 +===== Other and older versions =====
  
-===== PHP ===== +You can dig the older versions or older variants from [[https://www.dokuwiki.org/tips:moinmoin2doku?rev=1300625072|old page revision]] if really needed.
- +
-I have written a small PHP script to convert wiki pages from MoinMoin [[http://moinmoin.wikiwikiweb.de/]] to DokuWiki syntax. It does not take care of all differences, but it worked for me. +
- +
-<code php moin2doku.php> +
-#!/usr/bin/php +
-<?php +
- +
-//check comman line parameters +
-if ($argc != 3 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) { +
-  echo "\n  Converts all files from given directory\n"; +
-  echo "  from MoinMoin to DokuWiki syntax. NOT RECURSIV\n\n"; +
-  echo "  Usage:\n"; +
-  echo "  ".$argv[0]." <input dir> <output dir>\n\n"; +
-}  +
-else { +
-  //get input and output directories +
-  $inDir = realpath($argv[1]) or die("input dir error"); +
-  $outDir = realpath($argv[2]) or die("output dir error"); +
-  //just print information +
-  echo "\nInput Directory: ".$inDir."\n"; +
-  echo "Output Directory: ".$outDir."\n\n"; +
- +
-  //get all files from directory +
-  if (is_dir($inDir)) { +
-    $files = filesFromDir($inDir); +
-  } +
-   +
-  //migrate each file +
-  foreach ($files As $file) { +
-    //convert filename +
-    $ofile = convFileNames($file); +
-    //just print information +
-    echo "Migrating from ".$inDir."/".$file." to ".$outDir."/".$ofile."\n"; +
-     +
-    //read input file +
-    $text = readFl($inDir."/".$file); +
-     +
-    //convert content +
-    $text = moin2doku($text); +
-     +
-    //encode in utf8 +
-    $text = utf8_encode($text); +
-     +
-    //write output file +
-    writeFl($outDir."/".$ofile, $text); +
-  } +
-+
- +
- +
-function moin2doku($text) { +
-  /* like convFileNames and more +
-  *   ToDo: [[Datestamp]] delete? +
-  *         bold and italic, what goes wrong? +
-  *         images +
-  *         Problems with newline and [[BR]] +
-  *         CamelCase in Heading: it will be converted +
-  *         Moin handles code sections without closing }}} right, DokuWiki does not      +
-  */ +
-   +
-  //line by line +
-  $lines = explode("\n", $text); +
-  foreach($lines As $line) { +
-    //start converting +
-    $find = Array(   +
-                  '/\[\[TableOfContents\]\]/',      //remove +
-                  '/\[\[BR\]\]$/',                  //newline at end of line - remove +
-                  '/\[\[BR\]\]/',                   //newline +
-                  '/#pragma section-numbers off/',  //remove +
-                  '/\["(.*)"\]/',                   //internal link +
-                  '/(\[http.*\])/',                 //web link +
-                  '/\{{3}/',                        //code open +
-                  '/\}{3}/',                        //code close +
-                  '/^\s\*/',                        //lists must have not only but 2 whitespaces before * +
-                  '/={5}(\s.*\s)={5}$/',            //heading 5 +
-                  '/={4}(\s.*\s)={4}$/',            //heading 4 +
-                  '/={3}(\s.*\s)={3}$/',            //heading 3 +
-                  '/={2}(\s.*\s)={2}$/',            //heading 2 +
-                  '/={1}(\s.*\s)={1}$/',            //heading 1 +
-                  '/\|{2}/',                        //table separator +
-                  '/\'{5}(.*)\'{5}/',               //bold and italic +
-                  '/\'{3}(.*)\'{3}/',               //bold +
-                  '/\'{2}(.*)\'{2}/',               //italic +
-                  '/(?<!\[)(\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b)/',  //CamelCase, dont change if CamelCase is in InternalLink +
-                  '/\[\[Date\(([\d]{4}-[\d]{2}-[\d]{2}T[\d]{2}:[\d]{2}:[\d]{2}Z)\)\]\]/'  //Date value  +
-                  ); +
-    $replace = Array( +
-                     '',                            //remove                                 +
-                     '',                            //newline remove                                 +
-                     '\\\\\ ',                      //newline +
-                     '',                            //remove                                 +
-                     '[[${1}]]',                    //internal link +
-                     '[${1}]',                      //web link +
-                     '<>>code>',                      //code open - remove >>, its included for viewing in DokuWiki +
-                     '<>>/code>',                     //code close - remove >>, its included for viewing in DokuWiki +
-                     '  *',                         //lists must have 2 whitespaces before * +
-                     '==${1}==',                      //heading 5                         +
-                     '===${1}===',                    //heading 4                         +
-                     '====${1}====',                  //heading 3                         +
-                     '=====${1}=====',                //heading 2                         +
-                     '======${1}======',              //heading 1                         +
-                     '|',                           //table separator                        +
-                     '**//${1}//**',                //bold and italic +
-                     '**${1}**',                    //bold                                   +
-                     '//${1}//',                    //italic +
-                     '[[${1}]]',                    //CamelCase +
-                     '${1}'                         //Date value +
-                     ); +
-    $line = preg_replace($find,$replace,$line); +
-     +
-    $ret = $ret.$line."\r\n"; +
-  } +
-  return $ret; +
-+
- +
- +
-function convFileNames($name) { +
-  /* ö,ä,ü, ,. and more +
-  */ +
-  $find = Array('/_20/', +
-                '/_5f/', +
-                '/_2e/', +
-                '/_c4/', +
-                '/_f6/', +
-                '/_fc/', +
-                '/_26/', +
-                '/_2d/' +
-                ); +
-  $replace = Array('_', +
-                   '_', +
-                   '_', +
-                   'Ae', +
-                   'oe', +
-                   'ue', +
-                   '_', +
-                   '-' +
-                   ); +
-  $name = preg_replace($find,$replace,$name); +
-  $name = strtolower($name); +
-  return $name.".txt"; +
-+
- +
- +
-function filesFromDir($dir) { +
-  $files = Array(); +
-  $handle=opendir($dir); +
-  while ($file = readdir ($handle)) { +
-     if ($file != "." && $file != ".." && !is_dir($dir."/".$file)) { +
-         array_push($files, $file); +
-     } +
-  } +
-  closedir($handle);  +
-  return $files; +
-+
- +
-function readFl($file) { +
-  $fr = fopen($file,"r"); +
-  if ($fr) { +
-    while(!feof($fr)) { +
-      $text = $text.fgets($fr); +
-    } +
-    fclose($fr); +
-  } +
-  return $text; +
-+
- +
-function writeFl($file, $text) { +
-  $fw = fopen($file, "w"); +
-  if ($fw) { +
-    fwrite($fw, $text); +
-  } +
-  fclose($fw); +
-+
- +
-?> +
-</code> +
- +
-===== Python ===== +
- +
-Based on the above PHP version, a Python script that automates the file renaming, copying and conversion business. +
-Can do attachments moving, convert attachment code, creates namespaces based on structure in MoinMoin-Wiki. +
-also converts some Codes of German 'Umlaute'+
- +
-Download [[https://github.com/glensc/moin2doku/blob/master/moin2doku.py|moin2doku.py]] and run: +
-  * ''./moin2doku.py **<pages folder of MoinMoin-Wiki>** **<pages folder of DokuWiki>**'' +
- +
-:?:  Where do I get the "doku.py" module?  +
-===== Perl ===== +
- +
-I've written more powerful conversion script, now it converts correctly (as I think ;-) ) all syntax from [[http://moinmo.in/HelpOnEditing]] except tables (now it doesn't convert aligning and spans). You can get latest version [[http://help.ubuntu.ru/wiki/moinmoin2dokuwiki|here]], just copy all code from codeblock and replace %%<!/code>%% with %%</code>%%.+
  
 ===== Discussion ===== ===== Discussion =====
- 
  
 > Why did you switch from MoinMoin to DokuWiki?  Just curious, I'm debating between the two and MoinMoin's WYSIWYG editor is very nice, and big sites like fedoraproject.org and ubuntu.com are using MoinMoin.  - posted on 1/16/2006 > Why did you switch from MoinMoin to DokuWiki?  Just curious, I'm debating between the two and MoinMoin's WYSIWYG editor is very nice, and big sites like fedoraproject.org and ubuntu.com are using MoinMoin.  - posted on 1/16/2006
 >> Because MoinMoin is **not as stable** as it looks like? You know the [[http://www.ubuntuusers.de/ikhaya/443/|Ubuntuusers Wiki]]-case? - posted on 04/26/2007 >> Because MoinMoin is **not as stable** as it looks like? You know the [[http://www.ubuntuusers.de/ikhaya/443/|Ubuntuusers Wiki]]-case? - posted on 04/26/2007
->>> I've add Perl script which convert all syntax from [[http://moinmo.in/HelpOnEditing]]Please, report [[malamut@ubuntu.ru|me]] all errors if you found them.+ 
 +Has anyone used this successfully to convert from MoinMoin 1.9.*? 
 +>> I needed to migrate, because I am upgrading my servers from Debian-buster to Debian-bookworm. 
 +>> I tried to modify moin2doku to use it with MoinMoin 1.9, but I was not able, because there have been to many changes in MoinMoin. But I found a workaround. I have installed a migration-KVM with:  
 +>>  * Debian-stretch from https://cdimage.debian.org/cdimage/archive/9.13.0/ 
 +>>I have manually added the following software 
 +>>  * python 2.5.6 from https://www.python.org/ftp/python/2.5.6/Python-2.5.6.tgz 
 +>>  * MoinMoin 1.5.9 from https://master.dl.sourceforge.net/project/moin/moin/1.5.9/moin-1.5.9.tar.gz 
 +>>  * DokuWiki 2017-02-19e from https://download.dokuwiki.org/src/dokuwiki/dokuwiki-2017-02-19e.tgz 
 +>>I was able to copy my Debian-buster MoinMoin 1.9 data to this migration-KVM and convert it with moin2doku and after that copy it to my Debian-bookworm dokuwiki 0.0.20220731.a-2. But I had to make some >>changes in moin2doku. I remember: 
 +>>  * doku.php: deleted line ''require_once DOKU_INC.'inc/cliopts.php';'' 
 +>>  * moin2doku.py and moinformat.py: added line ''%%from __future__ import with_statement%%'' 
 +>> Thank You very much for moin2doku
tips/moinmoin2doku.1299772603.txt.gz · Last modified: 2011-03-10 16:56 by 134.104.27.160

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki