[prev in list] [next in list] [prev in thread] [next in thread]
List: mandoc-source
Subject: mdocml: In -Tman mode, support automatic word keeps in the SYNOPSIS just
From: schwarze () mdocml ! bsd ! lv
Date: 2012-11-19 2:14:45
Message-ID: 201211190214.qAJ2Ejp7008953 () krisdoz ! my ! domain
[Download RAW message or body]
Log Message:
-----------
In -Tman mode, support automatic word keeps in the SYNOPSIS
just like in -Tascii mode; requested by millert@.
While here, do not escape the blank characters terminating man(7)
macros; this is becoming more important as we use more keeps now.
Note that -Tman still does not support .nr nS.
Modified Files:
--------------
mdocml:
mdoc_man.c
Revision Data
-------------
Index: mdoc_man.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_man.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -Lmdoc_man.c -Lmdoc_man.c -u -p -r1.45 -r1.46
--- mdoc_man.c
+++ mdoc_man.c
@@ -251,9 +251,10 @@ static int outflags;
#define MMAN_PP (1 << 5) /* reset indentation etc. */
#define MMAN_Sm (1 << 6) /* horizontal spacing mode */
#define MMAN_Bk (1 << 7) /* word keep mode */
-#define MMAN_An_split (1 << 8) /* author mode is "split" */
-#define MMAN_An_nosplit (1 << 9) /* author mode is "nosplit" */
-#define MMAN_PD (1 << 10) /* inter-paragraph spacing disabled */
+#define MMAN_Bk_susp (1 << 8) /* suspend this (after a macro) */
+#define MMAN_An_split (1 << 9) /* author mode is "split" */
+#define MMAN_An_nosplit (1 << 10) /* author mode is "nosplit" */
+#define MMAN_PD (1 << 11) /* inter-paragraph spacing disabled */
#define BL_STACK_MAX 32
@@ -334,7 +335,8 @@ print_word(const char *s)
*/
if (MMAN_spc_force & outflags || '\0' == s[0] ||
NULL == strchr(".,:;)]?!", s[0]) || '\0' != s[1]) {
- if (MMAN_Bk & outflags)
+ if (MMAN_Bk & outflags &&
+ ! (MMAN_Bk_susp & outflags))
putchar('\\');
putchar(' ');
if (TPremain)
@@ -351,7 +353,7 @@ print_word(const char *s)
outflags |= MMAN_spc;
else
outflags &= ~MMAN_spc;
- outflags &= ~MMAN_spc_force;
+ outflags &= ~(MMAN_spc_force | MMAN_Bk_susp);
for ( ; *s; s++) {
switch (*s) {
@@ -391,13 +393,11 @@ print_block(const char *s, int newflags)
print_line(".PD", 0);
outflags &= ~MMAN_PD;
}
- } else if (! (MMAN_PD & outflags)) {
- print_line(".PD 0", 0);
- outflags |= MMAN_PD;
- }
+ } else if (! (MMAN_PD & outflags))
+ print_line(".PD 0", MMAN_PD);
outflags |= MMAN_nl;
print_word(s);
- outflags |= newflags;
+ outflags |= MMAN_Bk_susp | newflags;
}
static void
@@ -475,7 +475,7 @@ print_width(const char *v, const struct
* preserve its indentation.
*/
if (Bl_stack_len && Bl_stack[Bl_stack_len - 1]) {
- print_line(".RS", 0);
+ print_line(".RS", MMAN_Bk_susp);
snprintf(buf, sizeof(buf), "%ldn",
Bl_stack[Bl_stack_len - 1]);
print_word(buf);
@@ -556,7 +556,7 @@ print_node(DECL_ARGS)
const struct mdoc_node *prev, *sub;
const struct manact *act;
int cond, do_sub;
-
+
/*
* Break the line if we were parsed subsequent the current node.
* This makes the page structure be more consistent.
@@ -706,13 +706,25 @@ static int
pre_sect(DECL_ARGS)
{
- if (MDOC_HEAD != n->type)
- return(1);
- outflags |= MMAN_sp;
- print_block(manacts[n->tok].prefix, 0);
- print_word("");
- putchar('\"');
- outflags &= ~MMAN_spc;
+ switch (n->type) {
+ case (MDOC_HEAD):
+ outflags |= MMAN_sp;
+ print_block(manacts[n->tok].prefix, 0);
+ print_word("");
+ putchar('\"');
+ outflags &= ~MMAN_spc;
+ break;
+ case (MDOC_BODY):
+ if (MDOC_Sh == n->tok) {
+ if (MDOC_SYNPRETTY & n->flags)
+ outflags |= MMAN_Bk;
+ else
+ outflags &= ~MMAN_Bk;
+ }
+ break;
+ default:
+ break;
+ }
return(1);
}
@@ -817,7 +829,7 @@ pre_bd(DECL_ARGS)
print_line(".nf", 0);
if (0 == n->norm->Bd.comp && NULL != n->parent->prev)
outflags |= MMAN_sp;
- print_line(".RS", 0);
+ print_line(".RS", MMAN_Bk_susp);
print_offs(n->norm->Bd.offs);
outflags |= MMAN_nl;
return(1);
@@ -841,7 +853,7 @@ post_bd(DECL_ARGS)
*/
if (NULL != n->parent->next &&
Bl_stack_len && Bl_stack[Bl_stack_len - 1]) {
- print_line(".RS", 0);
+ print_line(".RS", MMAN_Bk_susp);
snprintf(buf, sizeof(buf), "%ldn",
Bl_stack[Bl_stack_len - 1]);
print_word(buf);
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic