--- /dev/null
+#!/bin/sh
+
+while [ "$#" -gt 0 ]; do case "$1" in
+ --exec) _EXEC="$2"; shift 2;;
+ --data) _DATA="$2"; shift 2;;
+ *) moin="$1"; shift 1;;
+esac; done
+
+REQUEST_METHOD=import
+. "${_EXEC:-${0%/*}}/cgilite/cgilite.sh"
+
+reformat() {
+ sed -E '
+ s;\r;;g;
+ s;^## ;%rem ;
+ s;<<BR>>;\ \; \n;g
+
+ s;'\'\'\'';**;g; s;'\'\'';*;g;
+
+ s;^====== (.+) ======$;\n###### \1;g
+ s;^===== (.+) =====$;\n##### \1;g
+ s;^==== (.+) ====$;\n#### \1;g
+ s;^=== (.+) ===$;\n### \1;g
+ s;^== (.+) ==$;\n## \1;g
+ s;^= (.+) =$;\n# \1;g
+
+ s;^----+$;\n&;
+
+ s;\{\{attachment:(.*)\|(.*)\|(.*)\}\};;g
+ s;\{\{attachment:(.*)\|(.*)\}\};;g
+ s;\{\{attachment:(.*)\}\};;g
+ s;\[\[(.*)\|(.*)\|(.*)\]\];[\2](\1);g
+ s;\[\[(.*)\|(.*)\]\];[\2](\1);g
+
+ /\{\{\{+#!wiki/{
+ s;\{;:;g;
+ s;:#!wiki (.*)$;: {\1};
+ s;^;\n;
+ }
+ /^\}\}\}+$/s;\};:;g;
+
+ :MACRO
+ s;<<([^\(>]+)\(([^,)]+)([^)]*)\)>>;<<\1 "\2"(\3)>>;g;
+ tMACRO
+ s;<<([^\(>]+)\(\)>>;<<\1>>;g;
+ '
+}
+
+find "$moin" -maxdepth 1 -printf '%P\n' \
+| while read mpage; do
+ [ -f "${moin}/${mpage}/current" ] || continue
+ read revision <"${moin}/${mpage}/current"
+
+ page="$(printf %s\\n "$mpage" |sed -r '
+ :A
+ s;\(([0-9a-f][0-9a-f])(([0-9a-f]{2})+)\);%\1(\2);g
+ s;\(([0-9a-f][0-9a-f])\);%\1;g
+ tA
+ ')"
+ page="$(HEX_DECODE % "$page" |PATH)"
+
+ mkdir -vp -- "${_DATA}/pages/${page}"
+ reformat <"${moin}/${mpage}/revisions/${revision}" >"${_DATA}/pages/${page}/#page.md"
+
+ [ -d "${moin}/${mpage}/attachments" ] \
+ && cp -vrfT -- "${moin}/${mpage}/attachments" "${_DATA}/pages/${page}/#attachments"
+done