diff options
Diffstat (limited to 'third_party/heimdal/lib/libedit/doc/mdoc2man.awk')
-rw-r--r-- | third_party/heimdal/lib/libedit/doc/mdoc2man.awk | 459 |
1 files changed, 459 insertions, 0 deletions
diff --git a/third_party/heimdal/lib/libedit/doc/mdoc2man.awk b/third_party/heimdal/lib/libedit/doc/mdoc2man.awk new file mode 100644 index 0000000..e21753f --- /dev/null +++ b/third_party/heimdal/lib/libedit/doc/mdoc2man.awk @@ -0,0 +1,459 @@ +#!/usr/bin/awk +# +# Version history: +# v3, I put the program under a proper license +# Dan Nelson <dnelson@allantgroup.com> added .An, .Aq and fixed a typo +# v2, fixed to work on GNU awk --posix and MacOS X +# v1, first attempt, didn't work on MacOS X +# +# 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. + + +BEGIN { + optlist=0 + oldoptlist=0 + nospace=0 + synopsis=0 + reference=0 + block=0 + ext=0 + extopt=0 + literal=0 + prenl=0 + breakw=0 + line="" + proto=0 + bl_level=0 +} + +function wtail() { + retval="" + while(w<nwords) { + if(length(retval)) + retval=retval OFS + retval=retval words[++w] + } + return retval +} + +function add(str) { + for(;prenl;prenl--) + line=line "\n" + line=line str +} + +! /^\./ { + for(;prenl;prenl--) + print "" + print + if(literal) + print ".br" + next +} + +/^\.\\"/ { next } + +{ + option=0 + parens=0 + angles=0 + sub("^\\.","") + nwords=split($0,words) + for(w=1;w<=nwords;w++) { + skip=0 + if(match(words[w],"^Li|Pf$")) { + skip=1 + } else if(match(words[w],"^Xo$")) { + skip=1 + ext=1 + if(length(line)&&!(match(line," $")||prenl)) + add(OFS) + } else if(match(words[w],"^Xc$")) { + skip=1 + ext=0 + if(!extopt) + prenl++ + w=nwords + } else if(match(words[w],"^Bd$")) { + skip=1 + if(match(words[w+1],"-literal")) { + literal=1 + prenl++ + w=nwords + } + } else if(match(words[w],"^Po$")) { + skip=1 + add("(") + if(!nospace) + nospace=1 + } else if(match(words[w],"^Pc$")) { + skip=1 + add(")") + if(!nospace) + nospace=1 + } else if(match(words[w],"^Ed$")) { + skip=1 + literal=0 + } else if(match(words[w],"^Ns$")) { + skip=1 + if(!nospace) + nospace=1 + sub(" $","",line) + } else if(match(words[w],"^No$")) { + skip=1 + sub(" $","",line) + add(words[++w]) + } else if(match(words[w],"^Dq$")) { + skip=1 + add("``") + add(words[++w]) + while(w<nwords&&!match(words[w+1],"^[\\.,]")) + add(OFS words[++w]) + add("''") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Va$")) { + skip=1 + add("\\fI" words[++w]) + while(w<nwords&&!match(words[w+1],"^[\\.,]")) + add(OFS words[++w]) + add("\\fP") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Sq|Ql$")) { + skip=1 + add("`" words[++w] "'") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Oo$")) { + skip=1 + extopt=1 + if(!nospace) + nospace=1 + add("[") + } else if(match(words[w],"^Oc$")) { + skip=1 + extopt=0 + add("]") + } + if(!skip) { + if(!nospace&&length(line)&&!(match(line," $")||prenl)) + add(OFS) + if(nospace==1) + nospace=0 + } + if(match(words[w],"^Dd$")) { + date=wtail() + next + } else if(match(words[w],"^Dt$")) { + id=wtail() + next + } else if(match(words[w],"^Os$")) { + add(".TH " id " \"" date "\" \"" wtail() "\"") + } else if(match(words[w],"^Sh$")) { + add(".SH") + synopsis=match(words[w+1],"SYNOPSIS") + } else if(match(words[w],"^Xr$")) { + #add("\\fB" words[++w] "\\fP(" words[++w] ")" words[++w]) + add("\\fB" words[++w] "\\fP(" words[++w] ")") + sub("^Ns$", "", words[w+1]) + add(words[++w]) + } else if(match(words[w],"^Rs$")) { + split("",refauthors) + nrefauthors=0 + reftitle="" + refissue="" + refdate="" + refopt="" + reference=1 + next + } else if(match(words[w],"^Re$")) { + prenl++ + for(i=nrefauthors-1;i>0;i--) { + add(refauthors[i]) + if(i>1) + add(", ") + } + if(nrefauthors>1) + add(" and ") + add(refauthors[0] ", \\fI" reftitle "\\fP") + if(length(refissue)) + add(", " refissue) + if(length(refdate)) + add(", " refdate) + if(length(refopt)) + add(", " refopt) + add(".") + reference=0 + } else if(reference) { + if(match(words[w],"^%A$")) { refauthors[nrefauthors++]=wtail() } + if(match(words[w],"^%T$")) { + reftitle=wtail() + sub("^\"","",reftitle) + sub("\"$","",reftitle) + } + if(match(words[w],"^%N$")) { refissue=wtail() } + if(match(words[w],"^%D$")) { refdate=wtail() } + if(match(words[w],"^%O$")) { refopt=wtail() } + } else if(match(words[w],"^Nm$")) { + if(synopsis) { + add(".br") + prenl++ + } + n=words[++w] + if(!length(name)) + name=n + if(!length(n)) + n=name + add("\\fB" n "\\fP") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Nd$")) { + add("\\- " wtail()) + } else if(match(words[w],"^Fl$")) { + add("\\fB\\-" words[++w] "\\fP") + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Ar$")) { + add("\\fI") + if(w==nwords) + add("file ...\\fP") + else { + add(words[++w] "\\fP") + while(match(words[w+1],"^\\|$")) + add(OFS words[++w] " \\fI" words[++w] "\\fP") + } + if(!nospace&&match(words[w+1],"^[\\.,]")) + nospace=1 + } else if(match(words[w],"^Cm$")) { + add("\\fB" words[++w] "\\fP") + while(w<nwords&&match(words[w+1],"^[\\.,:;)]")) + add(words[++w]) + } else if(match(words[w],"^Op$")) { + option=1 + if(!nospace) + nospace=1 + add("[") + } else if(match(words[w],"^Pp$")) { + prenl++ + } else if(match(words[w],"^An$")) { + prenl++ + } else if(match(words[w],"^Ss$")) { + add(".SS") + } else if(match(words[w],"^Pa$")&&!option) { + add("\\fI") + w++ + if(match(words[w],"^\\.")) + add("\\&") + add(words[w] "\\fP") + while(w<nwords&&match(words[w+1],"^[\\.,:;)]")) + add(words[++w]) + } else if(match(words[w],"^Dv$")) { + #add(".BR") + } else if(match(words[w],"^Em|Ev$")) { + add(".IR") + } else if(match(words[w],"^Pq$")) { + add("(") + nospace=1 + parens=1 + } else if(match(words[w],"^Aq$")) { + add("<") + nospace=1 + angles=1 + } else if(match(words[w],"^S[xy]$")) { + add(".B " wtail()) + } else if(match(words[w],"^Ic$")) { + plain=1 + add("\\fB") + while(w<nwords) { + w++ + if(match(words[w],"^Op$")) { + w++ + add("[") + words[nwords]=words[nwords] "]" + } + if(match(words[w],"^Ar$")) { + add("\\fI" words[++w] "\\fP") + } else if(match(words[w],"^[\\.,]")) { + sub(" $","",line) + if(plain) { + add("\\fP") + plain=0 + } + add(words[w]) + } else if(match(words[w],"^Xo$")) { + } else { + if(!plain) { + add("\\fB") + plain=1 + } + add(words[w]) + } + if(!nospace) + add(OFS) + } + sub(" $","",line) + if(plain) + add("\\fP") + } else if(match(words[w],"^Dl$")) { + ## remove is ok for editrc.5 + } else if(match(words[w],"^Bl$")) { + ++bl_level + if (bl_level > 1) + add(".RS") + oldoptlist=optlist + if(match(words[w+1],"-bullet")) + optlist=1 + else if(match(words[w+1],"-enum")) { + optlist=2 + enum=0 + } else if(match(words[w+1],"-tag")) + optlist=3 + else if(match(words[w+1],"-item")) + optlist=4 + else if(match(words[w+1],"-bullet")) + optlist=1 + w=nwords + } else if(match(words[w],"^El$")) { + if (bl_level > 1) + add(".RE") + --bl_level + optlist=oldoptlist + } else if(match(words[w],"^Bk$")) { + if(match(words[w+1],"-words")) { + w++ + breakw=1 + } + } else if(match(words[w],"^Ek$")) { + breakw=0 + } else if(match(words[w],"^It$")&&optlist) { + if(optlist==1) + add(".IP \\(bu") + else if(optlist==2) + add(".IP " ++enum ".") + else if(optlist==3) { + add(".TP") + prenl++ + if(match(words[w+1],"^Pa$|^Ev$")) { + add(".B") + w++ + } + } else if(optlist==4) + add(".IP") + } else if(match(words[w],"^Sm$")) { + if(match(words[w+1],"off")) + nospace=2 + else if(match(words[w+1],"on")) + nospace=0 + w++ + } else if(match(words[w],"^Lb$")) { + wtail() + add("Command Line Editor Library (libedit, -ledit)") + } else if(match(words[w],"^In$")) { + add(".PP\n") + add("\\fB#include <" wtail() ">\\fP") + } else if(match(words[w],"^Ft$")) { + add(".PP\n") + add("\\fI" wtail() "\\fP\n") + add(".br") + proto=1 + } else if(match(words[w],"^Fn$")) { + add("\\fB" words[++w] "\\fP(") + punct=0 + while(++w<=nwords) { + if(match(words[w], "^\".*\"$")) { + sub("^\"", "", words[w]) + sub("\"$", "", words[w]) + add("\\fI" words[w] "\\fP") + if (w!=nwords) { + add(", ") + } + } else if(match(words[w], "^\"")) { + sub("^\"", "", words[w]) + add("\\fI" words[w] " ") + } else if (match(words[w], "\"$")) { + sub("\"$", "", words[w]) + add(words[w] "\\fP") + if (w!=nwords) { + add(", ") + } + } else { + if (w==nwords&&(match(words[w], "^[.,]$"))) { + punct=1 + } else { + add(words[w] " ") + } + + } + } + add(")") + if (punct==1) { + add(words[w-1]) + } else { + if (proto==1) { + add(";") + proto=0 + } + } + } else if(match(words[w],"^Fa$")) { + punct=0 + add("\\fI") + while(++w<=nwords) { + if(match(words[w], "^\".*\"$")) { + sub("^\"", "", words[w]) + sub("\"$", "", words[w]) + add(words[w]) + } else if(match(words[w], "^\"")) { + sub("^\"", "", words[w]) + add(words[w] " ") + } else if (match(words[w], "\"$")) { + sub("\"$", "", words[w]) + add(words[w]) + } else { + if (w==nwords&&(match(words[w], "^[.,]$"))) { + punct=1 + } else { + if (w+1==nwords&&(match(words[w+1], "^[.,]$"))) { + add(words[w]) + } else { + add(words[w] " ") + } + } + } + } + add("\\fP") + if (punct==1) { + add(words[w-1]) + } + } else if(!skip) { + add(words[w]) + } + } + if(match(line,"^\\.[^a-zA-Z]")) + sub("^\\.","",line) + if(parens) + add(")") + if(angles) + add(">") + if(option) + add("]") + if(ext&&!extopt&&!match(line," $")) + add(OFS) + if(!ext&&!extopt&&length(line)) { + print line + prenl=0 + line="" + } +} |