[Reproducible-commits] [txt2man] 02/13: Imported Upstream version 1.5.5
Reiner Herrmann
reiner at reiner-h.de
Thu Jul 2 16:52:19 UTC 2015
This is an automated email from the git hooks/post-receive script.
deki-guest pushed a commit to branch pu/reproducible_builds
in repository txt2man.
commit b2392a87669051f07d37f11a6c3a2965673aa595
Author: Fredrik Steen <stone at o2.ijt.se>
Date: Thu Apr 7 15:53:51 2011 +0200
Imported Upstream version 1.5.5
---
COPYING | 339 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
Changelog | 50 ++++++++
Makefile | 21 ++++
README | 17 +++
bookman | 142 +++++++++++++++++++++++
bookman.1 | 79 +++++++++++++
src2man | 185 ++++++++++++++++++++++++++++++
src2man.1 | 85 ++++++++++++++
txt2man | 383 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
txt2man.1 | 168 +++++++++++++++++++++++++++
10 files changed, 1469 insertions(+)
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..a43ea21
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Changelog b/Changelog
new file mode 100644
index 0000000..9741893
--- /dev/null
+++ b/Changelog
@@ -0,0 +1,50 @@
+txt2man-1.5.5 21-mar-2007
+
+* txt2man: correct layout of C structures in synopsis
+* src2man: genrate manpages for C types/struct definitions
+
+txt2man-1.5.4 16-mar-2007
+
+* bookman: Added copyright
+* src2man: Added copyright. Fix cover page handling. Add origin
+ comment in generated manpages.
+
+txt2man-1.5.3 15-mar-2007
+
+* bookman: better handling of header and footers of cover page.
+* src2man: date can now be set.
+* txt2man: date can now be set. Better handling of C function prototypes.
+
+txt2man-1.5.2 28-feb-2007
+
+* txt2man: fix synopsis handling.
+
+txt2man-1.5.1 25-oct-2006
+
+* src2man: search if the function prototype is defined in corresponding
+ '.h' include file, and if yes, add a '#include "file.h"'
+ statement in synopsis.
+* src2man: allow to force SYNOPSIS sections in comment blocks.
+* bookman: reads the file list from stdin in no arg is supplied.
+* Makefile: specify commands path (in current dir) when generating doc.
+
+txt2man-1.5 16-oct-2006
+
+* txt2man: fix indentation.
+* bookman: new command to generate a book from manpages.
+* src2man: new command to extract manpages from source files.
+* Makefile: update and fix rules.
+
+txt2man-1.4.8 07-jul-2003
+
+* txt2man: fix a bug in tag list parsing (bug discovered by Fredrik Steen)
+* txt2man: fix a bug in parsing spaces in empty lines
+* Makefile: Create install target directories, if not there
+
+txt2man-1.4.7 06-jan-2003
+
+* fix gawk --lint warnings (from Eric Moors)
+* fix a warning for an escape sequence (from Juergen Daubert)
+
+txt2man-1.4.6 16-dec-2002
+Changelog starts from here!
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ecb4ef5
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,21 @@
+# Makefile
+prefix ?= /usr/local
+version = txt2man-1.5.5
+BIN = src2man bookman txt2man
+MAN1 = src2man.1 txt2man.1 bookman.1
+
+all: $(MAN1)
+
+install: $(MAN1)
+ mkdir -p $(prefix)/bin $(prefix)/man/man1
+ cp $(BIN) $(prefix)/bin/
+ cp $(MAN1) $(prefix)/man/man1
+
+clean:
+ rm -f *.1 *.txt *.ps *.pdf *.html
+
+%.1:%.txt; ./txt2man -s 1 -t $* -r $(version) $< > $@
+%.txt:%; ./$< -h 2>&1 > $@
+%.html:%.1; rman -f HTML $< > $@
+%.ps:%.1; groff -man $< > $@
+%.pdf:%.ps; ps2pdf $< > $@
diff --git a/README b/README
new file mode 100644
index 0000000..72ef620
--- /dev/null
+++ b/README
@@ -0,0 +1,17 @@
+NAME
+ txt2man
+
+DESCRIPTION
+ Txt2man converts flat ASCII text to man page format. It is a shell
+ script using gnu awk, that should run on any Unix like system.
+
+ help: txt2man -h
+
+INSTALL
+ make install (to install under /usr/local)
+ or
+ make install prefix=path
+
+Send comments, suggestions and bug reports to mvertes at free.fr
+
+-- Marc Vertes
diff --git a/bookman b/bookman
new file mode 100755
index 0000000..11bd913
--- /dev/null
+++ b/bookman
@@ -0,0 +1,142 @@
+#!/bin/sh
+# Generate a book from man pages.
+
+# Copyright (C) 2006 Marc Vertes
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# release 1.5.5
+
+man() {
+ cat << \EOT
+NAME
+ bookman - Generate a book from man pages
+SYNOPSIS
+ bookman [-pPxn] [-o outfile] [-a author] [-d date] [-r release]
+ [-t title] [-v volume] [-c coverfile] [manfile]
+DESCRIPTION
+ bookman compiles a set of man pages files specified by manfile
+ arguments, or if no manfile is given, filenames are read from standard
+ input.
+OPTIONS
+ -p PDF output format.
+ -P Postscript output format.
+ -x X11 previewing, using gxditview(1).
+ -n no format, output is direct gtroff intermediate format.
+ -o outfile Output in file outfile. Default is standard output.
+ -a author Set the author, on the cover page.
+ -d date Set the date on the cover page.
+ -r release Set the book name and release on the cover page.
+ -t title Set the title on the cover page.
+ -v volume Specify the name of the volume.
+ -c coverfile Uses the file coverfile to generate the cover page,
+ i.e. all pages preceding the table of content. coverfile
+ must be in groff_ms(7) format.
+
+EXAMPLE
+ To build a reference manual from section 2 man, do:
+
+ $ cd /usr/man/man2
+ $ bookman -p -t 'Unix Reference Manual' * >book.pdf
+
+SEE ALSO
+ man(1), mandoc(7), groff_ms(7), groff(1), troff(1), grops(1),
+ gxditview(1), ps2pdf(1).
+AUTHOR
+ Marc Vertes <mvertes at free.fr>
+EOT
+}
+
+post="grops"
+
+while getopts :a:c:d:mno:pPr:t:v:x opt
+do
+ case $opt in
+ a) author="$OPTARG";;
+ c) cover="$OPTARG";;
+ d) date="$OPTARG";;
+ m) man; exit;;
+ n) post="cat";;
+ o) outfile="$OPTARG";;
+ p) post="grops | ps2pdf -";;
+ P) post=grops;;
+ x) post="gxditview -";;
+ r) release="$OPTARG";;
+ t) title="$OPTARG";;
+ v) volume="$OPTARG";;
+ *) man; exit;;
+ esac
+done
+shift $(($OPTIND - 1))
+date=${date:-$(date +'%d %B %Y')}
+
+[[ $1 ]] || set -- $(while read; do echo $REPLY; done)
+
+[[ $outfile ]] && post="$post >$outfile"
+
+{
+ # Compute table of content from postscript output.
+ # Generate output in gtroff intermediate format, so
+ # it can be merged with content.
+ {
+ [[ -f $cover ]] && cat $cover || {
+ printf ".af %% i\n.P1\n"
+ printf ".OH ||%s||\n" "$volume"
+ printf ".EH ||%s||\n" "$volume"
+ printf ".OF |%s|%s|%%|\n" "$release" "$date"
+ printf ".EF |%s|%s|%%|\n" "$release" "$date"
+ printf ".TL\n%s\n" "$title"
+ printf ".AU\n%s\n.AB no\n.AE\n" "$author"
+ }
+ for f
+ do
+ case $f in
+ *.Z|*.gz) zcat$f;;
+ *.bz2) bzcat $f;;
+ *) cat $f;;
+ esac
+ done | groff -man -rC1 -Tps | awk '
+ $1 == "%%Page:" {page = $2}
+ /%%EndPageSetup/ {
+ getline l; getline; $0 = l $0
+ # extract first word (disgard everything
+ # outside braces).
+ sub(/^[^\(]*\(/, "")
+ gsub(/\)[^\(]*\(/, "")
+ gsub(/\\214/, "fi")
+ gsub(/\\215/, "fl")
+ sub(/\)[^\(]*/, "")
+ sub(/\\\(.*/, "")
+ if (name != $0) {
+ print (page == 1) ? ".XS 1" : ".XA " page
+ print $0
+ }
+ name = $0
+ }
+ END {print ".XE"; print ".PX"}'
+ } | groff -Z -ms | head --lines=-1
+
+ # Output content, in gtroff intermediate format.
+ for f
+ do
+ case $f in
+ *.Z|*.gz) zcat $f;;
+ *.bz2) bzcat $f;;
+ *) cat $f;;
+ esac
+ done | groff -Z -man -rC1 | awk 'NR >3'
+
+} | eval $post
diff --git a/bookman.1 b/bookman.1
new file mode 100644
index 0000000..296bb7a
--- /dev/null
+++ b/bookman.1
@@ -0,0 +1,79 @@
+." Text automatically generated by txt2man
+.TH bookman 1 "21 March 2007" "txt2man-1.5.5" ""
+.SH NAME
+\fBbookman \fP- Generate a book from man pages
+.SH SYNOPSIS
+.nf
+.fam C
+\fBbookman\fP [\fB-pPxn\fP] [\fB-o\fP \fIoutfile\fP] [\fB-a\fP \fIauthor\fP] [\fB-d\fP \fIdate\fP] [\fB-r\fP \fIrelease\fP]
+[\fB-t\fP \fItitle\fP] [\fB-v\fP \fIvolume\fP] [\fB-c\fP \fIcoverfile\fP] [\fImanfile\fP]
+.fam T
+.fi
+.fam T
+.fi
+.SH DESCRIPTION
+\fBbookman\fP compiles a set of man pages files specified by \fImanfile\fP
+arguments, or if no \fImanfile\fP is given, filenames are read from standard
+input.
+.SH OPTIONS
+.TP
+.B
+\fB-p\fP
+PDF output format.
+.TP
+.B
+\fB-P\fP
+Postscript output format.
+.TP
+.B
+\fB-x\fP
+X11 previewing, using \fBgxditview\fP(1).
+.TP
+.B
+\fB-n\fP
+no format, output is direct gtroff intermediate format.
+.TP
+.B
+\fB-o\fP \fIoutfile\fP
+Output in file \fIoutfile\fP. Default is standard output.
+.TP
+.B
+\fB-a\fP \fIauthor\fP
+Set the \fIauthor\fP, on the cover page.
+.TP
+.B
+\fB-d\fP \fIdate\fP
+Set the \fIdate\fP on the cover page.
+.TP
+.B
+\fB-r\fP \fIrelease\fP
+Set the book name and \fIrelease\fP on the cover page.
+.TP
+.B
+\fB-t\fP \fItitle\fP
+Set the \fItitle\fP on the cover page.
+.TP
+.B
+\fB-v\fP \fIvolume\fP
+Specify the name of the \fIvolume\fP.
+.TP
+.B
+\fB-c\fP \fIcoverfile\fP
+Uses the file \fIcoverfile\fP to generate the cover page,
+i.e. all pages preceding the table of content. \fIcoverfile\fP
+must be in \fBgroff_ms\fP(7) format.
+.SH EXAMPLE
+To build a reference manual from section 2 man, do:
+.PP
+.nf
+.fam C
+ $ cd /usr/man/man2
+ $ bookman -p -t 'Unix Reference Manual' * >book.pdf
+
+.fam T
+.fi
+.SH SEE ALSO
+\fBman\fP(1), \fBmandoc\fP(7), \fBgroff_ms\fP(7), \fBgroff\fP(1), \fBtroff\fP(1), \fBgrops\fP(1),
+\fBgxditview\fP(1), \fBps2pdf\fP(1).
+.SH AUTHOR
+Marc Vertes <mvertes at free.fr>
diff --git a/src2man b/src2man
new file mode 100755
index 0000000..d10eb29
--- /dev/null
+++ b/src2man
@@ -0,0 +1,185 @@
+#!/bin/sh
+# Extract manpages from C source files.
+
+# Copyright (C) 2006 Marc Vertes
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# release 1.5.5
+
+man() {
+ cat << \EOT
+NAME
+ src2man - extract man pages from source files.
+SYNOPSIS
+ src2man [-n][-d date][-v volume][-r release] [srcfile ...]
+DESCRIPTION
+ src2man scans source file srcfile. Only C source files are supported
+ for now. Comments blocks starting by "/** num", where num is a section
+ number, are converted into a man file, using txt2man(1).
+
+ The first line of the comment block must contain the name of the
+ manpage, usually the function name, followed by a "-" and a short
+ description. The following lines are the "DESCRIPTION" section
+ content, except if they are in upper case, in which case they define
+ a new section.
+
+ If the next line after a comment block is empty, Then no "SYNOPSIS"
+ section will be generated. Otherwise, src2man will look in the following
+ source lines for a function prototype or a type definion (struct,
+ union, typedef, ...) matching the manpage name, and include it in a
+ "SYNOPSIS" section. This avoids to duplicate the type or function
+ prototype in the comment block.
+
+ The best place for code documentation is in the source file, where
+ the body is implemented, not the header file which only contains
+ the prototype. src2man automatically searches for the presence of a
+ prototype in the corresponding header file, and if found, will print a
+ "#include" statement in the synopsis.
+
+OPTIONS
+ -d date Set the date of the man pages. Defaults to current date.
+ -n No man page is created. The name of the manpages that would
+ be created are printed.
+ -v volume Specify the name of the volume to be printed in center header
+ of generated manpages.
+ -r release Specify the project name and release number for the generated
+ manpage.
+EXAMPLE
+ The following example displays C code and comments to generate a manpage
+ foobar.3:
+
+ /** 3
+ * foobar - a sample dummy function
+ * This line is now the first of the description section.
+ * Note that function parameters parm1 and parm2 are highlighted
+ * in the generated man page.
+ */
+ int foobar(char *parm1, int parm2)
+ {
+ ...
+ return 0;
+ }
+
+SEE ALSO
+ txt2man(1), bookman(1).
+AUTHOR
+ Marc Vertes <mvertes at free.fr>
+EOT
+}
+
+nogen=0
+release=unknown
+while getopts :d:hnr:v: opt
+do
+ case $opt in
+ d) date="$OPTARG";;
+ n) nogen=1;;
+ v) volume="$OPTARG";;
+ r) release="$OPTARG";;
+ *) man; exit;;
+ esac
+done
+shift $(($OPTIND - 1))
+date=${date:-$(date +'%d %B %Y')}
+
+#
+# Extract manpages from source files. Man page content is enclosed in
+# commment blocks starting by "/** sectnum"
+#
+awk -v release="$release" -v volume="$volume" -v nogen=$nogen '
+/\/\*\* [0-9]/ {
+ sect = $2
+ getline
+ sub(/^ \* */, " ")
+ title = $1
+ line1_after_comment = 0
+ in_struct = 0
+ name = $0
+ inc = FILENAME
+ sub(/.[cS]$/, ".h", inc)
+ found = ""
+ grep_cmd = "test -f " inc " && grep -wq " title " " inc " \
+ 2>/dev/null && echo ok || echo nok"
+ grep_cmd | getline found
+ # description section extraction.
+ in_synop = 0
+ synop = ""
+ while (getline) {
+ if ($0 ~ / *\*\//) { # end of comment block
+ sub(/ *\*\//, "")
+ line1_after_comment = 1
+ break
+ }
+ sub(/^ \* /, "")
+ sub(/^ \*/, "")
+ if ($1 ~ /^[A-Z ]+$/ && $1 != "SYNOPSIS")
+ in_synop = 0
+ if ($1 == "SYNOPSIS") {
+ in_synop = 1
+ continue
+ }
+ if ($1 == "DESCRIPTION")
+ continue
+ if (in_synop)
+ synop = synop (synop ? "\n" : "") $0
+ else
+ desc = desc (desc ? "\n" : "") $0
+ }
+ # function prototype or struct extraction for synopsis.
+ if (! synop) {
+ while (getline) {
+ if (line1_after_comment) {
+ line1_after_comment = 0
+ if (NF == 0)
+ break
+ split(name, tname)
+ }
+ if ((!in_struct && $1 == "struct" && $2 == tname[1]) ||
+ (!in_struct && $2 == "struct" && $3 == tname[1])) {
+ in_struct = 1
+ synop = synop (synop ? "\n" : "") $0
+ continue
+ }
+ synop = synop (synop ? "\n" : "") $0
+ if (in_struct) {
+ if ($0 ~ " *" tname[1] "[; ][*]*") break
+ continue
+ }
+ if ($0 ~/\)[ \t{}\;]*$/) {
+ sub(/{[^}]}/, "", synop)
+ sub(/[ \t]*$/, "", synop)
+ if (found == "ok")
+ synop = "#include \"" inc "\"\n" synop
+ if (synop !~ /\;$/)
+ synop = synop ";"
+ break
+ }
+ }
+ }
+ print title "." sect > "/dev/stderr"
+ if (nogen) {
+ name = synop = desc = sect = ""
+ next
+ }
+ print "NAME\n" name (synop ? "\nSYNOPSIS\n " synop : "") \
+ "\nDESCRIPTION\n" desc "\nFILE\n " FILENAME | \
+ "{ echo .\\\" Extracted by src2man from " FILENAME "; \
+ txt2man -d \"$date\" -v \"" volume "\" -r " release \
+ " -s " sect " -t " title "; } >" title "." sect
+ name = synop = desc = sect = ""
+}
+' $*
diff --git a/src2man.1 b/src2man.1
new file mode 100644
index 0000000..4d3a94e
--- /dev/null
+++ b/src2man.1
@@ -0,0 +1,85 @@
+." Text automatically generated by txt2man
+.TH src2man 1 "21 March 2007" "txt2man-1.5.5" ""
+.SH NAME
+\fBsrc2man \fP- extract man pages from source files.
+.SH SYNOPSIS
+.nf
+.fam C
+\fBsrc2man\fP [\fB-n\fP][\fB-d\fP date][\fB-v\fP volume][\fB-r\fP \fIrelease\fP] [\fIsrcfile\fP \.\.\.]
+.fam T
+.fi
+.fam T
+.fi
+.SH DESCRIPTION
+\fBsrc2man\fP scans source file \fIsrcfile\fP. Only C source files are supported
+for now. Comments blocks starting by "/** num", where num is a section
+number, are converted into a man file, using \fBtxt2man\fP(1).
+.PP
+The first line of the comment block must contain the name of the
+manpage, usually the function name, followed by a "-" and a short
+.TP
+.B
+description.
+The following lines are the "DESCRIPTION" section
+content, except if they are in upper case, in which case they define
+a new section.
+.PP
+If the next line after a comment block is empty, Then no "SYNOPSIS"
+section will be generated. Otherwise, \fBsrc2man\fP will look in the following
+source lines for a function prototype or a type definion (struct,
+union, typedef, \.\.\.) matching the manpage name, and include it in a
+.TP
+.B
+"SYNOPSIS" section.
+This avoids to duplicate the type or function
+prototype in the comment block.
+.PP
+The best place for code documentation is in the source file, where
+the body is implemented, not the header file which only contains
+the prototype. \fBsrc2man\fP automatically searches for the presence of a
+prototype in the corresponding header file, and if found, will print a
+"#include" statement in the synopsis.
+.SH OPTIONS
+.TP
+.B
+\fB-d\fP date
+Set the date of the man pages. Defaults to current date.
+.TP
+.B
+\fB-n\fP
+No man page is created. The name of the manpages that would
+be created are printed.
+.TP
+.B
+\fB-v\fP volume
+Specify the name of the volume to be printed in center header
+of generated manpages.
+.TP
+.B
+\fB-r\fP \fIrelease\fP
+Specify the project name and \fIrelease\fP number for the generated
+manpage.
+.SH EXAMPLE
+The following example displays C code and comments to generate a manpage
+foobar.3:
+.PP
+.nf
+.fam C
+ /** 3
+ * foobar - a sample dummy function
+ * This line is now the first of the description section.
+ * Note that function parameters parm1 and parm2 are highlighted
+ * in the generated man page.
+ */
+ int foobar(char *parm1, int parm2)
+ {
+ \.\.\.
+ return 0;
+ }
+
+.fam T
+.fi
+.SH SEE ALSO
+\fBtxt2man\fP(1), \fBbookman\fP(1).
+.SH AUTHOR
+Marc Vertes <mvertes at free.fr>
diff --git a/txt2man b/txt2man
new file mode 100755
index 0000000..d6a0686
--- /dev/null
+++ b/txt2man
@@ -0,0 +1,383 @@
+#!/bin/sh
+test "$HOME" = ~ || exec ksh $0 "$@" # try ksh if sh too old (not yet POSIX)
+
+# Copyright (C) 2001, 2002, 2003 Marc Vertes
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# release 1.5.5
+
+usage()
+{
+cat << EOT
+NAME
+ txt2man - convert flat ASCII text to man page format
+SYNOPSIS
+ txt2man [-hpTX] [-t mytitle] [-P pname] [-r rel] [-s sect]
+ [-v vol] [-I txt] [-B txt] [-d date] [ifile]
+DESCRIPTION
+ txt2man converts the input text into nroff/troff standard man(7)
+ macros used to format Unix manual pages. Nice pages can be generated
+ specially for commands (section 1 or 8) or for C functions reference
+ (sections 2, 3), with the ability to recognize and format command and
+ function names, flags, types and arguments.
+
+ txt2man is also able to recognize and format sections, paragraphs,
+ lists (standard, numbered, description, nested), cross references and
+ literal display blocks.
+
+ If input file ifile is omitted, standard input is used. Result is
+ displayed on standard output.
+
+ Here is how text patterns are recognized and processed:
+ Sections These headers are defined by a line in upper case, starting
+ column 1. If there is one or more leading spaces, a
+ sub-section will be generated instead.
+ Paragraphs They must be separated by a blank line, and left aligned.
+ Tag list The item definition is separated from the item description
+ by at least 2 blank spaces, even before a new line, if
+ definition is too long. Definition will be emphasized
+ by default.
+ Bullet list
+ Bullet list items are defined by the first word being "-"
+ or "*" or "o".
+ Enumerated list
+ The first word must be a number followed by a dot.
+ Literal display blocks
+ This paragraph type is used to display unmodified text,
+ for example source code. It must be separated by a blank
+ line, and be indented. It is primarily used to format
+ unmodified source code. It will be printed using fixed font
+ whenever possible (troff).
+ Cross references
+ A cross reference (another man page) is defined by a word
+ followed by a number in parenthesis.
+
+ Special sections:
+ NAME The function or command name and short description are set in
+ this section.
+ SYNOPSIS This section receives a special treatment to identify command
+ name, flags and arguments, and propagate corresponding
+ attributes later in the text. If a C like function is recognized
+ (word immediately followed by an open parenthesis), txt2man will
+ print function name in bold font, types in normal font, and
+ variables in italic font. The whole section will be printed using
+ a fixed font family (courier) whenever possible (troff).
+
+ It is a good practice to embed documentation into source code, by using
+ comments or constant text variables. txt2man allows to do that, keeping
+ the document source readable, usable even without further formatting
+ (i.e. for online help) and easy to write. The result is high quality
+ and standard complying document.
+OPTIONS
+ -h The option -h displays help.
+ -d date Set date in header. Defaults to current date.
+ -P pname Set pname as project name in header. Default to uname -s.
+ -p Probe title, section name and volume.
+ -t mytitle Set mytitle as title of generated man page.
+ -r rel Set rel as project name and release.
+ -s sect Set sect as section in heading, ususally a value from 1 to 8.
+ -v vol Set vol as volume name, i.e. "Unix user 's manual".
+ -I txt Italicize txt in output. Can be specified more than once.
+ -B txt Emphasize (bold) txt in output. Can be specified more than once.
+ -T Text result previewing using PAGER, usually more(1).
+ -X X11 result previewing using gxditview(1).
+ENVIRONMENT
+ PAGER name of paging command, usually more(1), or less(1). If not set
+ falls back to more(1).
+EXAMPLE
+ Try this command to format this text itself:
+
+ $ txt2man -h 2>&1 | txt2man -T
+HINTS
+ To obtain an overall good formating of output document, keep paragraphs
+ indented correctly. If you have unwanted bold sections, search for
+ multiple spaces between words, which are used to identify a tag list
+ (term followed by a description). Choose also carefully the name of
+ command line or function parameters, as they will be emphasized each
+ time they are encountered in the document.
+SEE ALSO
+ man(1), mandoc(7), rman(1), groff(1), more(1), gxditview(1), troff(1).
+BUGS
+ - Automatic probe (-p option) works only if input is a regular file (i.e.
+ not stdin).
+AUTHOR
+ Marc Vertes <mvertes at free.fr>
+EOT
+}
+
+sys=$(uname -s)
+rel=
+volume=
+section=
+title=untitled
+doprobe=
+itxt=
+btxt=
+post=cat
+while getopts :d:hpTXr:s:t:v:P:I:B: opt
+do
+ case $opt in
+ d) date=$OPTARG;;
+ r) rel=$OPTARG;;
+ t) title=$OPTARG;;
+ s) section=$OPTARG;;
+ v) volume=$OPTARG;;
+ P) sys=$OPTARG;;
+ p) doprobe=1;;
+ I) itxt="$OPTARG�$itxt";;
+ B) btxt=$OPTARG;;
+ T) post="groff -mandoc -Tlatin1 | ${PAGER:-more}";;
+ X) post="groff -mandoc -X";;
+ *) usage; exit;;
+ esac
+done
+shift $(($OPTIND - 1))
+date=${date:-$(date +'%d %B %Y')}
+
+if test "$doprobe"
+then
+ title=${1##*/}; title=${title%.txt}
+ if grep -q '#include ' $1
+ then
+ section=${section:-3}
+ volume=${volume:-"$sys Programmer's Manual"}
+ else
+ section=${section:-1}
+ volume=${volume:-"$sys Reference Manual"}
+ fi
+ # get release from path
+ rel=$(pwd | sed 's:/.*[^0-9]/::g; s:/.*::g')
+fi
+
+head=".\\\" Text automatically generated by txt2man
+.TH $title $section \"$date\" \"$rel\" \"$volume\""
+
+# All tabs converted to spaces
+expand $* |
+# gawk is needed because use of non standard regexp
+gawk --re-interval -v head="$head" -v itxt="$itxt" -v btxt="$btxt" '
+BEGIN {
+ print head
+ avar[1] = btxt; avar[2] = itxt
+ for (k in avar) {
+ mark = (k == 1) ? "\\fB" : "\\fI"
+ split(avar[k], tt, "�")
+ for (i in tt)
+ if (tt[i] != "")
+ subwords["\\<" tt[i] "\\>"] = mark tt[i] "\\fP"
+ for (i in tt)
+ delete tt[i]
+ }
+ for (k in avar)
+ delete avar[k]
+}
+{
+ # to avoid some side effects in regexp
+ sub(/\.\.\./, "\\.\\.\\.")
+ # remove spaces in empty lines
+ sub(/^ +$/,"")
+}
+/^[[:upper:][:space:]]+$/ {
+ # Section header
+ if ((in_bd + 0) == 1) {
+ in_bd = 0
+ print ".fam T\n.fi"
+ }
+ if (section == "SYNOPSIS") {
+ print ".fam T\n.fi"
+ type["SYNOPSIS"] = ""
+ }
+ if ($0 ~/^[^[:space:]]/)
+ print ".SH " $0
+ else
+ print ".SS" $0
+ sub(/^ +/, "")
+ section = $0
+ if (section == "SYNOPSIS") {
+ print ".nf\n.fam C"
+ in_bd = 1
+ }
+ ls = 0 # line start index
+ pls = 0 # previous line start index
+ pnzls = 0 # previous non zero line start index
+ ni = 0 # indent level
+ ind[0] = 0 # indent offset table
+ prevblankline = 0
+ next
+}
+{
+ # Compute line start index, handle start of example display block
+ pls = ls
+ if (ls != 0)
+ pnzls = ls
+ match($0, /[^ ]/)
+ ls = RSTART
+ if (pls == 0 && pnzls > 0 && ls > pnzls && $1 !~ /^[0-9\-\*\o]\.*$/) {
+ # example display block
+ if (prevblankline == 1) {
+ print ".PP"
+ prevblankline = 0
+ }
+ print ".nf\n.fam C"
+ in_bd = 1
+ eoff = ls
+ }
+ if (ls > 0 && ind[0] == 0)
+ ind[0] = ls
+}
+(in_bd + 0) == 1 {
+ # In block display
+ if (section == "SYNOPSIS")
+ ;
+ else if (ls != 0 && ls < eoff) {
+ # End of litteral display block
+ in_bd = 0
+ print ".fam T\n.fi"
+ } else { print; next }
+}
+section == "NAME" {
+ $1 = "\\fB" $1
+ sub(/ \- /, " \\fP- ")
+}
+section == "SYNOPSIS" {
+ # Identify arguments of fcts and cmds
+ if (type["SYNOPSIS"] == "") {
+ if ($0 ~ /\(/)
+ type["SYNOPSIS"] = "fct"
+ else if ($1 == "struct" || $2 == "struct")
+ type["SYNOPSIS"] = "struct"
+ else if ($1 && $1 !~ /^#|typedef|struct|union|enum/)
+ type["SYNOPSIS"] = "cmd"
+ }
+ if (type["SYNOPSIS"] == "cmd") {
+ # Line is a command line
+ if ($1 !~ /^\[/) {
+ b = $1
+ sub(/^\*/, "", b)
+ subwords["\\<" b "\\>"] = "\\fB" b "\\fP"
+ }
+ for (i = 2; i <= NF; i++) {
+ a = $i
+ gsub(/[\[\]\|]/, "", a)
+ if (a ~ /^[^\-]/)
+ subwords["\\<" a "\\>"] = "\\fI" a "\\fP"
+ }
+ } else if (type["SYNOPSIS"] == "fct") {
+ # Line is a C function definition
+ if ($1 == "typedef") {
+ if ($0 !~ /\(\*/)
+ subwords["\\<" $2 "\\>"] = "\\fI" $2 "\\fP"
+ } else if ($1 == "#define")
+ subwords["\\<" $2 "\\>"] = "\\fI" $2 "\\fP"
+ for (i = 1; i <= NF; i++) {
+ if ($i ~ /[\,\)]\;*$/) {
+ a = $i
+ sub(/.*\(/, "", a)
+ gsub(/\W/, "", a)
+ subwords["\\<" a "\\>"] = "\\fI" a "\\fP"
+ }
+ }
+ }
+}
+{
+ # protect dots inside words
+ while ($0 ~ /\w\.\w/)
+ sub(/\./, "_dOt_")
+ # identify func calls and cross refs
+ for (i = 1; i <= NF; i++) {
+ b = $i
+ sub(/^\*/, "", b)
+ if ((a = index(b, ")(")) > 3) {
+ w = substr(b, 3, a - 3)
+ subwords["\\<" w "\\>"] = "\\fI" w "\\fP"
+ }
+ if ((a = index(b, "(")) > 1) {
+ w = substr(b, 1, a - 1)
+ subwords["\\<" w "\\("] = "\\fB" w "\\fP("
+ }
+ }
+ # word attributes
+ for (i in subwords)
+ gsub(i, subwords[i])
+ # shell options
+ gsub(/\B\-+\w+(\-\w+)*/, "\\fB&\\fP")
+ # unprotect dots inside words
+ gsub(/_dOt_/, ".")
+
+ if (section == "SYNOPSIS") {
+ sub(/^ /, "")
+ print
+ next
+ }
+ if (match($0, /[^ ] +/) > 0) {
+ # tag list item
+ adjust_indent()
+ tag = substr($0, 1, RSTART)
+ sub(/^ */, "", tag)
+ if (RSTART+RLENGTH < length())
+ $0 = substr($0, RSTART + RLENGTH)
+ else
+ $0 = ""
+ print ".TP\n.B"
+ print tag
+ prevblankline = 0
+ if (NF == 0)
+ next
+ } else if ($1 == "-"||$1 == "o"||$1 == "*") {
+ # bullet list item
+ adjust_indent()
+ print ".IP \\(bu 3"
+ prevblankline = 0
+ $1 = ""
+ } else if ($1 ~ /^[0-9]+[\).]$/) {
+ # enum list item
+ adjust_indent()
+ print ".IP " $1 " 4"
+ prevblankline = 0
+ $1 = ""
+ } else if (pls == 0) {
+ # new paragraph
+ adjust_indent()
+ } else if (NF == 0) {
+ # blank line
+ prevblankline = 1
+ next
+ } else
+ prevblankline = 0
+ # flush vertical space
+ if (prevblankline == 1) {
+ print ".PP"
+ prevblankline = 0
+ }
+ if (section != "SYNOPSIS" || $0 ~ /^ {1,4}/)
+ sub(/ */,"")
+ print
+}
+
+function adjust_indent()
+{
+ if (ls > ind[ni]) {
+ ind[++ni] = ls
+ print ".RS"
+ } else if (ls < ind[ni]) {
+ while (ls < ind[ni]) {
+ ni--
+ print ".RE"
+ }
+ }
+}
+' | eval $post
diff --git a/txt2man.1 b/txt2man.1
new file mode 100644
index 0000000..ac4b96d
--- /dev/null
+++ b/txt2man.1
@@ -0,0 +1,168 @@
+." Text automatically generated by txt2man
+.TH txt2man 1 "21 March 2007" "txt2man-1.5.5" ""
+.SH NAME
+\fBtxt2man \fP- convert flat ASCII text to man page format
+.SH SYNOPSIS
+.nf
+.fam C
+\fBtxt2man\fP [\fB-hpTX\fP] [\fB-t\fP \fImytitle\fP] [\fB-P\fP \fIpname\fP] [\fB-r\fP \fIrel\fP] [\fB-s\fP \fIsect\fP]
+ [\fB-v\fP \fIvol\fP] [\fB-I\fP \fItxt\fP] [\fB-B\fP \fItxt\fP] [\fB-d\fP \fIdate\fP] [\fIifile\fP]
+.fam T
+.fi
+.fam T
+.fi
+.SH DESCRIPTION
+\fBtxt2man\fP converts the input text into nroff/troff standard \fBman\fP(7)
+macros used to format Unix manual pages. Nice pages can be generated
+specially for commands (section 1 or 8) or for C functions reference
+(sections 2, 3), with the ability to recognize and format command and
+function names, flags, types and arguments.
+.PP
+\fBtxt2man\fP is also able to recognize and format sections, paragraphs,
+lists (standard, numbered, description, nested), cross references and
+literal display blocks.
+.PP
+If input file \fIifile\fP is omitted, standard input is used. Result is
+displayed on standard output.
+.PP
+Here is how text patterns are recognized and processed:
+.TP
+.B
+Sections
+These headers are defined by a line in upper case, starting
+column 1. If there is one or more leading spaces, a
+sub-section will be generated instead.
+.TP
+.B
+Paragraphs
+They must be separated by a blank line, and left aligned.
+.TP
+.B
+Tag list
+The item definition is separated from the item description
+by at least 2 blank spaces, even before a new line, if
+definition is too long. Definition will be emphasized
+by default.
+.TP
+.B
+Bullet list
+Bullet list items are defined by the first word being "-"
+or "*" or "o".
+.TP
+.B
+Enumerated list
+The first word must be a number followed by a dot.
+.TP
+.B
+Literal display blocks
+This paragraph type is used to display unmodified text,
+for example source code. It must be separated by a blank
+line, and be indented. It is primarily used to format
+unmodified source code. It will be printed using fixed font
+whenever possible (troff).
+.TP
+.B
+Cross references
+A cross reference (another man page) is defined by a word
+followed by a number in parenthesis.
+.PP
+Special sections:
+.TP
+.B
+NAME
+The function or command name and short description are set in
+this section.
+.TP
+.B
+SYNOPSIS
+This section receives a special treatment to identify command
+name, flags and arguments, and propagate corresponding
+attributes later in the text. If a C like function is recognized
+(word immediately followed by an open parenthesis), \fBtxt2man\fP will
+print function name in bold font, types in normal font, and
+variables in italic font. The whole section will be printed using
+a fixed font family (courier) whenever possible (troff).
+.PP
+It is a good practice to embed documentation into source code, by using
+comments or constant text variables. \fBtxt2man\fP allows to do that, keeping
+the document source readable, usable even without further formatting
+(i.e. for online help) and easy to write. The result is high quality
+and standard complying document.
+.SH OPTIONS
+.TP
+.B
+\fB-h\fP
+The option \fB-h\fP displays help.
+.TP
+.B
+\fB-d\fP \fIdate\fP
+Set \fIdate\fP in header. Defaults to current \fIdate\fP.
+.TP
+.B
+\fB-P\fP \fIpname\fP
+Set \fIpname\fP as project name in header. Default to uname \fB-s\fP.
+.TP
+.B
+\fB-p\fP
+Probe title, section name and volume.
+.TP
+.B
+\fB-t\fP \fImytitle\fP
+Set \fImytitle\fP as title of generated man page.
+.TP
+.B
+\fB-r\fP \fIrel\fP
+Set \fIrel\fP as project name and release.
+.TP
+.B
+\fB-s\fP \fIsect\fP
+Set \fIsect\fP as section in heading, ususally a value from 1 to 8.
+.TP
+.B
+\fB-v\fP \fIvol\fP
+Set \fIvol\fP as volume name, i.e. "Unix user 's manual".
+.TP
+.B
+\fB-I\fP \fItxt\fP
+Italicize \fItxt\fP in output. Can be specified more than once.
+.TP
+.B
+\fB-B\fP \fItxt\fP
+Emphasize (bold) \fItxt\fP in output. Can be specified more than once.
+.TP
+.B
+\fB-T\fP
+Text result previewing using PAGER, usually \fBmore\fP(1).
+.TP
+.B
+\fB-X\fP
+X11 result previewing using \fBgxditview\fP(1).
+.SH ENVIRONMENT
+.TP
+.B
+PAGER
+name of paging command, usually \fBmore\fP(1), or \fBless\fP(1). If not set
+falls back to \fBmore\fP(1).
+.SH EXAMPLE
+Try this command to format this text itself:
+.PP
+.nf
+.fam C
+ $ txt2man -h 2>&1 | txt2man -T
+.fam T
+.fi
+.SH HINTS
+To obtain an overall good formating of output document, keep paragraphs
+indented correctly. If you have unwanted bold sections, search for
+multiple spaces between words, which are used to identify a tag list
+(term followed by a description). Choose also carefully the name of
+command line or function parameters, as they will be emphasized each
+time they are encountered in the document.
+.SH SEE ALSO
+\fBman\fP(1), \fBmandoc\fP(7), \fBrman\fP(1), \fBgroff\fP(1), \fBmore\fP(1), \fBgxditview\fP(1), \fBtroff\fP(1).
+.SH BUGS
+.IP \(bu 3
+Automatic probe (\fB-p\fP option) works only if input is a regular file (i.e.
+not stdin).
+.SH AUTHOR
+Marc Vertes <mvertes at free.fr>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/txt2man.git
More information about the Reproducible-commits
mailing list