]> git.plutz.net Git - shellwiki/commitdiff
helper script for importing pages from moinmoin
authorPaul Hänsch <paul@plutz.net>
Thu, 7 Mar 2024 16:37:42 +0000 (17:37 +0100)
committerPaul Hänsch <paul@plutz.net>
Thu, 7 Mar 2024 16:37:42 +0000 (17:37 +0100)
moinimport.sh [new file with mode: 0755]

diff --git a/moinimport.sh b/moinimport.sh
new file mode 100755 (executable)
index 0000000..b747843
--- /dev/null
@@ -0,0 +1,67 @@
+#!/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>>;\&nbsp\;  \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:(.*)\|(.*)\|(.*)\}\};![\2](\1 "\3");g
+    s;\{\{attachment:(.*)\|(.*)\}\};![\2](\1);g
+    s;\{\{attachment:(.*)\}\};![](\1);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