* mdocml: Implement mdoc(7)-like output style variant for man(7)
@ 2011-12-04 23:10 schwarze
0 siblings, 0 replies; only message in thread
From: schwarze @ 2011-12-04 23:10 UTC (permalink / raw)
To: source
Log Message:
-----------
Implement mdoc(7)-like output style variant for man(7) documents:
* one instead of three blank lines after the page header;
* one instead of three blank lines before the page footer;
* source instead of title(section) in the lower right corner.
Select this style variant with the undocumented command line option -Omdoc.
In the long run, we hope to unify the ouput of both languages and
to pull this out again, but that requires coordination with groff.
Grudgingly ok and, (as usual,-) more comments requested by kristaps@
Modified Files:
--------------
mdocml:
man_term.c
term.h
term_ascii.c
Revision Data
-------------
Index: term.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term.h,v
retrieving revision 1.89
retrieving revision 1.90
diff -Lterm.h -Lterm.h -u -p -r1.89 -r1.90
--- term.h
+++ term.h
@@ -52,6 +52,7 @@ struct termp_tbl {
struct termp {
enum termtype type;
struct rofftbl tbl; /* table configuration */
+ int mdocstyle; /* imitate mdoc(7) output */
size_t defindent; /* Default indent for text. */
size_t defrmargin; /* Right margin of the device. */
size_t rmargin; /* Current right margin. */
Index: man_term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_term.c,v
retrieving revision 1.125
retrieving revision 1.126
diff -Lman_term.c -Lman_term.c -u -p -r1.125 -r1.126
--- man_term.c
+++ man_term.c
@@ -970,11 +970,26 @@ print_man_foot(struct termp *p, const vo
term_fontrepl(p, TERMFONT_NONE);
term_vspace(p);
- term_vspace(p);
- term_vspace(p);
- snprintf(title, BUFSIZ, "%s(%s)", meta->title, meta->msec);
+
+ /*
+ * Temporary, undocumented option to imitate mdoc(7) output.
+ * In the bottom right corner, use the source instead of
+ * the title.
+ */
+
+ if ( ! p->mdocstyle) {
+ term_vspace(p);
+ term_vspace(p);
+ snprintf(title, BUFSIZ, "%s(%s)", meta->title, meta->msec);
+ } else if (meta->source) {
+ strlcpy(title, meta->source, BUFSIZ);
+ } else {
+ title[0] = '\0';
+ }
datelen = term_strlen(p, meta->date);
+ /* Bottom left corner: manual source. */
+
p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;
p->offset = 0;
p->rmargin = (p->maxrmargin - datelen + term_len(p, 1)) / 2;
@@ -983,6 +998,8 @@ print_man_foot(struct termp *p, const vo
term_word(p, meta->source);
term_flushln(p);
+ /* At the bottom in the middle: manual date. */
+
p->flags |= TERMP_NOSPACE;
p->offset = p->rmargin;
p->rmargin = p->maxrmargin - term_strlen(p, title);
@@ -992,6 +1009,8 @@ print_man_foot(struct termp *p, const vo
term_word(p, meta->date);
term_flushln(p);
+ /* Bottom right corner: manual title and section. */
+
p->flags &= ~TERMP_NOBREAK;
p->flags |= TERMP_NOSPACE;
p->offset = p->rmargin;
@@ -1013,21 +1032,14 @@ print_man_head(struct termp *p, const vo
assert(m->title);
assert(m->msec);
- /*
- * Note that old groff would spit out some spaces before the
- * header. We discontinue this strange behaviour, but at one
- * point we did so here.
- */
-
- p->offset = 0;
- p->rmargin = p->maxrmargin;
-
- buf[0] = title[0] = '\0';
-
if (m->vol)
strlcpy(buf, m->vol, BUFSIZ);
+ else
+ buf[0] = '\0';
buflen = term_strlen(p, buf);
+ /* Top left corner: manual title and section. */
+
snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec);
titlen = term_strlen(p, title);
@@ -1041,6 +1053,8 @@ print_man_head(struct termp *p, const vo
term_word(p, title);
term_flushln(p);
+ /* At the top in the middle: manual volume. */
+
p->flags |= TERMP_NOSPACE;
p->offset = p->rmargin;
p->rmargin = p->offset + buflen + titlen < p->maxrmargin ?
@@ -1049,6 +1063,8 @@ print_man_head(struct termp *p, const vo
term_word(p, buf);
term_flushln(p);
+ /* Top right corner: title and section, again. */
+
p->flags &= ~TERMP_NOBREAK;
if (p->rmargin + titlen <= p->maxrmargin) {
p->flags |= TERMP_NOSPACE;
@@ -1063,11 +1079,14 @@ print_man_head(struct termp *p, const vo
p->rmargin = p->maxrmargin;
/*
- * Groff likes to have some leading spaces before content. Well
- * that's fine by me.
+ * Groff prints three blank lines before the content.
+ * Do the same, except in the temporary, undocumented
+ * mode imitating mdoc(7) output.
*/
term_vspace(p);
- term_vspace(p);
- term_vspace(p);
+ if ( ! p->mdocstyle) {
+ term_vspace(p);
+ term_vspace(p);
+ }
}
Index: term_ascii.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/term_ascii.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -Lterm_ascii.c -Lterm_ascii.c -u -p -r1.19 -r1.20
--- term_ascii.c
+++ term_ascii.c
@@ -68,7 +68,7 @@ static size_t locale_width(const stru
static struct termp *
ascii_init(enum termenc enc, char *outopts)
{
- const char *toks[3];
+ const char *toks[4];
char *v;
struct termp *p;
@@ -106,7 +106,8 @@ ascii_init(enum termenc enc, char *outop
toks[0] = "indent";
toks[1] = "width";
- toks[2] = NULL;
+ toks[2] = "mdoc";
+ toks[3] = NULL;
while (outopts && *outopts)
switch (getsubopt(&outopts, UNCONST(toks), &v)) {
@@ -115,6 +116,14 @@ ascii_init(enum termenc enc, char *outop
break;
case (1):
p->defrmargin = (size_t)atoi(v);
+ break;
+ case (2):
+ /*
+ * Temporary, undocumented mode
+ * to imitate mdoc(7) output style.
+ */
+ p->mdocstyle = 1;
+ p->defindent = 5;
break;
default:
break;
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2011-12-04 23:10 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-12-04 23:10 mdocml: Implement mdoc(7)-like output style variant for man(7) schwarze
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).