version 1.66, 2015/03/11 12:51:41 |
version 1.67, 2015/03/12 04:24:19 |
Line 76 static void donode(struct texi *, enum texicmd, size_t |
|
Line 76 static void donode(struct texi *, enum texicmd, size_t |
|
static void doprintindex(struct texi *, enum texicmd, size_t *); |
static void doprintindex(struct texi *, enum texicmd, size_t *); |
static void doquotation(struct texi *, enum texicmd, size_t *); |
static void doquotation(struct texi *, enum texicmd, size_t *); |
static void dotable(struct texi *, enum texicmd, size_t *); |
static void dotable(struct texi *, enum texicmd, size_t *); |
static void dotop(struct texi *, enum texicmd, size_t *); |
|
static void dosecoffs(struct texi *, enum texicmd, size_t *); |
static void dosecoffs(struct texi *, enum texicmd, size_t *); |
static void dosection(struct texi *, enum texicmd, size_t *); |
static void dosection(struct texi *, enum texicmd, size_t *); |
static void dosp(struct texi *, enum texicmd, size_t *); |
static void dosp(struct texi *, enum texicmd, size_t *); |
Line 326 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
Line 325 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
{ doignline, "title", 5 }, /* TEXICMD_TITLE */ |
{ doignline, "title", 5 }, /* TEXICMD_TITLE */ |
{ dobracket, "titlefont", 9 }, /* TEXICMD_TITLEFONT */ |
{ dobracket, "titlefont", 9 }, /* TEXICMD_TITLEFONT */ |
{ doignblock, "titlepage", 9 }, /* TEXICMD_TITLEPAGE */ |
{ doignblock, "titlepage", 9 }, /* TEXICMD_TITLEPAGE */ |
{ dotop, "top", 3 }, /* TEXICMD_TOP */ |
{ dosection, "top", 3 }, /* TEXICMD_TOP */ |
{ doindex, "tpindex", 7 }, /* TEXICMD_TPINDEX */ |
{ doindex, "tpindex", 7 }, /* TEXICMD_TPINDEX */ |
{ doaccent, "u", 1 }, /* TEXICMD_U */ |
{ doaccent, "u", 1 }, /* TEXICMD_U */ |
{ doaccent, "ubaraccent", 10 }, /* TEXICMD_UBARACCENT */ |
{ doaccent, "ubaraccent", 10 }, /* TEXICMD_UBARACCENT */ |
Line 1477 doquotation(struct texi *p, enum texicmd cmd, size_t * |
|
Line 1476 doquotation(struct texi *p, enum texicmd cmd, size_t * |
|
static int |
static int |
indexcmp(const void *p1, const void *p2) |
indexcmp(const void *p1, const void *p2) |
{ |
{ |
|
const struct texiterm *t1 = p1, *t2 = p2; |
|
|
return(strcasecmp(*(const char **)p1, *(const char **)p2)); |
return(strcasecmp(t1->term, t2->term)); |
} |
} |
|
|
static void |
static void |
Line 1522 doprintindex(struct texi *p, enum texicmd cmd, size_t |
|
Line 1522 doprintindex(struct texi *p, enum texicmd cmd, size_t |
|
|
|
/* Alphabetically sort our indices. */ |
/* Alphabetically sort our indices. */ |
qsort(p->indexs[i].index, |
qsort(p->indexs[i].index, |
p->indexs[i].indexsz, sizeof(char *), indexcmp); |
p->indexs[i].indexsz, |
|
sizeof(struct texiterm), indexcmp); |
|
|
texivspace(p); |
texivspace(p); |
teximacro(p, "Bl -tag -width Ds -compact"); |
teximacro(p, "Bl -tag -width Ds -compact"); |
for (j = 0; j < p->indexs[i].indexsz; j++) { |
for (j = 0; j < p->indexs[i].indexsz; j++) { |
teximacroopen(p, "It"); |
teximacroopen(p, "It"); |
#if HAVE_INDEX |
#if HAVE_INDEX |
teximacroopen(p, "Lkx"); |
if (NULL == p->chapters) { |
texiputchars(p, "\"idx"); |
teximacroopen(p, "Lkx"); |
texiputchars(p, p->indexs[i].name); |
texiputchars(p, "\"idx"); |
cp = p->indexs[i].index[j]; |
texiputchars(p, p->indexs[i].name); |
while ('\n' != *cp) { |
cp = p->indexs[i].index[j].term; |
assert('\0' != *cp); |
while ('\n' != *cp) { |
texiputchar(p, *cp++); |
assert('\0' != *cp); |
|
texiputchar(p, *cp++); |
|
} |
|
texiputchars(p, "\" \""); |
|
p->literal++; |
|
} else { |
|
teximacroopen(p, "Xr"); |
|
texiputchars(p, p->nodes[p->indexs[i].index[j].chapter]); |
|
texiputchars(p, " 7 \"idx"); |
|
texiputchars(p, p->indexs[i].name); |
|
cp = p->indexs[i].index[j].term; |
|
while ('\n' != *cp) { |
|
assert('\0' != *cp); |
|
texiputchar(p, *cp++); |
|
} |
|
texiputchars(p, "\" \""); |
|
p->literal++; |
} |
} |
texiputchars(p, "\" \""); |
|
p->literal++; |
|
#endif |
#endif |
texisplice(p, p->indexs[i].index[j], |
texisplice(p, p->indexs[i].index[j].term, |
strlen(p->indexs[i].index[j]), *pos); |
strlen(p->indexs[i].index[j].term), *pos); |
parseeoln(p, pos); |
parseeoln(p, pos); |
#if HAVE_INDEX |
#if HAVE_INDEX |
p->literal--; |
p->literal--; |
Line 1562 donode(struct texi *p, enum texicmd cmd, size_t *pos) |
|
Line 1577 donode(struct texi *p, enum texicmd cmd, size_t *pos) |
|
|
|
if (NULL != p->chapters) { |
if (NULL != p->chapters) { |
advanceeoln(p, pos, 1); |
advanceeoln(p, pos, 1); |
return; |
if (0 == p->chapnum) |
} |
p->ign--; |
|
teximdocclose(p, 0); |
|
teximdocopen(p, pos); |
|
} else { |
#if HAVE_INDEX |
#if HAVE_INDEX |
p->seenvs = -1; |
p->seenvs = -1; |
teximacroopen(p, "Ix"); |
teximacroopen(p, "Ix"); |
texiputchars(p, "node"); |
texiputchars(p, "node"); |
while (*pos < BUFSZ(p) && isws(BUF(p)[*pos])) |
while (*pos < BUFSZ(p) && isws(BUF(p)[*pos])) |
advance(p, pos); |
advance(p, pos); |
while (*pos < BUFSZ(p)) { |
while (*pos < BUFSZ(p)) { |
if (BUF(p)[*pos] == ',') |
if (BUF(p)[*pos] == ',') |
break; |
break; |
else if (BUF(p)[*pos] == '\n') |
else if (BUF(p)[*pos] == '\n') |
break; |
break; |
texiputchar(p, BUF(p)[*pos]); |
texiputchar(p, BUF(p)[*pos]); |
advance(p, pos); |
advance(p, pos); |
} |
} |
teximacroclose(p); |
teximacroclose(p); |
#endif |
#endif |
advanceeoln(p, pos, 1); |
advanceeoln(p, pos, 1); |
p->seenvs = sv; |
p->seenvs = sv; |
|
} |
} |
} |
|
|
/* |
/* |
Line 1595 domenu(struct texi *p, enum texicmd cmd, size_t *pos) |
|
Line 1613 domenu(struct texi *p, enum texicmd cmd, size_t *pos) |
|
{ |
{ |
size_t start, end, sv; |
size_t start, end, sv; |
|
|
if (NULL != p->chapters) { |
|
doignblock(p, cmd, pos); |
|
return; |
|
} |
|
|
|
advanceeoln(p, pos, 1); |
advanceeoln(p, pos, 1); |
|
|
/* |
/* |
Line 1914 dosection(struct texi *p, enum texicmd cmd, size_t *po |
|
Line 1927 dosection(struct texi *p, enum texicmd cmd, size_t *po |
|
else |
else |
texivspace(p); |
texivspace(p); |
|
|
if (0 == sec && NULL != p->chapters) { |
|
teximdocclose(p, 0); |
|
teximdocopen(p, pos); |
|
} |
|
|
|
teximacroopen(p, sects[sec]); |
teximacroopen(p, sects[sec]); |
parseeoln(p, pos); |
parseeoln(p, pos); |
teximacroclose(p); |
teximacroclose(p); |
Line 1930 dosection(struct texi *p, enum texicmd cmd, size_t *po |
|
Line 1938 dosection(struct texi *p, enum texicmd cmd, size_t *po |
|
} |
} |
|
|
static void |
static void |
dotop(struct texi *p, enum texicmd cmd, size_t *pos) |
|
{ |
|
|
|
if (--p->ign) |
|
texierr(p, "@top command while ignoring"); |
|
|
|
if (NULL == p->chapters) |
|
teximdocopen(p, pos); |
|
dosection(p, cmd, pos); |
|
} |
|
|
|
static void |
|
dosp(struct texi *p, enum texicmd cmd, size_t *pos) |
dosp(struct texi *p, enum texicmd cmd, size_t *pos) |
{ |
{ |
|
|
Line 2159 doindex(struct texi *p, enum texicmd cmd, size_t *pos) |
|
Line 2155 doindex(struct texi *p, enum texicmd cmd, size_t *pos) |
|
advance(p, pos); |
advance(p, pos); |
|
|
start = *pos; |
start = *pos; |
while (*pos < BUFSZ(p) && '\n' != BUF(p)[*pos]) |
while (*pos < BUFSZ(p) && '\n' != BUF(p)[*pos]) { |
|
assert('\0' != BUF(p)[*pos]); |
advance(p, pos); |
advance(p, pos); |
|
} |
|
|
if (*pos == BUFSZ(p)) { |
if (*pos == BUFSZ(p)) { |
texiwarn(p, "unexpected EOF"); |
texiwarn(p, "unexpected EOF"); |