MoinMoin is another wiki engine. Home page: http://moinmo.in/ . See their MediaWiki and MoinMoin vs MediaWiki pages (written from their viewpoint). Most prominent public use is probably the Ubuntu Linux help wiki.
Moin doesn't require a database - all pages and versions are kept as files. This is good for performance and ease of setup, but can lead to problems on large wikis, e.g. when the Ubuntu wiki hit 32,000 pages (a directory per page, but ext2fs only allows 32k directories).
One notable feature Moin has that MW doesn't is access control lists (ACLs). Although there is an extension PermissionACL
If you're looking here, you probably either want to convert from MoinMoin to MediaWiki, or convert from MediaWiki to MoinMoin.
MoinMoin to MediaWiki[edit | edit source]
There are a number of hacky scripts for this. They are all defective in various ways - anyone who does this job does it precisely once. Rufus Pollock's script on GitHub looks the most-maintained option.
- https://github.com/okfn/moinmoin2mediawiki - updated version of Rotan Hanrahan's mm2mw.pl script by Rufus Pollock.
- Corrects for a lot of changes in MoinMoin markup since 2008.
- Still has problem mentioned below re authentication token which I was unable to fix -- just have to run convert and upload XML files by hand using Special:Import (though this won't import any attachments ...)
-> Login has been fixed. Automatic XML import and attachment upload should work again.
- This is on github and aim to respect all pull requests so hope this can get collaboratively improved!
- mm2mw.pl Perl script by Rotan Hanrahan - imports directly into a running Mediawiki.
- Seems to create good results
- Handles tables and attachments
- Has problem with the latest version of mediawiki, due to authentication token. Had to temporarily comment all the functionality related to wpLoginToken on MediaWiki
- Further problems due to not dealing with cookies. Workaround: run 'convert' and upload XML files to Special:Import by hand.
- Seems to have a problem with last column on tables. On method ProcessTableRow, changed to have @cells = @cells[1..@cells-1]; instead of @cells = @cells[1..@cells-2];
- mm2mw.pl Perl script by Dan Littlejohn - outputs Mediawiki wikitext. NOTE: Dead link - is there a copy of this up anywhere else?
- Needs cleanup by hand
- Breaks all CamelCase into [[Sentence Case]] - including in the middle of external links.
- The Filter() subroutine works pretty nicely for one page at a time - see below for additions.
- For a need to convert one page at a time, David Gerard took Filter(), commented out all link-creation functions and wrapped it in a hacky CGI to convert individual Moin pages. This worked pretty well. (Code not released, sorry.)
- Doesn't do tables. Use this version of Filter() (drop it into mm2mw.pl) to do simple tables (any fancy table markup will not work).
- moin2media Python script created by the Linux Foundation for in-house use. Outputs importable Mediawiki XML.
- Needs cleanup by hand
- Breaks some external links the way mm2mw does, but not most.
- Doesn't preserve multiple levels of bullet points.
- Does do tables!
- the Python script that Fedora used to convert their MoinMoin wiki to MediaWiki.
- the conversion program developed at Catalyst and used on the DAViCal Wiki
- the Ruby script parses MoinMoin wiki data folder and produces a MediaWiki XML dump
MoinMoin does pretty good DocBook export. There's a DocBook to Mediawiki translator on blender.org - anyone tested it on the DocBook that MoinMoin puts out?
(In David Gerard's testing, the docbook.py export routine from Moin 1.5.2 crashed on about 20% of the 600 pages in the wiki he wanted to move! This may have been the Moin or Python installation having been hacked around, or it may have been bugginess in Moin 1.5.2. Anyone else tried this?)
mm2mw.pl[edit | edit source]
Dan Littlejohn's converter is the least worst to date. Here's more line noise to add to Filter():
# list convert - numerical s/^ 1.(.*?)/\#$1/g; # link convert - ` * ` -> <tt> * </tt> s/`(.*?)`/\<tt\>$1\<\/tt\>/g; # strikethrough convert s/--\((.*?)\)--/\<s\>$1\<\/s\>/g; # link convert smaller - ~- * -~ -> <small> * </small> s/\~-(.*?)-\~/\<small\>$1\<\/small\>/g; # link convert larger - ~+ * +~ -> <big> * </big> s/\~\+(.*?)\+\~/\<big\>$1\<\/big\>/g;
See also /Filter for a version of Filter() that includes the above and does simple tables.