mirror of
https://github.com/libarchive/libarchive.git
synced 2026-01-26 15:39:09 +00:00
First real attempt to convert all mdoc manpages to Wiki syntax.
Including the awk script I'm using and updates to the doc generator to produce the Wiki versions as part of the regular deployment. SVN-Revision: 974
This commit is contained in:
parent
de8e87b206
commit
2039e354d9
2
doc/html/.ignore_me
Normal file
2
doc/html/.ignore_me
Normal file
@ -0,0 +1,2 @@
|
||||
*** PLEASE DO NOT DELETE THIS FILE! ***
|
||||
This file is used to track an otherwise empty directory in git.
|
||||
423
doc/mdoc2wiki.awk
Executable file
423
doc/mdoc2wiki.awk
Executable file
@ -0,0 +1,423 @@
|
||||
#!/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("{{{")
|
||||
}
|
||||
|
||||
# End an indented display
|
||||
function dispend() {
|
||||
linecmd("}}}")
|
||||
}
|
||||
|
||||
# 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 after next word
|
||||
nextsep = ""
|
||||
} 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("[")
|
||||
} else if(match(words[w],"^Oc$")) {
|
||||
addclose("]")
|
||||
} else if(match(words[w],"^Ao$")) {
|
||||
addopen("<")
|
||||
} else if(match(words[w],"^Ac$")) {
|
||||
addclose(">")
|
||||
} else if(match(words[w],"^Dd$")) {
|
||||
date=wtail()
|
||||
next
|
||||
} else if(match(words[w],"^Dt$")) {
|
||||
id=wtail()
|
||||
next
|
||||
} else if(match(words[w],"^Ox$")) {
|
||||
add("OpenBSD")
|
||||
} else if(match(words[w],"^Fx$")) {
|
||||
add("FreeBSD")
|
||||
} else if(match(words[w],"^Nx$")) {
|
||||
add("NetBSD")
|
||||
} else if(match(words[w],"^St$")) {
|
||||
if (match(words[w+1], "^-p1003.1$")) {
|
||||
w++
|
||||
add("IEEE Std 1003.1 (``POSIX.1'')")
|
||||
} else if(match(words[w+1], "^-p1003.1-96$")) {
|
||||
w++
|
||||
add("ISO/IEC 9945-1:1996 (``POSIX.1'')")
|
||||
} else if(match(words[w+1], "^-p1003.1-88$")) {
|
||||
w++
|
||||
add("IEEE Std 1003.1-1988 (``POSIX.1'')")
|
||||
} else if(match(words[w+1], "^-p1003.1-2001$")) {
|
||||
w++
|
||||
add("IEEE Std 1003.1-2001 (``POSIX.1'')")
|
||||
} else if(match(words[w+1], "^-susv2$")) {
|
||||
w++
|
||||
add("Version 2 of the Single UNIX Specification (``SUSv2'')")
|
||||
}
|
||||
} else if(match(words[w],"^Ex$")) {
|
||||
if (match(words[w+1], "^-std$")) {
|
||||
w++
|
||||
add("The *" name "* utility exits 0 on success, and >0 if an error occurs.")
|
||||
}
|
||||
} else if(match(words[w],"^Os$")) {
|
||||
add("#summary " 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
|
||||
add("*" n "*")
|
||||
} else if(match(words[w],"^Nd$")) {
|
||||
add("- " wtail())
|
||||
} else if(match(words[w],"^Fl$")) {
|
||||
add("*-" words[++w] "*")
|
||||
} else if(match(words[w],"^Ar$")) {
|
||||
addopen("_")
|
||||
if(w==nwords)
|
||||
add("file ..._")
|
||||
else
|
||||
add(words[++w] "_")
|
||||
} else if(match(words[w],"^Cm$")) {
|
||||
add("*" words[++w] "*")
|
||||
} else if(match(words[w],"^Op$")) {
|
||||
addopen("[")
|
||||
option=1
|
||||
trailer="]" trailer
|
||||
} else if(match(words[w],"^Pp$")) {
|
||||
linecmd("")
|
||||
} else if(match(words[w],"^An$")) {
|
||||
endline()
|
||||
} else if(match(words[w],"^Ss$")) {
|
||||
add("===")
|
||||
} else if(match(words[w],"^Ft$")) {
|
||||
if (match(section, "SYNOPSIS")) {
|
||||
breakline()
|
||||
}
|
||||
l = wtail()
|
||||
gsub("\\*", "`*`", l)
|
||||
|
||||
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
|
||||
}
|
||||
gsub("\\*", "`*`", words[w])
|
||||
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++
|
||||
gsub("\\*", "`*`", words[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("*#include <" words[w] ">*")
|
||||
} else if(match(words[w],"^Pa$")) {
|
||||
addopen("_")
|
||||
w++
|
||||
if(match(words[w],"^\\."))
|
||||
add("\\&")
|
||||
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(" <")
|
||||
trailer=">" trailer
|
||||
} else if(match(words[w],"^Brq$")) {
|
||||
addopen("{")
|
||||
trailer="}" trailer
|
||||
} else if(match(words[w],"^S[xy]$")) {
|
||||
add(".B " wtail())
|
||||
} else if(match(words[w],"^Tn$")) {
|
||||
add("*" wtail() "*")
|
||||
} else if(match(words[w],"^Ic$")) {
|
||||
add("\\fB")
|
||||
trailer="\\fP" trailer
|
||||
} else if(match(words[w],"^Bl$")) {
|
||||
++listdepth
|
||||
listnext[listdepth]=""
|
||||
if(match(words[w+1],"-bullet"))
|
||||
optlist[listdepth]=1
|
||||
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>"
|
||||
} else if(match(words[w+1],"-bullet")) {
|
||||
optlist[listdepth]=1
|
||||
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$")) {
|
||||
add(".B")
|
||||
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],"^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 {
|
||||
add(words[w])
|
||||
}
|
||||
}
|
||||
if(match(out,"^\\.[^a-zA-Z]"))
|
||||
sub("^\\.","",out)
|
||||
endline()
|
||||
}
|
||||
@ -5,24 +5,22 @@
|
||||
# the mdoc man pages stored in each project.
|
||||
#
|
||||
|
||||
# Remove existing manpages from the doc tree
|
||||
chmod -R +w man text
|
||||
rm -f man/*.[135]
|
||||
rm -f text/*.txt
|
||||
rm -f pdf/*.pdf
|
||||
if false; then
|
||||
|
||||
# Build Makefile in 'man' directory
|
||||
cd man
|
||||
rm -f *.[135]
|
||||
echo > Makefile
|
||||
echo "default: all" >>Makefile
|
||||
echo >>Makefile
|
||||
all="all:"
|
||||
for d in libarchive tar cpio; do
|
||||
for f in ../../$d/*.[135]; do
|
||||
outname="`basename $f`"
|
||||
echo >> Makefile
|
||||
echo `basename $f`: ../mdoc2man.awk $f >> Makefile
|
||||
echo " awk -f ../mdoc2man.awk < $f > `basename $f`" >> Makefile
|
||||
all="$all `basename $f`"
|
||||
echo $outname: ../mdoc2man.awk $f >> Makefile
|
||||
echo " awk -f ../mdoc2man.awk < $f > $outname" >> Makefile
|
||||
all="$all $outname"
|
||||
done
|
||||
done
|
||||
echo $all >>Makefile
|
||||
@ -30,16 +28,18 @@ cd ..
|
||||
|
||||
# Rebuild Makefile in 'text' directory
|
||||
cd text
|
||||
rm -f *.txt
|
||||
echo > Makefile
|
||||
echo "default: all" >>Makefile
|
||||
echo >>Makefile
|
||||
all="all:"
|
||||
for d in libarchive tar cpio; do
|
||||
for f in ../../$d/*.[135]; do
|
||||
outname="`basename $f`.txt"
|
||||
echo >> Makefile
|
||||
echo `basename $f`.txt: $f >> Makefile
|
||||
echo " nroff -mdoc $f | col -b > `basename $f`.txt" >> Makefile
|
||||
all="$all `basename $f`.txt"
|
||||
echo $outname: $f >> Makefile
|
||||
echo " nroff -mdoc $f | col -b > $outname" >> Makefile
|
||||
all="$all $outname"
|
||||
done
|
||||
done
|
||||
echo $all >>Makefile
|
||||
@ -47,16 +47,58 @@ cd ..
|
||||
|
||||
# Rebuild Makefile in 'pdf' directory
|
||||
cd pdf
|
||||
rm -f *.pdf
|
||||
echo > Makefile
|
||||
echo "default: all" >>Makefile
|
||||
echo >>Makefile
|
||||
all="all:"
|
||||
for d in libarchive tar cpio; do
|
||||
for f in ../../$d/*.[135]; do
|
||||
outname="`basename $f`.pdf"
|
||||
echo >> Makefile
|
||||
echo `basename $f`.pdf: $f >> Makefile
|
||||
echo " groff -mdoc -T ps $f | ps2pdf - - > `basename $f`.pdf" >> Makefile
|
||||
all="$all `basename $f`.pdf"
|
||||
echo $outname: $f >> Makefile
|
||||
echo " groff -mdoc -T ps $f | ps2pdf - - > $outname" >> Makefile
|
||||
all="$all $outname"
|
||||
done
|
||||
done
|
||||
echo $all >>Makefile
|
||||
cd ..
|
||||
|
||||
# Build Makefile in 'html' directory
|
||||
cd html
|
||||
rm -f *.html
|
||||
echo > Makefile
|
||||
echo "default: all" >>Makefile
|
||||
echo >>Makefile
|
||||
all="all:"
|
||||
for d in libarchive tar cpio; do
|
||||
for f in ../../$d/*.[135]; do
|
||||
outname="`basename $f`.html"
|
||||
echo >> Makefile
|
||||
echo $outname: ../mdoc2man.awk $f >> Makefile
|
||||
echo " groff -mdoc -T html $f > $outname" >> Makefile
|
||||
all="$all $outname"
|
||||
done
|
||||
done
|
||||
echo $all >>Makefile
|
||||
cd ..
|
||||
|
||||
fi
|
||||
|
||||
# Build Makefile in 'wiki' directory
|
||||
cd wiki
|
||||
rm -f *.wiki
|
||||
echo > Makefile
|
||||
echo "default: all" >>Makefile
|
||||
echo >>Makefile
|
||||
all="all:"
|
||||
for d in libarchive tar cpio; do
|
||||
for f in ../../$d/*.[135]; do
|
||||
outname="`basename $f | awk '{ac=split($0,a,"[_.-]");o="ManPage";for(w=0;w<=ac;++w){o=o toupper(substr(a[w],1,1)) substr(a[w],2)};print o}'`.wiki"
|
||||
echo >> Makefile
|
||||
echo $outname: ../mdoc2wiki.awk $f >> Makefile
|
||||
echo " awk -f ../mdoc2wiki.awk < $f > $outname" >> Makefile
|
||||
all="$all $outname"
|
||||
done
|
||||
done
|
||||
echo $all >>Makefile
|
||||
@ -68,3 +110,7 @@ cd ..
|
||||
(cd text && make)
|
||||
# Format all of the manpages to PDF
|
||||
(cd pdf && make)
|
||||
# Format all of the manpages to HTML
|
||||
(cd html && make)
|
||||
# Format all of the manpages to Google Wiki syntax
|
||||
(cd wiki && make)
|
||||
|
||||
2
doc/wiki/.ignore_me
Normal file
2
doc/wiki/.ignore_me
Normal file
@ -0,0 +1,2 @@
|
||||
*** PLEASE DO NOT DELETE THIS FILE! ***
|
||||
This file is used to track an otherwise empty directory in git.
|
||||
Loading…
x
Reference in New Issue
Block a user