version 1.60, 2015/03/05 08:18:56 |
version 1.61, 2015/03/05 08:35:35 |
Line 42 static void doaccent(struct texi *, enum texicmd, size |
|
Line 42 static void doaccent(struct texi *, enum texicmd, size |
|
static void doblock(struct texi *, enum texicmd, size_t *); |
static void doblock(struct texi *, enum texicmd, size_t *); |
static void dobracket(struct texi *, enum texicmd, size_t *); |
static void dobracket(struct texi *, enum texicmd, size_t *); |
static void dobye(struct texi *, enum texicmd, size_t *); |
static void dobye(struct texi *, enum texicmd, size_t *); |
|
static void docopying(struct texi *, enum texicmd, size_t *); |
static void dodefindex(struct texi *, enum texicmd, size_t *); |
static void dodefindex(struct texi *, enum texicmd, size_t *); |
static void dodefn(struct texi *, enum texicmd, size_t *); |
static void dodefn(struct texi *, enum texicmd, size_t *); |
static void dodisplay(struct texi *, enum texicmd, size_t *); |
static void dodisplay(struct texi *, enum texicmd, size_t *); |
Line 54 static void doignbracket(struct texi *, enum texicmd, |
|
Line 55 static void doignbracket(struct texi *, enum texicmd, |
|
static void doignline(struct texi *, enum texicmd, size_t *); |
static void doignline(struct texi *, enum texicmd, size_t *); |
static void doinline(struct texi *, enum texicmd, size_t *); |
static void doinline(struct texi *, enum texicmd, size_t *); |
static void doinclude(struct texi *, enum texicmd, size_t *); |
static void doinclude(struct texi *, enum texicmd, size_t *); |
|
static void doinsertcopying(struct texi *, enum texicmd, size_t *); |
static void doitem(struct texi *, enum texicmd, size_t *); |
static void doitem(struct texi *, enum texicmd, size_t *); |
static void doitemize(struct texi *, enum texicmd, size_t *); |
static void doitemize(struct texi *, enum texicmd, size_t *); |
static void dolink(struct texi *, enum texicmd, size_t *); |
static void dolink(struct texi *, enum texicmd, size_t *); |
Line 115 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
Line 117 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
{ doignline, "c", 1 }, /* TEXICMD_COMMENT */ |
{ doignline, "c", 1 }, /* TEXICMD_COMMENT */ |
{ doignline, "comment", 7 }, /* TEXICMD_COMMENT_LONG */ |
{ doignline, "comment", 7 }, /* TEXICMD_COMMENT_LONG */ |
{ doignline, "contents", 8 }, /* TEXICMD_CONTENTS */ |
{ doignline, "contents", 8 }, /* TEXICMD_CONTENTS */ |
{ doignblock, "copying", 7 }, /* TEXICMD_COPYING */ |
{ docopying, "copying", 7 }, /* TEXICMD_COPYING */ |
{ dosymbol, "copyright", 9 }, /* TEXICMD_COPYRIGHT */ |
{ dosymbol, "copyright", 9 }, /* TEXICMD_COPYRIGHT */ |
{ dodefindex, "defcodeindex", 12 }, /* TEXICMD_DEFCODEINDEX */ |
{ dodefindex, "defcodeindex", 12 }, /* TEXICMD_DEFCODEINDEX */ |
{ dodefn, "deffn", 5 }, /* TEXICMD_DEFFN */ |
{ dodefn, "deffn", 5 }, /* TEXICMD_DEFFN */ |
Line 214 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
Line 216 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
{ dodisplay, "indentblock", 11 }, /* TEXICMD_INDENTBLOCK */ |
{ dodisplay, "indentblock", 11 }, /* TEXICMD_INDENTBLOCK */ |
{ dolink, "indicateurl", 11 }, /* TEXICMD_INDICATEURL */ |
{ dolink, "indicateurl", 11 }, /* TEXICMD_INDICATEURL */ |
{ dolink, "inforef", 7 }, /* TEXICMD_INFOREF */ |
{ dolink, "inforef", 7 }, /* TEXICMD_INFOREF */ |
{ doignline, "insertcopying", 13 }, /* TEXICMD_INSERTCOPYING */ |
{ doinsertcopying, "insertcopying", 13 }, /* TEXICMD_INSERTCOPYING */ |
{ doitem, "item", 4 }, /* TEXICMD_ITEM */ |
{ doitem, "item", 4 }, /* TEXICMD_ITEM */ |
{ doitemize, "itemize", 7 }, /* TEXICMD_ITEMIZE */ |
{ doitemize, "itemize", 7 }, /* TEXICMD_ITEMIZE */ |
{ doitem, "itemx", 5 }, /* TEXICMD_ITEMX */ |
{ doitem, "itemx", 5 }, /* TEXICMD_ITEMX */ |
Line 801 doverb(struct texi *p, enum texicmd cmd, size_t *pos) |
|
Line 803 doverb(struct texi *p, enum texicmd cmd, size_t *pos) |
|
} |
} |
|
|
static void |
static void |
|
doinsertcopying(struct texi *p, enum texicmd cmd, size_t *pos) |
|
{ |
|
|
|
advanceeoln(p, pos, 0); |
|
if (NULL == p->copying) |
|
return; |
|
texisplice(p, p->copying, p->copyingsz, *pos); |
|
} |
|
|
|
static void |
|
docopying(struct texi *p, enum texicmd cmd, size_t *pos) |
|
{ |
|
const char *end, *term; |
|
size_t endsz, endpos; |
|
|
|
/* We retain our starting (but not ending) newlines. */ |
|
end = "\n@end copying\n"; |
|
endsz = strlen(end); |
|
advanceeoln(p, pos, 0); |
|
if (*pos == BUFSZ(p)) { |
|
texiwarn(p, "unterminated \"%s\"", texitoks[cmd].tok); |
|
return; |
|
} |
|
|
|
term = memmem(&BUF(p)[*pos], BUFSZ(p) - *pos, end, endsz); |
|
if (NULL == term) { |
|
texiwarn(p, "unterminated \"%s\"", texitoks[cmd].tok); |
|
endpos = BUFSZ(p); |
|
} else |
|
endpos = *pos + (size_t)(term - &BUF(p)[*pos]); |
|
|
|
assert(endpos <= BUFSZ(p)); |
|
assert('\n' == BUF(p)[*pos]); |
|
advance(p, pos); |
|
|
|
p->copying = malloc(endpos - *pos + 1); |
|
p->copyingsz = endpos - *pos; |
|
memcpy(p->copying, &BUF(p)[*pos], p->copyingsz); |
|
p->copying[endpos - *pos] = '\0'; |
|
|
|
while (*pos < endpos) |
|
advance(p, pos); |
|
if (*pos < BUFSZ(p)) |
|
advanceto(p, pos, endpos + endsz); |
|
} |
|
|
|
static void |
doverbatim(struct texi *p, enum texicmd cmd, size_t *pos) |
doverbatim(struct texi *p, enum texicmd cmd, size_t *pos) |
{ |
{ |
const char *end, *term; |
const char *end, *term; |
Line 811 doverbatim(struct texi *p, enum texicmd cmd, size_t *p |
|
Line 860 doverbatim(struct texi *p, enum texicmd cmd, size_t *p |
|
endsz = strlen(end); |
endsz = strlen(end); |
advanceeoln(p, pos, 0); |
advanceeoln(p, pos, 0); |
if (*pos == BUFSZ(p)) { |
if (*pos == BUFSZ(p)) { |
texiwarn(p, "unexpected end of file"); |
texiwarn(p, "unterminated \"%s\"", texitoks[cmd].tok); |
return; |
return; |
} |
} |
|
|
term = memmem(&BUF(p)[*pos], BUFSZ(p) - *pos, end, endsz); |
term = memmem(&BUF(p)[*pos], BUFSZ(p) - *pos, end, endsz); |
if (NULL == term) { |
if (NULL == term) { |
texiwarn(p, "unterminated verbatim block"); |
texiwarn(p, "unterminated \"%s\"", texitoks[cmd].tok); |
endpos = BUFSZ(p); |
endpos = BUFSZ(p); |
} else |
} else |
endpos = *pos + (size_t)(term - &BUF(p)[*pos]); |
endpos = *pos + (size_t)(term - &BUF(p)[*pos]); |