version 1.20, 2009/02/25 13:30:53 |
version 1.21, 2009/02/25 15:12:26 |
|
|
*/ |
*/ |
|
|
/* FIXME: indent/tab. */ |
/* FIXME: indent/tab. */ |
/* FIXME: handle nested lists. */ |
/* FIXME: macro arguments can be escaped. */ |
|
|
#define TTYPE_PROG 0 |
#define TTYPE_PROG 0 |
#define TTYPE_CMD_FLAG 1 |
#define TTYPE_CMD_FLAG 1 |
Line 348 termp_it_pre(DECL_ARGS) |
|
Line 348 termp_it_pre(DECL_ARGS) |
|
{ |
{ |
const struct mdoc_node *n, *it; |
const struct mdoc_node *n, *it; |
const struct mdoc_block *bl; |
const struct mdoc_block *bl; |
|
char buf[7]; |
int i; |
int i; |
size_t width, offset; |
size_t width, offset; |
|
|
Line 364 termp_it_pre(DECL_ARGS) |
|
Line 365 termp_it_pre(DECL_ARGS) |
|
return(1); |
return(1); |
} |
} |
|
|
assert(MDOC_BLOCK == it->type); |
n = it->parent->parent; |
assert(MDOC_It == it->tok); |
|
|
|
n = it->parent; |
|
assert(MDOC_BODY == n->type); |
|
assert(MDOC_Bl == n->tok); |
|
n = n->parent; |
|
bl = &n->data.block; |
bl = &n->data.block; |
|
|
/* If `-compact', don't assert vertical space. */ |
|
|
|
if (MDOC_BLOCK == node->type) { |
if (MDOC_BLOCK == node->type) { |
if (arg_hasattr(MDOC_Compact, bl->argc, bl->argv)) |
if (arg_hasattr(MDOC_Compact, bl->argc, bl->argv)) |
newln(p); |
newln(p); |
Line 398 termp_it_pre(DECL_ARGS) |
|
Line 391 termp_it_pre(DECL_ARGS) |
|
|
|
if (arg_hasattr(MDOC_Tag, bl->argc, bl->argv)) { |
if (arg_hasattr(MDOC_Tag, bl->argc, bl->argv)) { |
p->flags |= TERMP_NOSPACE; |
p->flags |= TERMP_NOSPACE; |
|
if (MDOC_BODY == node->type) { |
if (MDOC_HEAD == node->type) { |
|
p->flags |= TERMP_NOBREAK; |
|
p->offset += offset; |
|
p->rmargin = p->offset + width; |
|
} else { |
|
p->flags |= TERMP_NOLPAD; |
p->flags |= TERMP_NOLPAD; |
p->offset += width; |
p->offset += width; |
|
} else { |
|
p->flags |= TERMP_NOBREAK; |
|
p->rmargin = p->offset + offset + width; |
} |
} |
|
|
} else if (arg_hasattr(MDOC_Ohang, bl->argc, bl->argv)) { |
} else if (arg_hasattr(MDOC_Ohang, bl->argc, bl->argv)) { |
p->flags |= TERMP_NOSPACE; |
p->flags |= TERMP_NOSPACE; |
p->offset += offset; |
|
} |
|
|
|
|
} else if (arg_hasattr(MDOC_Diag, bl->argc, bl->argv)) { |
|
/* TODO. */ |
|
|
|
} else if (arg_hasattr(MDOC_Hang, bl->argc, bl->argv)) { |
|
/* TODO. */ |
|
|
|
} else if (arg_hasattr(MDOC_Bullet, bl->argc, bl->argv)) { |
|
p->flags |= TERMP_NOSPACE; |
|
if (MDOC_BODY == node->type) { |
|
p->flags |= TERMP_NOLPAD; |
|
p->offset += 6; |
|
} else { |
|
word(p, "\\[bu]"); |
|
p->flags |= TERMP_NOBREAK; |
|
p->rmargin = p->offset + offset + 6; |
|
} |
|
|
|
} else if (arg_hasattr(MDOC_Enum, bl->argc, bl->argv)) { |
|
p->flags |= TERMP_NOSPACE; |
|
if (MDOC_BODY == node->type) { |
|
p->flags |= TERMP_NOLPAD; |
|
p->offset += 6; |
|
} else { |
|
(pair->ppair->ppair->count)++; |
|
(void)snprintf(buf, sizeof(buf), "%d.", |
|
pair->ppair->ppair->count); |
|
word(p, buf); |
|
p->flags |= TERMP_NOBREAK; |
|
p->rmargin = p->offset + offset + 6; |
|
} |
|
|
|
} else if (arg_hasattr(MDOC_Dash, bl->argc, bl->argv) || |
|
arg_hasattr(MDOC_Hyphen, bl->argc, bl->argv)) { |
|
p->flags |= TERMP_NOSPACE; |
|
if (MDOC_BODY == node->type) { |
|
p->flags |= TERMP_NOLPAD; |
|
p->offset += 6; |
|
return(1); |
|
} else { |
|
word(p, "\\-"); |
|
p->flags |= TERMP_NOBREAK; |
|
p->rmargin = p->offset + offset + 6; |
|
} |
|
} |
|
|
|
p->offset += offset; |
return(1); |
return(1); |
} |
} |
|
|
Line 424 termp_it_post(DECL_ARGS) |
|
Line 459 termp_it_post(DECL_ARGS) |
|
const struct mdoc_node *n, *it; |
const struct mdoc_node *n, *it; |
const struct mdoc_block *bl; |
const struct mdoc_block *bl; |
|
|
switch (node->type) { |
if (MDOC_BODY != node->type && MDOC_HEAD != node->type) |
case (MDOC_BODY): |
|
/* FALLTHROUGH */ |
|
case (MDOC_HEAD): |
|
break; |
|
default: |
|
return; |
return; |
} |
|
|
|
it = node->parent; |
it = node->parent; |
assert(MDOC_BLOCK == it->type); |
n = it->parent->parent; |
assert(MDOC_It == it->tok); |
|
|
|
n = it->parent; |
|
assert(MDOC_BODY == n->type); |
|
assert(MDOC_Bl == n->tok); |
|
n = n->parent; |
|
bl = &n->data.block; |
bl = &n->data.block; |
|
|
/* If `-tag', adjust our margins accordingly. */ |
if (arg_hasattr(MDOC_Tag, bl->argc, bl->argv) || |
|
arg_hasattr(MDOC_Bullet, bl->argc, bl->argv) || |
if (arg_hasattr(MDOC_Tag, bl->argc, bl->argv)) { |
arg_hasattr(MDOC_Dash, bl->argc, bl->argv) || |
|
arg_hasattr(MDOC_Enum, bl->argc, bl->argv) || |
|
arg_hasattr(MDOC_Hyphen, bl->argc, bl->argv)) { |
flushln(p); |
flushln(p); |
|
|
if (MDOC_HEAD == node->type) { |
if (MDOC_HEAD == node->type) { |
p->rmargin = pair->rmargin; |
p->rmargin = pair->rmargin; |
p->offset = pair->offset; |
|
p->flags &= ~TERMP_NOBREAK; |
p->flags &= ~TERMP_NOBREAK; |
} else { |
} else |
p->offset = pair->offset; |
|
p->flags &= ~TERMP_NOLPAD; |
p->flags &= ~TERMP_NOLPAD; |
} |
|
|
|
} else if (arg_hasattr(MDOC_Ohang, bl->argc, bl->argv)) { |
} else if (arg_hasattr(MDOC_Ohang, bl->argc, bl->argv)) { |
flushln(p); |
flushln(p); |
p->offset = pair->offset; |
|
|
} else if (arg_hasattr(MDOC_Inset, bl->argc, bl->argv)) { |
|
if (MDOC_BODY == node->type) |
|
flushln(p); |
|
|
|
} else if (arg_hasattr(MDOC_Item, bl->argc, bl->argv)) { |
|
if (MDOC_BODY == node->type) |
|
flushln(p); |
} |
} |
|
|
|
p->offset = pair->offset; |
} |
} |
|
|
|
|