-.TH HP-SPACING 1 "November 20, 2014" OpenBSD
+.TH HP-SPACING 1 "December 23, 2014" OpenBSD
.SH NAME
HP-spacing \- spacing in hanged lists
.SH DESCRIPTION
Normal text.
.HP
-tag
-Indented text.
-.HP
-four
-Indented text.
-.HP
-ffive
-Indented text.
-.HP
-sixsix
-Indented text.
-.HP
-seseven
-Indented text.
-.HP
-a much longer tag
-Indented text.
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
+.HP -10n
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
+.HP -4n
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
+.HP 0n
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
+.HP 1n
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
+.HP 2n
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
+.HP 4n
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
+.HP 8n
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
+.HP 16n
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
.HP 78n
-Testing a hanged paragraph with a large indentation width,
-in this case 78n, requires more text.
+Each hanged paragraph gets a sufficient amount of text
+to wrap to the next line.
.LP
Normal text.
D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
Normal text.
- tag Indented text.
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+ next line.
- four Indented text.
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+next line.
- ffive Indented text.
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+ next line.
- sixsix Indented text.
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+ next line.
- seseven Indented text.
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+ next line.
- a much longer tag Indented text.
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+ next line.
- Testing a hanged paragraph with a large indentation width, in this case
- 78n,
- requires
- more
- text.
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+ next line.
+
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+ next line.
+
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+ next line.
+
+ Each hanged paragraph gets a sufficient amount of text to wrap to the
+ next
+ line.
Normal text.
-OpenBSD November 20, 2014 HP-SPACING(1)
+OpenBSD December 23, 2014 HP-SPACING(1)
IP-width \- indentation width of indented paragraphs
.SH DESCRIPTION
Regular mode:
+.IP tag -10n
+indented
+.br
+text
+.IP tag -4n
+indented
+.br
+text
+.IP tag 0n
+indented
+.br
+text
.IP tag 1n
indented
.br
.PP
Literal mode:
.nf
+.IP tag -10n
+indented
+text
+.IP tag -4n
+indented
+text
+.IP tag 0n
+indented
+text
.IP tag 1n
indented
text
D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
Regular mode:
+ tag
+indented
+text
+
+ tag
+ indented
+ text
+
+ tag
+ indented
+ text
+
tag
indented
text
Literal mode:
+ tag
+indented
+text
+
+ tag
+ indented
+ text
+
+ tag
+ indented
+ text
+
tag
indented
text
-.TH RS-WIDTH 1 "February 16, 2014" OpenBSD
+.TH RS-WIDTH 1 "December 23, 2014" OpenBSD
.SH NAME
-RS-width \- excessive indentation
+RS-width \- negative and excessive indentation
.SH DESCRIPTION
regular
text
+.RS -4n
+indented
+text
+.RE
+regular
+text
+.RS 4n
+indented
+text
+.RE
+regular
+text
.RS 100n
indented
text
N\bNA\bAM\bME\bE
- RS-width - excessive indentation
+ RS-width - negative and excessive indentation
D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+ regular text
+ indented text
+ regular text
+ indented text
regular text
indented
text
-OpenBSD February 16, 2014 RS-WIDTH(1)
+OpenBSD December 23, 2014 RS-WIDTH(1)
-.TH TP-WIDTH 1 "February 16, 2014" OpenBSD
+.TH TP-WIDTH 1 "December 23, 2014" OpenBSD
.SH NAME
TP-width \- indentation width of indented paragraphs
.SH DESCRIPTION
Regular mode:
+.TP -10n
+tag
+indented
+.br
+text
+.TP -4n
+tag
+indented
+.br
+text
+.TP 0n
+tag
+indented
+.br
+text
.TP 1n
tag
indented
.PP
Literal mode:
.nf
+.TP -10n
+tag
+indented
+text
+.TP -4n
+tag
+indented
+text
+.TP 0n
+tag
+indented
+text
.TP 1n
tag
indented
D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
Regular mode:
+ tag
+indented
+text
+
+ tag
+ indented
+ text
+
+ tag
+ indented
+ text
+
tag
indented
text
Literal mode:
+ tag
+indented
+text
+
+ tag
+ indented
+ text
+
+ tag
+ indented
+ text
+
tag
indented
text
-OpenBSD February 16, 2014 TP-WIDTH(1)
+OpenBSD December 23, 2014 TP-WIDTH(1)
79n
.in 1.5ix
1.5ix
+.in -6n
+-6n
.PP
final text
5m
79n
1.5ix
+ -6n
final text
-/* $OpenBSD: man_term.c,v 1.115 2014/12/23 09:31:17 schwarze Exp $ */
+/* $OpenBSD: man_term.c,v 1.116 2014/12/23 13:48:15 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
struct mtermp {
int fl;
#define MANT_LITERAL (1 << 0)
- size_t lmargin[MAXMARGINS]; /* margins (incl. visible page) */
+ int lmargin[MAXMARGINS]; /* margins (incl. vis. page) */
int lmargincur; /* index of current margin */
int lmarginsz; /* actual number of nested margins */
size_t offset; /* default offset to visible page */
#define MAN_NOTEXT (1 << 0) /* Never has text children. */
};
-static int a2width(const struct termp *, const char *);
-
static void print_man_nodelist(DECL_ARGS);
static void print_man_node(DECL_ARGS);
static void print_man_head(struct termp *, const void *);
}
}
-static int
-a2width(const struct termp *p, const char *cp)
-{
- struct roffsu su;
-
- if ( ! a2roffsu(cp, &su, SCALE_EN))
- return(-1);
-
- return((int)term_hspan(p, &su));
-}
-
/*
* Printing leading vertical space before a block.
* This is used for the paragraph macros.
static int
pre_in(DECL_ARGS)
{
- int len, less;
- size_t v;
+ struct roffsu su;
const char *cp;
+ size_t v;
+ int less;
term_newln(p);
else
cp--;
- if ((len = a2width(p, ++cp)) < 0)
+ if ( ! a2roffsu(++cp, &su, SCALE_EN))
return(0);
- v = (size_t)len;
+ v = term_hspan(p, &su);
if (less < 0)
p->offset -= p->offset > v ? v : p->offset;
pre_sp(DECL_ARGS)
{
struct roffsu su;
- char *s;
- size_t i, len;
- int neg;
+ int i, len;
if ((NULL == n->prev && n->parent)) {
switch (n->parent->tok) {
}
}
- neg = 0;
- switch (n->tok) {
- case MAN_br:
+ if (n->tok == MAN_br)
len = 0;
- break;
- default:
- if (NULL == n->child) {
- len = 1;
- break;
- }
- s = n->child->string;
- if ('-' == *s) {
- neg = 1;
- s++;
- }
- if ( ! a2roffsu(s, &su, SCALE_VS))
+ else if (n->child == NULL)
+ len = 1;
+ else {
+ if ( ! a2roffsu(n->child->string, &su, SCALE_VS))
su.scale = 1.0;
len = term_vspan(p, &su);
- break;
}
- if (0 == len)
+ if (len == 0)
term_newln(p);
- else if (neg)
- p->skipvsp += len;
+ else if (len < 0)
+ p->skipvsp -= len;
else
for (i = 0; i < len; i++)
term_vspace(p);
static int
pre_HP(DECL_ARGS)
{
- size_t len, one;
- int ival;
+ struct roffsu su;
const struct man_node *nn;
+ int len;
switch (n->type) {
case MAN_BLOCK:
p->trailspace = 2;
}
- len = mt->lmargin[mt->lmargincur];
- ival = -1;
-
/* Calculate offset. */
- if (NULL != (nn = n->parent->head->child))
- if ((ival = a2width(p, nn->string)) >= 0)
- len = (size_t)ival;
-
- one = term_len(p, 1);
- if (len < one)
- len = one;
+ if ((nn = n->parent->head->child) != NULL &&
+ a2roffsu(nn->string, &su, SCALE_EN)) {
+ len = term_hspan(p, &su);
+ mt->lmargin[mt->lmargincur] = len;
+ } else
+ len = mt->lmargin[mt->lmargincur];
p->offset = mt->offset;
- p->rmargin = mt->offset + len;
-
- if (ival >= 0)
- mt->lmargin[mt->lmargincur] = (size_t)ival;
+ if (len > 0 || (size_t)(-len) < mt->offset)
+ p->rmargin = mt->offset + len;
+ else
+ p->rmargin = 0;
return(1);
}
static int
pre_IP(DECL_ARGS)
{
+ struct roffsu su;
const struct man_node *nn;
- size_t len;
- int savelit, ival;
+ int len, savelit;
switch (n->type) {
case MAN_BODY:
return(1);
}
- len = mt->lmargin[mt->lmargincur];
- ival = -1;
-
/* Calculate the offset from the optional second argument. */
- if (NULL != (nn = n->parent->head->child))
- if (NULL != (nn = nn->next))
- if ((ival = a2width(p, nn->string)) >= 0)
- len = (size_t)ival;
+ if ((nn = n->parent->head->child) != NULL &&
+ (nn = nn->next) != NULL &&
+ a2roffsu(nn->string, &su, SCALE_EN)) {
+ len = term_hspan(p, &su);
+ mt->lmargin[mt->lmargincur] = len;
+ if (len < 0 && (size_t)(-len) > mt->offset)
+ len = -mt->offset;
+ } else
+ len = mt->lmargin[mt->lmargincur];
switch (n->type) {
case MAN_HEAD:
- /* Handle zero-width lengths. */
- if (0 == len)
- len = term_len(p, 1);
-
p->offset = mt->offset;
p->rmargin = mt->offset + len;
- /* Set the saved left-margin. */
- if (ival >= 0)
- mt->lmargin[mt->lmargincur] = (size_t)ival;
-
savelit = MANT_LITERAL & mt->fl;
mt->fl &= ~MANT_LITERAL;
static int
pre_TP(DECL_ARGS)
{
+ struct roffsu su;
const struct man_node *nn;
- size_t len;
- int savelit, ival;
+ int len, savelit;
switch (n->type) {
case MAN_HEAD:
return(1);
}
- len = (size_t)mt->lmargin[mt->lmargincur];
- ival = -1;
-
/* Calculate offset. */
- if (NULL != (nn = n->parent->head->child))
- if (nn->string && 0 == (MAN_LINE & nn->flags))
- if ((ival = a2width(p, nn->string)) >= 0)
- len = (size_t)ival;
+ if ((nn = n->parent->head->child) != NULL &&
+ nn->string != NULL && ! (MAN_LINE & nn->flags) &&
+ a2roffsu(nn->string, &su, SCALE_EN)) {
+ len = term_hspan(p, &su);
+ mt->lmargin[mt->lmargincur] = len;
+ if (len < 0 && (size_t)(-len) > mt->offset)
+ len = -mt->offset;
+ } else
+ len = mt->lmargin[mt->lmargincur];
switch (n->type) {
case MAN_HEAD:
- /* Handle zero-length properly. */
- if (0 == len)
- len = term_len(p, 1);
-
p->offset = mt->offset;
p->rmargin = mt->offset + len;
if (savelit)
mt->fl |= MANT_LITERAL;
- if (ival >= 0)
- mt->lmargin[mt->lmargincur] = (size_t)ival;
-
return(0);
case MAN_BODY:
p->offset = mt->offset + len;
static int
pre_RS(DECL_ARGS)
{
- int ival;
- size_t sz;
+ struct roffsu su;
+ int len;
switch (n->type) {
case MAN_BLOCK:
break;
}
- sz = term_len(p, p->defindent);
-
- if (NULL != (n = n->parent->head->child))
- if ((ival = a2width(p, n->string)) >= 0)
- sz = (size_t)ival;
+ if ((n = n->parent->head->child) != NULL &&
+ a2roffsu(n->string, &su, SCALE_EN))
+ len = term_hspan(p, &su);
+ else
+ len = term_len(p, p->defindent);
- mt->offset += sz;
+ if (len > 0 || (size_t)(-len) < mt->offset)
+ mt->offset += len;
+ else
+ mt->offset = 0;
p->offset = mt->offset;
p->rmargin = p->maxrmargin;
static void
post_RS(DECL_ARGS)
{
- int ival;
- size_t sz;
+ struct roffsu su;
+ int len;
switch (n->type) {
case MAN_BLOCK:
break;
}
- sz = term_len(p, p->defindent);
-
- if (NULL != (n = n->parent->head->child))
- if ((ival = a2width(p, n->string)) >= 0)
- sz = (size_t)ival;
+ if ((n = n->parent->head->child) != NULL &&
+ a2roffsu(n->string, &su, SCALE_EN))
+ len = term_hspan(p, &su);
+ else
+ len = term_len(p, p->defindent);
- mt->offset = mt->offset < sz ? 0 : mt->offset - sz;
+ if (len < 0 || (size_t)len < mt->offset)
+ mt->offset -= len;
+ else
+ mt->offset = 0;
p->offset = mt->offset;
if (--mt->lmarginsz < MAXMARGINS)
-/* $OpenBSD: mdoc_html.c,v 1.92 2014/12/23 09:31:17 schwarze Exp $ */
+/* $OpenBSD: mdoc_html.c,v 1.93 2014/12/23 13:48:15 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
if (a2roffsu(p, su, SCALE_MAX) < 2) {
su->unit = SCALE_EN;
su->scale = html_strlen(p);
- }
+ } else if (su->scale < 0.0)
+ su->scale = 0.0;
}
/*
SCALE_VS_INIT(&su, 1);
if (MDOC_sp == n->tok) {
- if (NULL != (n = n->child))
+ if (NULL != (n = n->child)) {
if ( ! a2roffsu(n->string, &su, SCALE_VS))
su.scale = 1.0;
+ else if (su.scale < 0.0)
+ su.scale = 0.0;
+ }
} else
su.scale = 0.0;
-/* $OpenBSD: mdoc_man.c,v 1.77 2014/12/23 10:09:23 schwarze Exp $ */
+/* $OpenBSD: mdoc_man.c,v 1.78 2014/12/23 13:48:15 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
*
else if (keywords && !strcmp(v, "indent-two"))
sz = 12;
else if (a2roffsu(v, &su, SCALE_EN) > 1) {
+ if (su.scale < 0.0)
+ su.scale = 0.0;
if (SCALE_EN == su.unit)
sz = su.scale;
else {
if (NULL == v)
sz = defsz;
else if (a2roffsu(v, &su, SCALE_MAX) > 1) {
+ if (su.scale < 0.0)
+ su.scale = 0.0;
if (SCALE_EN == su.unit)
sz = su.scale;
else {
-/* $OpenBSD: mdoc_term.c,v 1.199 2014/12/23 09:31:17 schwarze Exp $ */
+/* $OpenBSD: mdoc_term.c,v 1.200 2014/12/23 13:48:15 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
if (a2roffsu(v, &su, SCALE_MAX) < 2) {
SCALE_HS_INIT(&su, term_strlen(p, v));
su.scale /= term_strlen(p, "0");
- }
+ } else if (su.scale < 0.0)
+ su.scale = 0.0;
return(term_hspan(p, &su));
}
-/* $OpenBSD: out.c,v 1.28 2014/12/23 09:31:17 schwarze Exp $ */
+/* $OpenBSD: out.c,v 1.29 2014/12/23 13:48:15 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2014 Ingo Schwarze <schwarze@openbsd.org>
break;
}
- /* FIXME: do this in the caller. */
- if (dst->scale < 0.0)
- dst->scale = 0.0;
return(*endptr == '\0' ? 2 : 1);
}
-/* $OpenBSD: term.c,v 1.99 2014/12/23 06:16:21 schwarze Exp $ */
+/* $OpenBSD: term.c,v 1.100 2014/12/23 13:48:15 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
size_t j; /* temporary loop index for p->buf */
size_t jhy; /* last hyph before overflow w/r/t j */
size_t maxvis; /* output position of visible boundary */
- size_t rmargin; /* the rightmost of the two margins */
/*
* First, establish the maximum columns of "visible" content.
* is negative, it gets sign extended. Subtracting that
* very large size_t effectively adds a small number to dv.
*/
- rmargin = p->rmargin > p->offset ? p->rmargin : p->offset;
- dv = p->rmargin - p->offset;
+ dv = p->rmargin > p->offset ? p->rmargin - p->offset : 0;
maxvis = (int)dv > p->overstep ? dv - (size_t)p->overstep : 0;
if (p->flags & TERMP_NOBREAK) {
(*p->endline)(p);
p->viscol = 0;
if (TERMP_BRIND & p->flags) {
- vbl = rmargin;
- vend += rmargin - p->offset;
+ vbl = p->rmargin;
+ vend += p->rmargin;
+ vend -= p->offset;
} else
vbl = p->offset;
return(sz);
}
-size_t
+int
term_vspan(const struct termp *p, const struct roffsu *su)
{
double r;
abort();
/* NOTREACHED */
}
-
- if (r < 0.0)
- r = 0.0;
- return((size_t)(r + 0.4995));
+ return(r > 0.0 ? r + 0.4995 : r - 0.4995);
}
-size_t
+int
term_hspan(const struct termp *p, const struct roffsu *su)
{
double v;
v = (*p->hspan)(p, su);
- if (v < 0.0)
- v = 0.0;
- return((size_t)(v + 0.0005));
+ return(v > 0.0 ? v + 0.0005 : v - 0.0005);
}
-/* $OpenBSD: term.h,v 1.53 2014/12/19 17:10:42 schwarze Exp $ */
+/* $OpenBSD: term.h,v 1.54 2014/12/23 13:48:15 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
void term_end(struct termp *);
void term_setwidth(struct termp *, const char *);
-size_t term_hspan(const struct termp *,
- const struct roffsu *);
-size_t term_vspan(const struct termp *,
- const struct roffsu *);
+int term_hspan(const struct termp *, const struct roffsu *);
+int term_vspan(const struct termp *, const struct roffsu *);
size_t term_strlen(const struct termp *, const char *);
size_t term_len(const struct termp *, size_t);