summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorAndres Mejia <amejia004@gmail.com>2012-02-01 18:31:56 -0500
committerAndres Mejia <amejia004@gmail.com>2012-02-01 18:31:56 -0500
commit90eb6c3e9cf2423cf215db3ff2b61365ce4b0e50 (patch)
tree892dc0072d0d569cf80b55ce7d79141b7cc51c73 /doc
parent0dc05246bab6ac3aff28cd05edf061527a7cca3f (diff)
downloadlibarchive-90eb6c3e9cf2423cf215db3ff2b61365ce4b0e50.tar.gz
Use modified mdoc2wiki.awk script to generate wiki pages in mediawiki format.
SVN-Revision: 4220
Diffstat (limited to 'doc')
-rwxr-xr-xdoc/mdoc2mediawiki.awk441
-rwxr-xr-xdoc/update.sh12
2 files changed, 444 insertions, 9 deletions
diff --git a/doc/mdoc2mediawiki.awk b/doc/mdoc2mediawiki.awk
new file mode 100755
index 00000000..508712f2
--- /dev/null
+++ b/doc/mdoc2mediawiki.awk
@@ -0,0 +1,441 @@
+#!/usr/bin/awk
+#
+# Copyright (c) 2003 Peter Stuge <stuge-mdoc2man@cdy.org>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+# Dramatically overhauled by Tim Kientzle. This version almost
+# handles library-style pages with Fn, Ft, etc commands. Still
+# a lot of problems...
+
+BEGIN {
+ displaylines = 0
+ listdepth = 0
+ trailer = ""
+ out = ""
+ sep = ""
+ nextsep = " "
+ spaces = " "
+}
+
+# Add a word with appropriate preceding whitespace
+# Maintain a short queue of the expected upcoming word separators.
+function add(str) {
+ out=out sep str
+ sep = nextsep
+ nextsep = " "
+}
+
+# Add a word with no following whitespace
+# Use for opening punctuation such as '('
+function addopen(str) {
+ add(str)
+ sep = ""
+}
+
+# Add a word with no preceding whitespace
+# Use for closing punctuation such as ')' or '.'
+function addclose(str) {
+ sep = ""
+ add(str)
+}
+
+# Add a word with no space before or after
+# Use for separating punctuation such as '='
+function addpunct(str) {
+ sep = ""
+ add(str)
+ sep = ""
+}
+
+# Emit the current line so far
+function endline() {
+ addclose(trailer)
+ trailer = ""
+ if(length(out) > 0) {
+ print out
+ out=""
+ }
+ if(displaylines > 0) {
+ displaylines = displaylines - 1
+ if (displaylines == 0)
+ dispend()
+ }
+ # First word on next line has no preceding whitespace
+ sep = ""
+}
+
+function linecmd(cmd) {
+ endline()
+ add(cmd)
+ endline()
+}
+
+function breakline() {
+ linecmd("<br>")
+}
+
+# Start an indented display
+function dispstart() {
+ linecmd("<pre>")
+}
+
+# End an indented display
+function dispend() {
+ linecmd("</pre>")
+}
+
+# Collect rest of input line
+function wtail() {
+ retval=""
+ while(w<nwords) {
+ if(length(retval))
+ retval=retval " "
+ retval=retval words[++w]
+ }
+ return retval
+}
+
+function splitwords(l, dest, n, o, w) {
+ n = 1
+ delete dest
+ while (length(l) > 0) {
+ sub("^[ \t]*", "", l)
+ if (match(l, "^\"")) {
+ l = substr(l, 2)
+ o = index(l, "\"")
+ if (o > 0) {
+ w = substr(l, 1, o-1)
+ l = substr(l, o+1)
+ dest[n++] = w
+ } else {
+ dest[n++] = l
+ l = ""
+ }
+ } else {
+ o = match(l, "[ \t]")
+ if (o > 0) {
+ w = substr(l, 1, o-1)
+ l = substr(l, o+1)
+ dest[n++] = w
+ } else {
+ dest[n++] = l
+ l = ""
+ }
+ }
+ }
+ return n-1
+}
+
+! /^\./ {
+ out = $0
+ endline()
+ next
+}
+
+/^\.\\"/ { next }
+
+{
+ sub("^\\.","")
+ nwords=splitwords($0, words)
+ # TODO: Instead of iterating 'w' over the array, have a separate
+ # function that returns 'next word' and use that. This will allow
+ # proper handling of double-quoted arguments as well.
+ for(w=1;w<=nwords;w++) {
+ if(match(words[w],"^Li$")) { # Literal; rest of line is unformatted
+ dispstart()
+ displaylines = 1
+ } else if(match(words[w],"^Dl$")) { # Display literal
+ dispstart()
+ displaylines = 1
+ } else if(match(words[w],"^Bd$")) { # Begin display
+ if(match(words[w+1],"-literal")) {
+ dispstart()
+ displaylines=10000
+ w=nwords
+ }
+ } else if(match(words[w],"^Ed$")) { # End display
+ displaylines = 0
+ dispend()
+ } else if(match(words[w],"^Ns$")) { # Suppress space before next word
+ sep=""
+ } else if(match(words[w],"^No$")) { # Normal text
+ add(words[++w])
+ } else if(match(words[w],"^Dq$")) { # Quote
+ addopen("\"")
+ add(words[++w])
+ while(w<nwords&&!match(words[w+1],"^[\\.,]"))
+ add(words[++w])
+ addclose("\"")
+ } else if(match(words[w],"^Do$")) {
+ addopen("\"")
+ } else if(match(words[w],"^Dc$")) {
+ addclose("\"")
+ } else if(match(words[w],"^Oo$")) {
+ addopen("<nowiki>[</nowiki>")
+ } else if(match(words[w],"^Oc$")) {
+ addclose("<nowiki>]</nowiki>")
+ } else if(match(words[w],"^Ao$")) {
+ addopen("&lt;")
+ } else if(match(words[w],"^Ac$")) {
+ addclose("&gt;")
+ } else if(match(words[w],"^Dd$")) {
+ date=wtail()
+ next
+ } else if(match(words[w],"^Dt$")) {
+ id=words[++w] "(" words[++w] ")"
+ next
+ } else if(match(words[w],"^Ox$")) {
+ add("OpenBSD")
+ } else if(match(words[w],"^Fx$")) {
+ add("FreeBSD")
+ } else if(match(words[w],"^Bx$")) {
+ add("BSD")
+ } else if(match(words[w],"^Nx$")) {
+ add("NetBSD")
+ } else if(match(words[w],"^St$")) {
+ if (match(words[w+1], "^-p1003.1$")) {
+ w++
+ add("<nowiki>IEEE Std 1003.1 (``POSIX.1'')</nowiki>")
+ } else if(match(words[w+1], "^-p1003.1-96$")) {
+ w++
+ add("<nowiki>ISO/IEC 9945-1:1996 (``POSIX.1'')</nowiki>")
+ } else if(match(words[w+1], "^-p1003.1-88$")) {
+ w++
+ add("<nowiki>IEEE Std 1003.1-1988 (``POSIX.1'')</nowiki>")
+ } else if(match(words[w+1], "^-p1003.1-2001$")) {
+ w++
+ add("<nowiki>IEEE Std 1003.1-2001 (``POSIX.1'')</nowiki>")
+ } else if(match(words[w+1], "^-susv2$")) {
+ w++
+ add("<nowiki>Version 2 of the Single UNIX Specification (``SUSv2'')</nowiki>")
+ }
+ } else if(match(words[w],"^Ex$")) {
+ if (match(words[w+1], "^-std$")) {
+ w++
+ add("The '''" name "''' utility exits 0 on success, and &gt;0 if an error occurs.")
+ }
+ } else if(match(words[w],"^Os$")) {
+ add(id " manual page")
+ } else if(match(words[w],"^Sh$")) {
+ section=wtail()
+ linecmd("== " section " ==")
+ } else if(match(words[w],"^Xr$")) {
+ add("'''" words[++w] "'''(" words[++w] ")" words[++w])
+ } else if(match(words[w],"^Nm$")) {
+ if(match(section,"SYNOPSIS"))
+ breakline()
+ if(w >= nwords)
+ n=name
+ else if (match(words[w+1], "^[A-Z][a-z]$"))
+ n=name
+ else if (match(words[w+1], "^[.,;:]$"))
+ n=name
+ else {
+ n=words[++w]
+ if(!length(name))
+ name=n
+ }
+ if(!length(n))
+ n=name
+ if (displaylines == 0)
+ add("'''" n "'''")
+ else
+ add(n)
+ } else if(match(words[w],"^Nd$")) {
+ add("- " wtail())
+ } else if(match(words[w],"^Fl$")) {
+ addopen("-")
+ } else if(match(words[w],"^Ar$")) {
+ if(w==nwords)
+ add("''file ...''")
+ else {
+ ++w
+ gsub("<", "&lt;", words[w])
+ add("''" words[w] "''")
+ }
+ } else if(match(words[w],"^Cm$")) {
+ ++w
+ if (displaylines == 0) {
+ add("'''" words[w] "'''")
+ } else
+ add(words[w])
+ } else if(match(words[w],"^Op$")) {
+ addopen("<nowiki>[</nowiki>")
+ option=1
+ trailer="<nowiki>]</nowiki>" trailer
+ } else if(match(words[w],"^Pp$")) {
+ ++w
+ endline()
+ print ""
+ } else if(match(words[w],"^An$")) {
+ if (match(words[w+1],"-nosplit"))
+ ++w
+ endline()
+ } else if(match(words[w],"^Ss$")) {
+ add("===")
+ trailer="==="
+ } else if(match(words[w],"^Ft$")) {
+ if (match(section, "SYNOPSIS")) {
+ breakline()
+ }
+ l = wtail()
+ add("'''" l "'''")
+ if (match(section, "SYNOPSIS")) {
+ breakline()
+ }
+ } else if(match(words[w],"^Fn$")) {
+ ++w
+ F = "'''" words[w] "'''("
+ Fsep = ""
+ while(w<nwords) {
+ ++w
+ if (match(words[w], "^[.,:]$")) {
+ --w
+ break
+ }
+ F = F Fsep "''" words[w] "''"
+ Fsep = ", "
+ }
+ add(F ")")
+ if (match(section, "SYNOPSIS")) {
+ addclose(";")
+ }
+ } else if(match(words[w],"^Fo$")) {
+ w++
+ F = "'''" words[w] "'''("
+ Fsep = ""
+ } else if(match(words[w],"^Fa$")) {
+ w++
+ F = F Fsep "''" words[w] "''"
+ Fsep = ", "
+ } else if(match(words[w],"^Fc$")) {
+ add(F ")")
+ if (match(section, "SYNOPSIS")) {
+ addclose(";")
+ }
+ } else if(match(words[w],"^Va$")) {
+ w++
+ add("''" words[w] "''")
+ } else if(match(words[w],"^In$")) {
+ w++
+ add("'''<nowiki>#include <" words[w] "></nowiki>'''")
+ } else if(match(words[w],"^Pa$")) {
+ w++
+# if(match(words[w],"^\\."))
+# add("\\&")
+ if (displaylines == 0)
+ add("''" words[w] "''")
+ else
+ add(words[w])
+ } else if(match(words[w],"^Dv$")) {
+ linecmd()
+ } else if(match(words[w],"^Em|Ev$")) {
+ add(".IR")
+ } else if(match(words[w],"^Pq$")) {
+ addopen("(")
+ trailer=")" trailer
+ } else if(match(words[w],"^Aq$")) {
+ addopen(" &lt;")
+ trailer="&gt;" trailer
+ } else if(match(words[w],"^Brq$")) {
+ addopen("<nowiki>{</nowiki>")
+ trailer="<nowiki>}</nowiki>" trailer
+ } else if(match(words[w],"^S[xy]$")) {
+ add(".B " wtail())
+ } else if(match(words[w],"^Tn$")) {
+ n=wtail()
+ add("'''" n "'''")
+ } else if(match(words[w],"^Ic$")) {
+ add("''")
+ trailer="''" trailer
+ } else if(match(words[w],"^Bl$")) {
+ ++listdepth
+ listnext[listdepth]=""
+ if(match(words[w+1],"-bullet")) {
+ optlist[listdepth]=1
+ addopen("<ul>")
+ listclose[listdepth]="</ul>"
+ } else if(match(words[w+1],"-enum")) {
+ optlist[listdepth]=2
+ enum=0
+ addopen("<ol>")
+ listclose[listdepth]="</ol>"
+ } else if(match(words[w+1],"-tag")) {
+ optlist[listdepth]=3
+ addopen("<dl>")
+ listclose[listdepth]="</dl>"
+ } else if(match(words[w+1],"-item")) {
+ optlist[listdepth]=4
+ addopen("<ul>")
+ listclose[listdepth]="</ul>"
+ }
+ w=nwords
+ } else if(match(words[w],"^El$")) {
+ addclose(listnext[listdepth])
+ addclose(listclose[listdepth])
+ listclose[listdepth]=""
+ listdepth--
+ } else if(match(words[w],"^It$")) {
+ addclose(listnext[listdepth])
+ if(optlist[listdepth]==1) {
+ addpunct("<li>")
+ listnext[listdepth] = "</li>"
+ } else if(optlist[listdepth]==2) {
+ addpunct("<li>")
+ listnext[listdepth] = "</li>"
+ } else if(optlist[listdepth]==3) {
+ addpunct("<dt>")
+ listnext[listdepth] = "</dt>"
+ if(match(words[w+1],"^Xo$")) {
+ # Suppress trailer
+ w++
+ } else if(match(words[w+1],"^Pa$|^Ev$")) {
+ addopen("*")
+ w++
+ add(words[++w] "*")
+ } else {
+ trailer = listnext[listdepth] "<dd>" trailer
+ listnext[listdepth] = "</dd>"
+ }
+ } else if(optlist[listdepth]==4) {
+ addpunct("<li>")
+ listnext[listdepth] = "</li>"
+ }
+ } else if(match(words[w], "^Vt$")) {
+ w++
+ add("''" words[w] "''")
+ } else if(match(words[w],"^Xo$")) {
+ # TODO: Figure out how to handle this
+ } else if(match(words[w],"^Xc$")) {
+ # TODO: Figure out how to handle this
+ if (optlist[listdepth] == 3) {
+ addclose(listnext[listdepth])
+ addopen("<dd>")
+ listnext[listdepth] = "</dd>"
+ }
+ } else if(match(words[w],"^[=]$")) {
+ addpunct(words[w])
+ } else if(match(words[w],"^[\[{(]$")) {
+ addopen(words[w])
+ } else if(match(words[w],"^[\\\])}.,;:]$")) {
+ addclose(words[w])
+ } else {
+ sub("\\\\&", "", words[w])
+ add(words[w])
+ }
+ }
+ if(match(out,"^\\.[^a-zA-Z]"))
+ sub("^\\.","",out)
+ endline()
+}
diff --git a/doc/update.sh b/doc/update.sh
index d2100bd6..ec915831 100755
--- a/doc/update.sh
+++ b/doc/update.sh
@@ -16,12 +16,7 @@ the mdoc man pages stored in each project.\n\
while [ "$#" -gt "0" ]; do
case "$1" in
--mediawiki)
- if [ -x "$(which html2wiki)" >/dev/null 2>&1 ]; then
- USE_MEDIAWIKI=1
- else
- echo "html2wiki program not found or is not executable."
- exit 1
- fi
+ USE_MEDIAWIKI=1
shift
;;
-h|--help|*)
@@ -128,9 +123,8 @@ for f in $MANPAGES; do
echo $outname: ../mdoc2wiki.awk $f >> Makefile
echo " awk -f ../mdoc2wiki.awk < $f > $outname" >> Makefile
else
- inname="../html/$(basename $f).html"
- echo $outname: $inname $f >> Makefile
- echo " html2wiki --dialect MediaWiki --encoding utf-8 $inname > $outname" >> Makefile
+ echo $outname: ../mdoc2mediawiki.awk $f >> Makefile
+ echo " awk -f ../mdoc2mediawiki.awk < $f > $outname" >> Makefile
fi
all="$all $outname"
done