wm: infra

Download patch

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