version 1.153, 2010/07/01 22:35:54 |
version 1.157, 2010/07/04 22:04:04 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv> |
|
* Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
Line 514 mdoc_word_alloc(struct mdoc *m, int line, int pos, con |
|
Line 515 mdoc_word_alloc(struct mdoc *m, int line, int pos, con |
|
} |
} |
|
|
|
|
void |
static void |
mdoc_node_free(struct mdoc_node *p) |
mdoc_node_free(struct mdoc_node *p) |
{ |
{ |
|
|
|
/* |
|
* XXX: if these end up being problematic in terms of memory |
|
* management and dereferencing freed blocks, then make them |
|
* into reference-counted double-pointers. |
|
*/ |
|
|
|
if (MDOC_Bd == p->tok && MDOC_BLOCK == p->type) |
|
if (p->data.Bd) |
|
free(p->data.Bd); |
|
if (MDOC_Bl == p->tok && MDOC_BLOCK == p->type) |
|
if (p->data.Bl) |
|
free(p->data.Bl); |
|
if (MDOC_Bf == p->tok && MDOC_HEAD == p->type) |
|
if (p->data.Bf) |
|
free(p->data.Bf); |
|
|
if (p->string) |
if (p->string) |
free(p->string); |
free(p->string); |
if (p->args) |
if (p->args) |
Line 610 mdoc_ptext(struct mdoc *m, int line, char *buf, int of |
|
Line 627 mdoc_ptext(struct mdoc *m, int line, char *buf, int of |
|
*/ |
*/ |
|
|
if (MDOC_Bl == n->tok && MDOC_BODY == n->type && |
if (MDOC_Bl == n->tok && MDOC_BODY == n->type && |
LIST_column == n->data.Bl.type) { |
LIST_column == n->data.Bl->type) { |
/* `Bl' is open without any children. */ |
/* `Bl' is open without any children. */ |
m->flags |= MDOC_FREECOL; |
m->flags |= MDOC_FREECOL; |
return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf)); |
return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf)); |
Line 619 mdoc_ptext(struct mdoc *m, int line, char *buf, int of |
|
Line 636 mdoc_ptext(struct mdoc *m, int line, char *buf, int of |
|
if (MDOC_It == n->tok && MDOC_BLOCK == n->type && |
if (MDOC_It == n->tok && MDOC_BLOCK == n->type && |
NULL != n->parent && |
NULL != n->parent && |
MDOC_Bl == n->parent->tok && |
MDOC_Bl == n->parent->tok && |
LIST_column == n->parent->data.Bl.type) { |
LIST_column == n->parent->data.Bl->type) { |
/* `Bl' has block-level `It' children. */ |
/* `Bl' has block-level `It' children. */ |
m->flags |= MDOC_FREECOL; |
m->flags |= MDOC_FREECOL; |
return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf)); |
return(mdoc_macro(m, MDOC_It, line, offs, &offs, buf)); |
Line 731 macrowarn(struct mdoc *m, int ln, const char *buf, int |
|
Line 748 macrowarn(struct mdoc *m, int ln, const char *buf, int |
|
* Parse a macro line, that is, a line beginning with the control |
* Parse a macro line, that is, a line beginning with the control |
* character. |
* character. |
*/ |
*/ |
int |
static int |
mdoc_pmacro(struct mdoc *m, int ln, char *buf, int offs) |
mdoc_pmacro(struct mdoc *m, int ln, char *buf, int offs) |
{ |
{ |
enum mdoct tok; |
enum mdoct tok; |
Line 825 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
Line 842 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
*/ |
*/ |
|
|
if (MDOC_Bl == n->tok && MDOC_BODY == n->type && |
if (MDOC_Bl == n->tok && MDOC_BODY == n->type && |
LIST_column == n->data.Bl.type) { |
LIST_column == n->data.Bl->type) { |
m->flags |= MDOC_FREECOL; |
m->flags |= MDOC_FREECOL; |
if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf)) |
if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf)) |
goto err; |
goto err; |
Line 841 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
Line 858 mdoc_pmacro(struct mdoc *m, int ln, char *buf, int off |
|
if (MDOC_It == n->tok && MDOC_BLOCK == n->type && |
if (MDOC_It == n->tok && MDOC_BLOCK == n->type && |
NULL != n->parent && |
NULL != n->parent && |
MDOC_Bl == n->parent->tok && |
MDOC_Bl == n->parent->tok && |
LIST_column == n->parent->data.Bl.type) { |
LIST_column == n->parent->data.Bl->type) { |
m->flags |= MDOC_FREECOL; |
m->flags |= MDOC_FREECOL; |
if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf)) |
if ( ! mdoc_macro(m, MDOC_It, ln, sv, &sv, buf)) |
goto err; |
goto err; |