aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_macro.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-05-13 06:22:11 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-05-13 06:22:11 +0000
commitbbca9de4c44fc5e7d5aa68015495daccc2f69081 (patch)
treea958d78176c6f69c955bca59a0eed757293c2ef1 /mdoc_macro.c
parentfa29183f6542c3a65f105c7296ce435beb629a12 (diff)
downloadmandoc-bbca9de4c44fc5e7d5aa68015495daccc2f69081.tar.gz
mandoc-bbca9de4c44fc5e7d5aa68015495daccc2f69081.tar.zst
mandoc-bbca9de4c44fc5e7d5aa68015495daccc2f69081.zip
Fixed bug in -Thtml -mdoc where `Lb' would line-break in LIBRARY section.
Fixed assumption that parse-point == 1 equates to beginning of line (false if whitespace separates macro and control character). Fixed line-break for non-first-macro in several SYNOPSIS macros.
Diffstat (limited to 'mdoc_macro.c')
-rw-r--r--mdoc_macro.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/mdoc_macro.c b/mdoc_macro.c
index 77b5860a..9c11fc01 100644
--- a/mdoc_macro.c
+++ b/mdoc_macro.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_macro.c,v 1.59 2010/05/09 10:17:02 kristaps Exp $ */
+/* $Id: mdoc_macro.c,v 1.60 2010/05/13 06:22:11 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -653,11 +653,13 @@ append_delims(struct mdoc *mdoc, int line, int *pos, char *buf)
static int
blk_exp_close(MACRO_PROT_ARGS)
{
- int j, lastarg, maxargs, flushed;
+ int j, lastarg, maxargs, flushed, nl;
enum margserr ac;
enum mdoct ntok;
char *p;
+ nl = MDOC_NEWLINE & m->flags;
+
switch (tok) {
case (MDOC_Ec):
maxargs = 1;
@@ -723,7 +725,7 @@ blk_exp_close(MACRO_PROT_ARGS)
if ( ! flushed && ! rew_sub(MDOC_BLOCK, m, tok, line, ppos))
return(0);
- if (ppos > 1)
+ if ( ! nl)
return(1);
return(append_delims(m, line, pos, buf));
}
@@ -732,13 +734,15 @@ blk_exp_close(MACRO_PROT_ARGS)
static int
in_line(MACRO_PROT_ARGS)
{
- int la, lastpunct, cnt, d, nc;
+ int la, lastpunct, cnt, d, nc, nl;
enum margverr av;
enum mdoct ntok;
enum margserr ac;
struct mdoc_arg *arg;
char *p;
+ nl = MDOC_NEWLINE & m->flags;
+
/*
* Whether we allow ignored elements (those without content,
* usually because of reserved words) to squeak by.
@@ -815,7 +819,7 @@ in_line(MACRO_PROT_ARGS)
}
if ( ! mdoc_macro(m, ntok, line, la, pos, buf))
return(0);
- if (ppos > 1)
+ if ( ! nl)
return(1);
return(append_delims(m, line, pos, buf));
}
@@ -875,7 +879,7 @@ in_line(MACRO_PROT_ARGS)
return(0);
}
- if (ppos > 1)
+ if ( ! nl)
return(1);
return(append_delims(m, line, pos, buf));
}
@@ -1180,13 +1184,15 @@ blk_part_imp(MACRO_PROT_ARGS)
static int
blk_part_exp(MACRO_PROT_ARGS)
{
- int la;
+ int la, nl;
enum margserr ac;
struct mdoc_node *head; /* keep track of head */
struct mdoc_node *body; /* keep track of body */
char *p;
enum mdoct ntok;
+ nl = MDOC_NEWLINE & m->flags;
+
/*
* The opening of an explicit macro having zero or more leading
* punctuation nodes; a head with optional single element (the
@@ -1279,9 +1285,8 @@ blk_part_exp(MACRO_PROT_ARGS)
/* Standard appending of delimiters. */
- if (ppos > 1)
+ if ( ! nl)
return(1);
-
return(append_delims(m, line, pos, buf));
}
@@ -1289,13 +1294,15 @@ blk_part_exp(MACRO_PROT_ARGS)
static int
in_line_argn(MACRO_PROT_ARGS)
{
- int la, flushed, j, maxargs;
+ int la, flushed, j, maxargs, nl;
enum margserr ac;
enum margverr av;
struct mdoc_arg *arg;
char *p;
enum mdoct ntok;
+ nl = MDOC_NEWLINE & m->flags;
+
/*
* A line macro that has a fixed number of arguments (maxargs).
* Only open the scope once the first non-leading-punctuation is
@@ -1415,8 +1422,7 @@ in_line_argn(MACRO_PROT_ARGS)
if ( ! flushed && ! rew_elem(m, tok))
return(0);
-
- if (ppos > 1)
+ if ( ! nl)
return(1);
return(append_delims(m, line, pos, buf));
}
@@ -1492,13 +1498,16 @@ in_line_eoln(MACRO_PROT_ARGS)
static int
ctx_synopsis(MACRO_PROT_ARGS)
{
+ int nl;
+
+ nl = MDOC_NEWLINE & m->flags;
/* If we're not in the SYNOPSIS, go straight to in-line. */
if (SEC_SYNOPSIS != m->lastsec)
return(in_line(m, tok, line, ppos, pos, buf));
/* If we're a nested call, same place. */
- if (ppos > 1)
+ if ( ! nl)
return(in_line(m, tok, line, ppos, pos, buf));
/*