ref: f8a0273f600dc0a96e920e8abb120036b0103544
parent: 5367683d6a4e811a21f2459f35778a63665ba511
author: mkf <mkf@cloud9p.org>
date: Thu Oct 10 17:10:15 EDT 2024
doc/wiki2ms: import, a tool to convert documents from wiki to ms format
--- /dev/null
+++ b/doc/wiki2ms
@@ -1,0 +1,125 @@
+#!/bin/rc
+nl='
+'
+file=$1
+url=$2
+# wiki2ms
+# convert from wikifs(6) format to ms format
+# usage:
+# wiki2ms document.wiki # normal wiki text
+# wiki2ms document.wms # wiki with ms macros
+# bugs:
+# very wasteful
+# ms output could've been better
+# some of wikifs functionality is not yet implmented:
+# proper parsing for links
+
+fn quote {
+ echo $1 | sed 's/\//\\\//g' | sed 's/\./\\\./g'
+}
+
+fn comment {
+ ifs=$nl
+ for(i in `{cat}){
+ if(! ~ $i '#'*)
+ echo $i
+ }
+}
+
+fn removebang {
+ # wasteful, i know
+ echo $1 | sed 's/^(! |!)//g'
+}
+
+fn monospace {
+ ifs=$nl
+ mono=f
+ for(i in `{cat}){
+ if(~ $i !*){
+ if(~ $mono f){
+ mono=t
+ echo '.P1'
+ }
+ removebang $i
+ }
+ if not {
+ if(~ $mono t) {
+ mono=f
+ echo '.P2'
+ }
+ echo $i
+ }
+ }
+ # last line may be a ! line.
+ if(~ $mono t){
+ mono=f
+ echo '.P2'
+ }
+}
+
+fn directlink {
+ ifs=$nl
+ mono=f
+ for(i in `{cat}){
+ if(~ $i .P1)
+ mono=t
+ if(~ $i .P2)
+ mono=f
+ if(~ $mono f)
+ echo $i | sed 's/\[([^\n]+)\|([^\n]+)\]/\n\.LN \2\n\1\n\.LN\n/g'
+ }
+}
+
+fn indirectlink {
+ ifs=$nl
+ mono=f
+ for(i in `{cat}){
+ if(~ $i .P1)
+ mono=t
+ if(~ $i .P2)
+ mono=f
+ if(~ $mono f)
+ echo $i | sed 's/\[([^\n]+)\]/\n\.LN \1\n\1\n\.LN\n/g'
+ }
+}
+
+fn manpage {
+ ifs=$nl
+ mono=f
+ for(i in `{cat}){
+ if(~ $i .P1)
+ mono=t
+ if(~ $i .P2)
+ mono=f
+ if(~ $mono f)
+ echo $i | sed 's/([^ ]+)\(([0-9])\)/\n\.LN '^$url^'\2\/\1\n\1\(\2\)\n\.LN\n/g'
+ }
+}
+
+url=`{quote $url}
+
+cat $1 |
+
+# paragraphs
+sed 's/^$/.LP/g' |
+
+# comments
+comment |
+
+# titles
+sed 's/^((([A-Z]| |-|_|\(|\)))+)$/\.SH\n\1\n\.LP/g' |
+
+# bulleted lists
+sed 's/(^\* )|(^\*)/\.IP \\(bu\n/g' |
+
+# monospaced block
+monospace |
+
+# direct links ([x|y] form)
+directlink |
+
+# indirect links ([x] form)
+indirectlink |
+
+# man pages
+manpage