version 1.46, 2009/07/19 08:18:28 |
version 1.51, 2009/07/21 13:34:13 |
|
|
#include "mdoc.h" |
#include "mdoc.h" |
|
|
/* FIXME: macro arguments can be escaped. */ |
/* FIXME: macro arguments can be escaped. */ |
/* FIXME: support more offset/width tokens. */ |
|
|
|
#define TTYPE_PROG 0 |
#define TTYPE_PROG 0 |
#define TTYPE_CMD_FLAG 1 |
#define TTYPE_CMD_FLAG 1 |
Line 672 fmt_block_vspace(struct termp *p, |
|
Line 671 fmt_block_vspace(struct termp *p, |
|
|
|
if (arg_hasattr(MDOC_Compact, bl)) |
if (arg_hasattr(MDOC_Compact, bl)) |
return(1); |
return(1); |
|
/* XXX - not documented! */ |
|
else if (arg_hasattr(MDOC_Column, bl)) |
|
return(1); |
|
|
for (n = node; n; n = n->parent) { |
for (n = node; n; n = n->parent) { |
if (MDOC_BLOCK != n->type) |
if (MDOC_BLOCK != n->type) |
Line 795 termp_it_pre(DECL_ARGS) |
|
Line 797 termp_it_pre(DECL_ARGS) |
|
if (0 == width) |
if (0 == width) |
width = 8; |
width = 8; |
break; |
break; |
|
case (MDOC_Column): |
|
/* FALLTHROUGH */ |
case (MDOC_Tag): |
case (MDOC_Tag): |
if (0 == width) |
if (0 == width) |
width = 10; |
width = 10; |
Line 808 termp_it_pre(DECL_ARGS) |
|
Line 812 termp_it_pre(DECL_ARGS) |
|
* while diagonal bodies need two. |
* while diagonal bodies need two. |
*/ |
*/ |
|
|
|
p->flags |= TERMP_NOSPACE; |
|
|
switch (type) { |
switch (type) { |
|
case (MDOC_Diag): |
|
term_word(p, "\\ \\ "); |
|
break; |
case (MDOC_Inset): |
case (MDOC_Inset): |
if (MDOC_BODY == node->type) |
if (MDOC_BODY == node->type) |
p->flags &= ~TERMP_NOSPACE; |
term_word(p, "\\ "); |
else |
|
p->flags |= TERMP_NOSPACE; |
|
break; |
break; |
default: |
default: |
p->flags |= TERMP_NOSPACE; |
|
break; |
break; |
} |
} |
|
|
|
p->flags |= TERMP_NOSPACE; |
|
|
/* |
/* |
* Style flags. Diagnostic heads need TTYPE_DIAG. |
* Style flags. Diagnostic heads need TTYPE_DIAG. |
*/ |
*/ |
Line 865 termp_it_pre(DECL_ARGS) |
|
Line 873 termp_it_pre(DECL_ARGS) |
|
break; |
break; |
case (MDOC_Tag): |
case (MDOC_Tag): |
if (MDOC_HEAD == node->type) |
if (MDOC_HEAD == node->type) |
p->flags |= TERMP_NOBREAK; |
p->flags |= TERMP_NOBREAK | TERMP_TWOSPACE; |
else |
else |
p->flags |= TERMP_NOLPAD; |
p->flags |= TERMP_NOLPAD; |
|
|
Line 913 termp_it_pre(DECL_ARGS) |
|
Line 921 termp_it_pre(DECL_ARGS) |
|
case (MDOC_Hang): |
case (MDOC_Hang): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Tag): |
case (MDOC_Tag): |
|
assert(width); |
if (MDOC_HEAD == node->type) |
if (MDOC_HEAD == node->type) |
p->rmargin = p->offset + width; |
p->rmargin = p->offset + width; |
else |
else |
p->offset += width; |
p->offset += width; |
break; |
break; |
case (MDOC_Column): |
case (MDOC_Column): |
|
assert(width); |
p->rmargin = p->offset + width; |
p->rmargin = p->offset + width; |
|
/* |
|
* XXX - this behaviour is not documented: the |
|
* right-most column is filled to the right margin. |
|
*/ |
|
if (MDOC_HEAD == node->type && |
|
MDOC_BODY == node->next->type) |
|
p->rmargin = p->maxrmargin; |
break; |
break; |
default: |
default: |
break; |
break; |
Line 996 termp_it_post(DECL_ARGS) |
|
Line 1013 termp_it_post(DECL_ARGS) |
|
assert(-1 != type); |
assert(-1 != type); |
|
|
switch (type) { |
switch (type) { |
case (MDOC_Diag): |
|
term_word(p, "\\ "); |
|
/* FALLTHROUGH */ |
|
case (MDOC_Item): |
case (MDOC_Item): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Inset): |
case (MDOC_Inset): |
Line 1569 termp_bd_pre(DECL_ARGS) |
|
Line 1583 termp_bd_pre(DECL_ARGS) |
|
* Ew. |
* Ew. |
*/ |
*/ |
|
|
p->flags |= TERMP_LITERAL; |
|
ln = node->child ? node->child->line : 0; |
ln = node->child ? node->child->line : 0; |
|
|
for (node = node->child; node; node = node->next) { |
for (node = node->child; node; node = node->next) { |
Line 1592 termp_bd_post(DECL_ARGS) |
|
Line 1605 termp_bd_post(DECL_ARGS) |
|
|
|
if (MDOC_BODY != node->type) |
if (MDOC_BODY != node->type) |
return; |
return; |
|
|
term_flushln(p); |
term_flushln(p); |
p->flags &= ~TERMP_LITERAL; |
|
p->flags |= TERMP_NOSPACE; |
|
} |
} |
|
|
|
|