version 1.19, 2011/01/11 14:12:01 |
version 1.22, 2011/02/06 22:02:58 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> |
|
* Copyright (c) 2011 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 |
|
|
#include "libmandoc.h" |
#include "libmandoc.h" |
#include "libroff.h" |
#include "libroff.h" |
|
|
static int data(struct tbl_node *, struct tbl_span *, |
static int data(struct tbl_node *, struct tbl_span *, |
int, const char *, int *); |
int, const char *, int *); |
|
static struct tbl_span *newspan(struct tbl_node *, int, |
|
struct tbl_row *); |
|
|
static int |
static int |
data(struct tbl_node *tbl, struct tbl_span *dp, |
data(struct tbl_node *tbl, struct tbl_span *dp, |
Line 172 tbl_cdata(struct tbl_node *tbl, int ln, const char *p) |
|
Line 175 tbl_cdata(struct tbl_node *tbl, int ln, const char *p) |
|
return(0); |
return(0); |
} |
} |
|
|
|
static struct tbl_span * |
|
newspan(struct tbl_node *tbl, int line, struct tbl_row *rp) |
|
{ |
|
struct tbl_span *dp; |
|
|
|
dp = mandoc_calloc(1, sizeof(struct tbl_span)); |
|
dp->line = line; |
|
dp->tbl = &tbl->opts; |
|
dp->layout = rp; |
|
dp->head = tbl->first_head; |
|
|
|
if (tbl->last_span) { |
|
tbl->last_span->next = dp; |
|
tbl->last_span = dp; |
|
} else { |
|
tbl->last_span = tbl->first_span = dp; |
|
tbl->current_span = NULL; |
|
dp->flags |= TBL_SPAN_FIRST; |
|
} |
|
|
|
return(dp); |
|
} |
|
|
int |
int |
tbl_data(struct tbl_node *tbl, int ln, const char *p) |
tbl_data(struct tbl_node *tbl, int ln, const char *p) |
{ |
{ |
Line 196 tbl_data(struct tbl_node *tbl, int ln, const char *p) |
|
Line 222 tbl_data(struct tbl_node *tbl, int ln, const char *p) |
|
|
|
if (tbl->last_span) { |
if (tbl->last_span) { |
assert(tbl->last_span->layout); |
assert(tbl->last_span->layout); |
if (tbl->last_span->pos == TBL_SPAN_DATA) |
if (tbl->last_span->pos == TBL_SPAN_DATA) { |
rp = tbl->last_span->layout->next; |
for (rp = tbl->last_span->layout->next; |
else |
rp && rp->first; rp = rp->next) { |
|
switch (rp->first->pos) { |
|
case (TBL_CELL_HORIZ): |
|
dp = newspan(tbl, ln, rp); |
|
dp->pos = TBL_SPAN_HORIZ; |
|
continue; |
|
case (TBL_CELL_DHORIZ): |
|
dp = newspan(tbl, ln, rp); |
|
dp->pos = TBL_SPAN_DHORIZ; |
|
continue; |
|
default: |
|
break; |
|
} |
|
break; |
|
} |
|
} else |
rp = tbl->last_span->layout; |
rp = tbl->last_span->layout; |
|
|
if (NULL == rp) |
if (NULL == rp) |
Line 208 tbl_data(struct tbl_node *tbl, int ln, const char *p) |
|
Line 249 tbl_data(struct tbl_node *tbl, int ln, const char *p) |
|
|
|
assert(rp); |
assert(rp); |
|
|
dp = mandoc_calloc(1, sizeof(struct tbl_span)); |
dp = newspan(tbl, ln, rp); |
dp->tbl = &tbl->opts; |
|
dp->layout = rp; |
|
dp->head = tbl->first_head; |
|
|
|
if (tbl->last_span) { |
|
tbl->last_span->next = dp; |
|
tbl->last_span = dp; |
|
} else { |
|
tbl->last_span = tbl->first_span = dp; |
|
dp->flags |= TBL_SPAN_FIRST; |
|
} |
|
|
|
if ( ! strcmp(p, "_")) { |
if ( ! strcmp(p, "_")) { |
dp->pos = TBL_SPAN_HORIZ; |
dp->pos = TBL_SPAN_HORIZ; |