version 1.2, 2008/12/03 19:21:58 |
version 1.7, 2008/12/04 19:31:57 |
|
|
|
|
static void mlg_roffmsg(void *arg, enum roffmsg, |
static void mlg_roffmsg(void *arg, enum roffmsg, |
const char *, const char *, char *); |
const char *, const char *, char *); |
static int mlg_roffhead(void *); |
static int mlg_roffhead(void *, const struct tm *, |
|
const char *, const char *, |
|
const char *, const char *); |
static int mlg_rofftail(void *); |
static int mlg_rofftail(void *); |
static int mlg_roffin(void *, int, int *, char **); |
static int mlg_roffin(void *, int, int *, char **); |
static int mlg_roffdata(void *, int, char *); |
static int mlg_roffdata(void *, int, |
|
const char *, char *); |
static int mlg_roffout(void *, int); |
static int mlg_roffout(void *, int); |
static int mlg_roffblkin(void *, int, int *, char **); |
static int mlg_roffblkin(void *, int, int *, char **); |
static int mlg_roffblkout(void *, int); |
static int mlg_roffblkout(void *, int); |
static int mlg_roffspecial(void *, int, int *, |
static int mlg_roffspecial(void *, int, int *, |
char **, char **); |
char **, char **); |
static int mlg_roffblkheadin(void *, int, int *, char **); |
static int mlg_roffblkheadin(void *, int, |
|
int *, char **); |
static int mlg_roffblkheadout(void *, int); |
static int mlg_roffblkheadout(void *, int); |
static int mlg_roffblkbodyin(void *, int, int *, char **); |
static int mlg_roffblkbodyin(void *, int, |
|
int *, char **); |
static int mlg_roffblkbodyout(void *, int); |
static int mlg_roffblkbodyout(void *, int); |
|
|
static int mlg_beginblk(struct md_mlg *, enum md_ns, int, |
static int mlg_beginblk(struct md_mlg *, enum md_ns, int, |
Line 86 static int mlg_endtag(struct md_mlg *, enum md_ns, i |
|
Line 91 static int mlg_endtag(struct md_mlg *, enum md_ns, i |
|
static int mlg_indent(struct md_mlg *); |
static int mlg_indent(struct md_mlg *); |
static int mlg_newline(struct md_mlg *); |
static int mlg_newline(struct md_mlg *); |
static void mlg_mode(struct md_mlg *, enum md_tok); |
static void mlg_mode(struct md_mlg *, enum md_tok); |
static int mlg_data(struct md_mlg *, int, char *); |
static int mlg_data(struct md_mlg *, int, |
|
const char *, char *); |
|
static void mlg_err(struct md_mlg *, const char *, |
|
const char *, char *); |
|
static void mlg_warn(struct md_mlg *, const char *, |
|
const char *, char *); |
|
static void mlg_msg(struct md_mlg *, enum roffmsg, |
|
const char *, const char *, char *); |
|
|
#ifdef __linux__ |
#ifdef __linux__ |
extern size_t strlcat(char *, const char *, size_t); |
extern size_t strlcat(char *, const char *, size_t); |
Line 189 mlg_indent(struct md_mlg *p) |
|
Line 201 mlg_indent(struct md_mlg *p) |
|
{ |
{ |
size_t count; |
size_t count; |
|
|
count = p->indent > MAXINDENT ? MAXINDENT : p->indent; |
count = p->indent > MAXINDENT ? (size_t)MAXINDENT : p->indent; |
count *= INDENT; |
count *= INDENT; |
|
|
assert(0 == p->pos); |
assert(0 == p->pos); |
Line 212 mlg_newline(struct md_mlg *p) |
|
Line 224 mlg_newline(struct md_mlg *p) |
|
static void |
static void |
mlg_mode(struct md_mlg *p, enum md_tok ns) |
mlg_mode(struct md_mlg *p, enum md_tok ns) |
{ |
{ |
|
|
p->flags &= ~ML_OVERRIDE_ONE; |
p->flags &= ~ML_OVERRIDE_ONE; |
p->last = ns; |
p->last = ns; |
} |
} |
|
|
|
|
static int |
static int |
mlg_data(struct md_mlg *p, int space, char *buf) |
mlg_data(struct md_mlg *p, int space, const char *start, char *buf) |
{ |
{ |
size_t sz; |
size_t sz; |
char *bufp; |
char *bufp; |
|
int c; |
|
|
assert(p->mbuf); |
assert(p->mbuf); |
assert(0 != p->indent); |
assert(0 != p->indent); |
Line 249 mlg_data(struct md_mlg *p, int space, char *buf) |
|
Line 263 mlg_data(struct md_mlg *p, int space, char *buf) |
|
if (0 == p->pos) { |
if (0 == p->pos) { |
if ( ! mlg_indent(p)) |
if ( ! mlg_indent(p)) |
return(0); |
return(0); |
if ( ! ml_nputstring(p->mbuf, bufp, |
|
sz, &p->pos)) |
c = ml_nputstring(p->mbuf, bufp, sz, &p->pos); |
|
if (0 == c) { |
|
mlg_err(p, start, bufp, "invalid " |
|
"character sequence"); |
return(0); |
return(0); |
if (p->indent * MAXINDENT + sz >= COLUMNS) |
} else if (c > 1) { |
|
mlg_warn(p, start, bufp, "bogus " |
|
"character sequence"); |
|
return(0); |
|
} else if (-1 == c) |
|
return(0); |
|
|
|
if (p->indent * INDENT + sz >= COLUMNS) |
if ( ! mlg_newline(p)) |
if ( ! mlg_newline(p)) |
return(0); |
return(0); |
if ( ! (ML_OVERRIDE_ALL & p->flags)) |
if ( ! (ML_OVERRIDE_ALL & p->flags)) |
Line 270 mlg_data(struct md_mlg *p, int space, char *buf) |
|
Line 294 mlg_data(struct md_mlg *p, int space, char *buf) |
|
return(0); |
return(0); |
} |
} |
|
|
if ( ! ml_nputstring(p->mbuf, bufp, sz, &p->pos)) |
c = ml_nputstring(p->mbuf, bufp, sz, &p->pos); |
|
if (0 == c) { |
|
mlg_err(p, start, bufp, "invalid " |
|
"character sequence"); |
return(0); |
return(0); |
|
} else if (c > 1) { |
|
mlg_warn(p, start, bufp, "bogus " |
|
"character sequence"); |
|
return(0); |
|
} else if (-1 == c) |
|
return(0); |
|
|
if ( ! (ML_OVERRIDE_ALL & p->flags)) |
if ( ! (ML_OVERRIDE_ALL & p->flags)) |
space = 1; |
space = 1; |
Line 345 mlg_alloc(const struct md_args *args, |
|
Line 378 mlg_alloc(const struct md_args *args, |
|
|
|
|
|
static int |
static int |
mlg_roffhead(void *arg) |
mlg_roffhead(void *arg, const struct tm *tm, const char *os, |
|
const char *title, const char *sec, const char *vol) |
{ |
{ |
struct md_mlg *p; |
struct md_mlg *p; |
|
|
Line 353 mlg_roffhead(void *arg) |
|
Line 387 mlg_roffhead(void *arg) |
|
p = (struct md_mlg *)arg; |
p = (struct md_mlg *)arg; |
|
|
mlg_mode(p, MD_BLK_IN); |
mlg_mode(p, MD_BLK_IN); |
if ( ! (*p->begin)(p->mbuf, p->args)) |
if ( ! (*p->begin)(p->mbuf, p->args, tm, os, title, sec, vol)) |
return(0); |
return(0); |
|
|
p->indent++; |
p->indent++; |
|
|
mlg_roffmsg(void *arg, enum roffmsg lvl, |
mlg_roffmsg(void *arg, enum roffmsg lvl, |
const char *buf, const char *pos, char *msg) |
const char *buf, const char *pos, char *msg) |
{ |
{ |
char *level; |
|
|
mlg_msg((struct md_mlg *)arg, lvl, buf, pos, msg); |
|
} |
|
|
|
|
|
static int |
|
mlg_roffdata(void *arg, int space, const char *start, char *buf) |
|
{ |
struct md_mlg *p; |
struct md_mlg *p; |
|
|
assert(arg); |
assert(arg); |
p = (struct md_mlg *)arg; |
p = (struct md_mlg *)arg; |
|
|
|
if ( ! mlg_data(p, space, start, buf)) |
|
return(0); |
|
|
|
mlg_mode(p, MD_TEXT); |
|
return(1); |
|
} |
|
|
|
|
|
static void |
|
mlg_err(struct md_mlg *p, const char *buf, const char *pos, char *msg) |
|
{ |
|
|
|
mlg_msg(p, ROFF_ERROR, buf, pos, msg); |
|
} |
|
|
|
|
|
static void |
|
mlg_warn(struct md_mlg *p, const char *buf, const char *pos, char *msg) |
|
{ |
|
|
|
mlg_msg(p, ROFF_WARN, buf, pos, msg); |
|
} |
|
|
|
|
|
static void |
|
mlg_msg(struct md_mlg *p, enum roffmsg lvl, |
|
const char *buf, const char *pos, char *msg) |
|
{ |
|
char *level; |
|
|
switch (lvl) { |
switch (lvl) { |
case (ROFF_WARN): |
case (ROFF_WARN): |
if ( ! (MD_WARN_ALL & p->args->warnings)) |
if ( ! (MD_WARN_ALL & p->args->warnings)) |
Line 538 mlg_roffmsg(void *arg, enum roffmsg lvl, |
|
Line 609 mlg_roffmsg(void *arg, enum roffmsg lvl, |
|
p->rbuf->name, level, msg); |
p->rbuf->name, level, msg); |
|
|
} |
} |
|
|
|
|
static int |
|
mlg_roffdata(void *arg, int space, char *buf) |
|
{ |
|
struct md_mlg *p; |
|
|
|
assert(arg); |
|
p = (struct md_mlg *)arg; |
|
|
|
if ( ! mlg_data(p, space, buf)) |
|
return(0); |
|
|
|
mlg_mode(p, MD_TEXT); |
|
return(1); |
|
} |
|
|
|