version 1.13, 2017/06/23 02:32:12 |
version 1.19, 2019/03/17 18:21:45 |
|
|
#include <string.h> |
#include <string.h> |
|
|
#include "mandoc.h" |
#include "mandoc.h" |
|
#include "roff.h" |
|
#include "eqn.h" |
#include "out.h" |
#include "out.h" |
#include "html.h" |
#include "html.h" |
|
|
Line 34 eqn_box(struct html *p, const struct eqn_box *bp) |
|
Line 36 eqn_box(struct html *p, const struct eqn_box *bp) |
|
{ |
{ |
struct tag *post, *row, *cell, *t; |
struct tag *post, *row, *cell, *t; |
const struct eqn_box *child, *parent; |
const struct eqn_box *child, *parent; |
const unsigned char *cp; |
const char *cp; |
size_t i, j, rows; |
size_t i, j, rows; |
enum htmltag tag; |
enum htmltag tag; |
enum eqn_fontt font; |
enum eqn_fontt font; |
Line 51 eqn_box(struct html *p, const struct eqn_box *bp) |
|
Line 53 eqn_box(struct html *p, const struct eqn_box *bp) |
|
if (EQN_MATRIX == bp->type) { |
if (EQN_MATRIX == bp->type) { |
if (NULL == bp->first) |
if (NULL == bp->first) |
goto out; |
goto out; |
if (EQN_LIST != bp->first->type) { |
if (bp->first->type != EQN_LIST || |
|
bp->first->expectargs == 1) { |
eqn_box(p, bp->first); |
eqn_box(p, bp->first); |
goto out; |
goto out; |
} |
} |
Line 131 eqn_box(struct html *p, const struct eqn_box *bp) |
|
Line 134 eqn_box(struct html *p, const struct eqn_box *bp) |
|
|
|
if (EQN_PILE == bp->type) { |
if (EQN_PILE == bp->type) { |
assert(NULL == post); |
assert(NULL == post); |
if (bp->first != NULL && bp->first->type == EQN_LIST) |
if (bp->first != NULL && |
|
bp->first->type == EQN_LIST && |
|
bp->first->expectargs > 1) |
post = print_otag(p, TAG_MTABLE, ""); |
post = print_otag(p, TAG_MTABLE, ""); |
} else if (bp->type == EQN_LIST && |
} else if (bp->type == EQN_LIST && bp->expectargs > 1 && |
bp->parent && bp->parent->type == EQN_PILE) { |
bp->parent && bp->parent->type == EQN_PILE) { |
assert(NULL == post); |
assert(NULL == post); |
post = print_otag(p, TAG_MTR, ""); |
post = print_otag(p, TAG_MTR, ""); |
Line 143 eqn_box(struct html *p, const struct eqn_box *bp) |
|
Line 148 eqn_box(struct html *p, const struct eqn_box *bp) |
|
if (bp->text != NULL) { |
if (bp->text != NULL) { |
assert(post == NULL); |
assert(post == NULL); |
tag = TAG_MI; |
tag = TAG_MI; |
cp = (unsigned char *)bp->text; |
cp = bp->text; |
if (isdigit(cp[0]) || (cp[0] == '.' && isdigit(cp[1]))) { |
if (isdigit((unsigned char)cp[0]) || |
|
(cp[0] == '.' && isdigit((unsigned char)cp[1]))) { |
tag = TAG_MN; |
tag = TAG_MN; |
while (*++cp != '\0') { |
while (*++cp != '\0') { |
if (*cp != '.' && !isdigit(*cp)) { |
if (*cp != '.' && |
|
isdigit((unsigned char)*cp) == 0) { |
tag = TAG_MI; |
tag = TAG_MI; |
break; |
break; |
} |
} |
} |
} |
} else if (*cp != '\0' && isalpha(*cp) == 0) { |
} else if (*cp != '\0' && isalpha((unsigned char)*cp) == 0) { |
tag = TAG_MO; |
tag = TAG_MO; |
while (*++cp != '\0') { |
while (*cp != '\0') { |
if (isalnum(*cp)) { |
if (cp[0] == '\\' && cp[1] != '\0') { |
|
cp++; |
|
mandoc_escape(&cp, NULL, NULL); |
|
} else if (isalnum((unsigned char)*cp)) { |
tag = TAG_MI; |
tag = TAG_MI; |
break; |
break; |
} |
} else |
|
cp++; |
} |
} |
} |
} |
font = bp->font; |
font = bp->font; |
|
|
} |
} |
|
|
void |
void |
print_eqn(struct html *p, const struct eqn *ep) |
print_eqn(struct html *p, const struct eqn_box *bp) |
{ |
{ |
struct tag *t; |
struct tag *t; |
|
|
|
if (bp->first == NULL) |
|
return; |
|
|
t = print_otag(p, TAG_MATH, "c", "eqn"); |
t = print_otag(p, TAG_MATH, "c", "eqn"); |
|
|
p->flags |= HTML_NONOSPACE; |
p->flags |= HTML_NONOSPACE; |
eqn_box(p, ep->root); |
eqn_box(p, bp); |
p->flags &= ~HTML_NONOSPACE; |
p->flags &= ~HTML_NONOSPACE; |
|
|
print_tagq(p, t); |
print_tagq(p, t); |