version 1.32, 2015/02/23 12:28:20 |
version 1.34, 2015/02/23 14:36:03 |
Line 74 static void dotab(struct texi *, enum texicmd, const c |
|
Line 74 static void dotab(struct texi *, enum texicmd, const c |
|
static void dotitle(struct texi *, enum texicmd, const char *, size_t, size_t *); |
static void dotitle(struct texi *, enum texicmd, const char *, size_t, size_t *); |
static void dovalue(struct texi *, enum texicmd, const char *, size_t, size_t *); |
static void dovalue(struct texi *, enum texicmd, const char *, size_t, size_t *); |
static void doverb(struct texi *, enum texicmd, const char *, size_t, size_t *); |
static void doverb(struct texi *, enum texicmd, const char *, size_t, size_t *); |
|
static void doverbatim(struct texi *, enum texicmd, const char *, size_t, size_t *); |
static void doverbinclude(struct texi *, enum texicmd, const char *, size_t, size_t *); |
static void doverbinclude(struct texi *, enum texicmd, const char *, size_t, size_t *); |
|
|
static const struct texitok __texitoks[TEXICMD__MAX] = { |
static const struct texitok __texitoks[TEXICMD__MAX] = { |
Line 94 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
Line 95 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
{ dosymbol, "!", 1 }, /* TEXICMD_BANG */ |
{ dosymbol, "!", 1 }, /* TEXICMD_BANG */ |
{ dosymbol, "bullet", 6 }, /* TEXICMD_BULLET */ |
{ dosymbol, "bullet", 6 }, /* TEXICMD_BULLET */ |
{ dobye, "bye", 3 }, /* TEXICMD_BYE */ |
{ dobye, "bye", 3 }, /* TEXICMD_BYE */ |
|
{ doblock, "cartouche", 9 }, /* TEXICMD_CARTOUCHE */ |
|
{ doaccent, ",", 1 }, /* TEXICMD_CEDILLA */ |
{ doignline, "center", 6 }, /* TEXICMD_CENTER */ |
{ doignline, "center", 6 }, /* TEXICMD_CENTER */ |
{ dosection, "chapter", 7 }, /* TEXICMD_CHAPTER */ |
{ dosection, "chapter", 7 }, /* TEXICMD_CHAPTER */ |
{ doignline, "cindex", 6 }, /* TEXICMD_CINDEX */ |
{ doignline, "cindex", 6 }, /* TEXICMD_CINDEX */ |
Line 121 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
Line 124 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
{ dodefn, "deftypefnx", 10 }, /* TEXICMD_DEFTYPEFNX */ |
{ dodefn, "deftypefnx", 10 }, /* TEXICMD_DEFTYPEFNX */ |
{ dodefn, "deftypefun", 10 }, /* TEXICMD_DEFTYPEFUN */ |
{ dodefn, "deftypefun", 10 }, /* TEXICMD_DEFTYPEFUN */ |
{ dodefn, "deftypefunx", 11 }, /* TEXICMD_DEFTYPEFUNX */ |
{ dodefn, "deftypefunx", 11 }, /* TEXICMD_DEFTYPEFUNX */ |
|
{ dodefn, "deftypemethod", 13 }, /* TEXICMD_DEFTYPEMETHOD */ |
|
{ dodefn, "deftypemethodx", 14 }, /* TEXICMD_DEFTYPEMETHODX */ |
{ dodefn, "deftypevar", 10 }, /* TEXICMD_DEFTYPEVAR */ |
{ dodefn, "deftypevar", 10 }, /* TEXICMD_DEFTYPEVAR */ |
{ dodefn, "deftypevarx", 11 }, /* TEXICMD_DEFTYPEVARX */ |
{ dodefn, "deftypevarx", 11 }, /* TEXICMD_DEFTYPEVARX */ |
{ dodefn, "deftypevr", 9 }, /* TEXICMD_DEFTYPEVR */ |
{ dodefn, "deftypevr", 9 }, /* TEXICMD_DEFTYPEVR */ |
Line 141 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
Line 146 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
{ dolink, "email", 5 }, /* TEXICMD_EMAIL */ |
{ dolink, "email", 5 }, /* TEXICMD_EMAIL */ |
{ doinline, "emph", 4 }, /* TEXICMD_EMPH */ |
{ doinline, "emph", 4 }, /* TEXICMD_EMPH */ |
{ NULL, "end", 3 }, /* TEXICMD_END */ |
{ NULL, "end", 3 }, /* TEXICMD_END */ |
|
{ dosymbol, "enddots", 7 }, /* TEXICMD_ENDDOTS */ |
{ doenumerate, "enumerate", 9 }, /* TEXICMD_ENUMERATE */ |
{ doenumerate, "enumerate", 9 }, /* TEXICMD_ENUMERATE */ |
{ doinline, "env", 3 }, /* TEXICMD_ENV */ |
{ doinline, "env", 3 }, /* TEXICMD_ENV */ |
{ dosymbol, "equiv", 5 }, /* TEXICMD_EQUIV */ |
{ dosymbol, "equiv", 5 }, /* TEXICMD_EQUIV */ |
Line 180 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
Line 186 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
{ doignbracket, "image", 5 }, /* TEXICMD_IMAGE */ |
{ doignbracket, "image", 5 }, /* TEXICMD_IMAGE */ |
{ doinclude, "include", 7 }, /* TEXICMD_INCLUDE */ |
{ doinclude, "include", 7 }, /* TEXICMD_INCLUDE */ |
{ dodisplay, "indentblock", 11 }, /* TEXICMD_INDENTBLOCK */ |
{ dodisplay, "indentblock", 11 }, /* TEXICMD_INDENTBLOCK */ |
{ doignline, "", 0 }, /* TEXICMD_USER_INDEX */ |
{ dolink, "inforef", 7 }, /* TEXICMD_INDENTBLOCK */ |
{ doignline, "insertcopying", 13 }, /* TEXICMD_INSERTCOPYING */ |
{ doignline, "insertcopying", 13 }, /* TEXICMD_INSERTCOPYING */ |
{ doitem, "item", 4 }, /* TEXICMD_ITEM */ |
{ doitem, "item", 4 }, /* TEXICMD_ITEM */ |
{ doitemize, "itemize", 7 }, /* TEXICMD_ITEMIZE */ |
{ doitemize, "itemize", 7 }, /* TEXICMD_ITEMIZE */ |
Line 223 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
Line 229 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
{ dotitle, "settitle", 8 }, /* TEXICMD_SETTITLE */ |
{ dotitle, "settitle", 8 }, /* TEXICMD_SETTITLE */ |
{ doignline, "shortcontents", 13 }, /* TEXICMD_SHORTCONTENTS */ |
{ doignline, "shortcontents", 13 }, /* TEXICMD_SHORTCONTENTS */ |
{ doinline, "slanted", 7 }, /* TEXICMD_SLANTED */ |
{ doinline, "slanted", 7 }, /* TEXICMD_SLANTED */ |
|
{ dosymbol, "/", 1 }, /* TEXICMD_SLASH */ |
{ dosp, "sp", 2 }, /* TEXICMD_SP */ |
{ dosp, "sp", 2 }, /* TEXICMD_SP */ |
{ dosymbol, " ", 1 }, /* TEXICMD_SPACE */ |
{ dosymbol, " ", 1 }, /* TEXICMD_SPACE */ |
{ doignline, "smallbook", 9 }, /* TEXICMD_SMALLBOOK */ |
{ doignline, "smallbook", 9 }, /* TEXICMD_SMALLBOOK */ |
Line 260 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
Line 267 static const struct texitok __texitoks[TEXICMD__MAX] = |
|
{ dosubsubsection, "unnumberedsubsubsec", 19 }, /* TEXICMD_UNNUMBEREDSUBSUBSEC */ |
{ dosubsubsection, "unnumberedsubsubsec", 19 }, /* TEXICMD_UNNUMBEREDSUBSUBSEC */ |
{ dolink, "uref", 4 }, /* TEXICMD_UREF */ |
{ dolink, "uref", 4 }, /* TEXICMD_UREF */ |
{ dolink, "url", 3 }, /* TEXICMD_URL */ |
{ dolink, "url", 3 }, /* TEXICMD_URL */ |
|
{ doignline, "", 0 }, /* TEXICMD_USER_INDEX */ |
{ dovalue, "value", 5 }, /* TEXICMD_VALUE */ |
{ dovalue, "value", 5 }, /* TEXICMD_VALUE */ |
{ doinline, "var", 3 }, /* TEXICMD_VAR */ |
{ doinline, "var", 3 }, /* TEXICMD_VAR */ |
{ doverb, "verbatim", 8 }, /* TEXICMD_VERBATIM */ |
{ doverb, "verb", 4 }, /* TEXICMD_VERB */ |
|
{ doverbatim, "verbatim", 8 }, /* TEXICMD_VERBATIM */ |
{ doverbinclude, "verbatiminclude", 15 }, /* TEXICMD_VERBATIMINCLUDE */ |
{ doverbinclude, "verbatiminclude", 15 }, /* TEXICMD_VERBATIMINCLUDE */ |
{ doignline, "vindex", 6 }, /* TEXICMD_VINDEX */ |
{ doignline, "vindex", 6 }, /* TEXICMD_VINDEX */ |
{ dosp, "vskip", 5 }, /* TEXICMD_VSKIP */ |
{ dosp, "vskip", 5 }, /* TEXICMD_VSKIP */ |
Line 317 dodefn(struct texi *p, enum texicmd cmd, |
|
Line 326 dodefn(struct texi *p, enum texicmd cmd, |
|
case (TEXICMD_DEFTP): |
case (TEXICMD_DEFTP): |
case (TEXICMD_DEFTYPEFN): |
case (TEXICMD_DEFTYPEFN): |
case (TEXICMD_DEFTYPEFUN): |
case (TEXICMD_DEFTYPEFUN): |
|
case (TEXICMD_DEFTYPEMETHOD): |
case (TEXICMD_DEFTYPEVAR): |
case (TEXICMD_DEFTYPEVAR): |
case (TEXICMD_DEFTYPEVR): |
case (TEXICMD_DEFTYPEVR): |
case (TEXICMD_DEFUN): |
case (TEXICMD_DEFUN): |
Line 339 dodefn(struct texi *p, enum texicmd cmd, |
|
Line 349 dodefn(struct texi *p, enum texicmd cmd, |
|
texivspace(p); |
texivspace(p); |
|
|
switch (cmd) { |
switch (cmd) { |
|
case (TEXICMD_DEFTYPEMETHOD): |
|
case (TEXICMD_DEFTYPEMETHODX): |
|
texiputchars(p, "Method"); |
|
break; |
case (TEXICMD_DEFMAC): |
case (TEXICMD_DEFMAC): |
case (TEXICMD_DEFMACX): |
case (TEXICMD_DEFMACX): |
texiputchars(p, "Macro"); |
texiputchars(p, "Macro"); |
Line 387 dodefn(struct texi *p, enum texicmd cmd, |
|
Line 401 dodefn(struct texi *p, enum texicmd cmd, |
|
case (TEXICMD_DEFTYPEFUNX): |
case (TEXICMD_DEFTYPEFUNX): |
case (TEXICMD_DEFTYPEFN): |
case (TEXICMD_DEFTYPEFN): |
case (TEXICMD_DEFTYPEFNX): |
case (TEXICMD_DEFTYPEFNX): |
|
case (TEXICMD_DEFTYPEMETHOD): |
|
case (TEXICMD_DEFTYPEMETHODX): |
teximacroopen(p, "Ft"); |
teximacroopen(p, "Ft"); |
parselinearg(p, buf, sz, pos); |
parselinearg(p, buf, sz, pos); |
teximacroclose(p); |
teximacroclose(p); |
|
|
doverb(struct texi *p, enum texicmd cmd, |
doverb(struct texi *p, enum texicmd cmd, |
const char *buf, size_t sz, size_t *pos) |
const char *buf, size_t sz, size_t *pos) |
{ |
{ |
|
char delim; |
|
size_t start; |
|
|
|
while (*pos < sz && isws(buf[*pos])) |
|
advance(p, buf, pos); |
|
if (*pos == sz || '{' != buf[*pos]) |
|
return; |
|
advance(p, buf, pos); |
|
if (*pos == sz) |
|
return; |
|
|
|
delim = buf[*pos]; |
|
advance(p, buf, pos); |
|
/* Make sure we flush out our initial whitespace... */ |
|
if (p->seenws && p->outcol && 0 == p->literal) |
|
texiputchar(p, ' '); |
|
p->seenws = 0; |
|
start = *pos; |
|
/* Read until we see the delimiter then end-brace. */ |
|
while (*pos < sz - 1) { |
|
if (buf[*pos] == delim && buf[*pos + 1] == '}') |
|
break; |
|
advance(p, buf, pos); |
|
} |
|
if (*pos == sz - 1) |
|
return; |
|
texiputbuf(p, buf, start, *pos); |
|
|
|
/* Make sure we read after the end-brace. */ |
|
assert(delim == buf[*pos]); |
|
advance(p, buf, pos); |
|
assert('}' == buf[*pos]); |
|
advance(p, buf, pos); |
|
} |
|
|
|
static void |
|
doverbatim(struct texi *p, enum texicmd cmd, |
|
const char *buf, size_t sz, size_t *pos) |
|
{ |
const char *end, *term; |
const char *end, *term; |
size_t endsz, endpos; |
size_t endsz, endpos; |
|
|
Line 829 doaccent(struct texi *p, enum texicmd cmd, |
|
Line 884 doaccent(struct texi *p, enum texicmd cmd, |
|
|
|
if (*pos == sz) |
if (*pos == sz) |
return; |
return; |
advance(p, buf, pos); |
if (p->seenws && p->outcol && 0 == p->literal) |
|
texiputchar(p, ' '); |
|
p->seenws = 0; |
switch (cmd) { |
switch (cmd) { |
|
case (TEXICMD_CEDILLA): |
|
/* Strange rules... */ |
|
while (*pos < sz && isws(buf[*pos])) |
|
advance(p, buf, pos); |
|
if (*pos == sz || '{' != buf[*pos]) |
|
return; |
|
advance(p, buf, pos); |
|
switch (buf[*pos]) { |
|
case ('c'): case ('C'): |
|
texiputchars(p, "\\(,"); |
|
texiputchar(p, buf[*pos]); |
|
break; |
|
default: |
|
texiputchar(p, buf[*pos]); |
|
break; |
|
} |
|
advance(p, buf, pos); |
|
break; |
case (TEXICMD_ACUTE): |
case (TEXICMD_ACUTE): |
switch (buf[*pos]) { |
switch (buf[*pos]) { |
case ('a'): case ('A'): |
case ('a'): case ('A'): |
Line 857 doaccent(struct texi *p, enum texicmd cmd, |
|
Line 932 doaccent(struct texi *p, enum texicmd cmd, |
|
break; |
break; |
default: |
default: |
texiputchar(p, buf[*pos]); |
texiputchar(p, buf[*pos]); |
|
break; |
} |
} |
break; |
break; |
case (TEXICMD_GRAVE): |
case (TEXICMD_GRAVE): |
Line 883 doaccent(struct texi *p, enum texicmd cmd, |
|
Line 959 doaccent(struct texi *p, enum texicmd cmd, |
|
break; |
break; |
default: |
default: |
texiputchar(p, buf[*pos]); |
texiputchar(p, buf[*pos]); |
|
break; |
} |
} |
break; |
break; |
case (TEXICMD_UMLAUT): |
case (TEXICMD_UMLAUT): |
Line 898 doaccent(struct texi *p, enum texicmd cmd, |
|
Line 975 doaccent(struct texi *p, enum texicmd cmd, |
|
break; |
break; |
default: |
default: |
texiputchar(p, buf[*pos]); |
texiputchar(p, buf[*pos]); |
|
break; |
} |
} |
break; |
break; |
default: |
default: |
abort(); |
abort(); |
} |
} |
|
advance(p, buf, pos); |
} |
} |
|
|
static void |
static void |
Line 935 dosymbol(struct texi *p, enum texicmd cmd, |
|
Line 1014 dosymbol(struct texi *p, enum texicmd cmd, |
|
texiputchars(p, "\\(co"); |
texiputchars(p, "\\(co"); |
break; |
break; |
case (TEXICMD_DOTS): |
case (TEXICMD_DOTS): |
|
case (TEXICMD_ENDDOTS): |
texiputchars(p, "..."); |
texiputchars(p, "..."); |
break; |
break; |
case (TEXICMD_EQUIV): |
case (TEXICMD_EQUIV): |
Line 961 dosymbol(struct texi *p, enum texicmd cmd, |
|
Line 1041 dosymbol(struct texi *p, enum texicmd cmd, |
|
case (TEXICMD_RESULT): |
case (TEXICMD_RESULT): |
texiputchars(p, "\\(rA"); |
texiputchars(p, "\\(rA"); |
break; |
break; |
|
case (TEXICMD_SLASH): |
|
texiputchar(p, '/'); |
|
break; |
case (TEXICMD_SQUIGGLE_LEFT): |
case (TEXICMD_SQUIGGLE_LEFT): |
texiputchars(p, "{"); |
texiputchars(p, "{"); |
break; |
break; |
|
|
domath(struct texi *p, enum texicmd cmd, |
domath(struct texi *p, enum texicmd cmd, |
const char *buf, size_t sz, size_t *pos) |
const char *buf, size_t sz, size_t *pos) |
{ |
{ |
size_t nest; |
size_t nest, start; |
|
|
/* |
/* |
* Math handling is different from everything else. |
* Math handling is different from everything else. |
Line 1011 domath(struct texi *p, enum texicmd cmd, |
|
Line 1094 domath(struct texi *p, enum texicmd cmd, |
|
if (p->seenws && p->outcol && 0 == p->literal) |
if (p->seenws && p->outcol && 0 == p->literal) |
texiputchar(p, ' '); |
texiputchar(p, ' '); |
p->seenws = 0; |
p->seenws = 0; |
for (nest = 1; *pos < sz && nest > 0; ) { |
for (nest = 1, start = *pos; *pos < sz && nest > 0; ) { |
if ('{' == buf[*pos]) |
if ('{' == buf[*pos]) |
nest++; |
nest++; |
else if ('}' == buf[*pos]) |
else if ('}' == buf[*pos]) |
if (0 == --nest) |
if (0 == --nest) |
continue; |
continue; |
texiputchar(p, buf[*pos]); |
|
advance(p, buf, pos); |
advance(p, buf, pos); |
} |
} |
if (*pos == sz) |
if (*pos == sz) |
return; |
return; |
assert('}' == buf[*pos]); |
assert('}' == buf[*pos]); |
|
texiputbuf(p, buf, start, *pos); |
advance(p, buf, pos); |
advance(p, buf, pos); |
} |
} |
|
|
Line 1118 dolink(struct texi *p, enum texicmd cmd, |
|
Line 1201 dolink(struct texi *p, enum texicmd cmd, |
|
texiputchars(p, "see Section"); |
texiputchars(p, "see Section"); |
teximacroopen(p, "Qq"); |
teximacroopen(p, "Qq"); |
break; |
break; |
|
case (TEXICMD_INFOREF): |
|
texiputchars(p, "See Info file node"); |
|
teximacroopen(p, "Qq"); |
|
break; |
default: |
default: |
abort(); |
abort(); |
} |
} |
Line 1195 dosubsection(struct texi *p, enum texicmd cmd, |
|
Line 1282 dosubsection(struct texi *p, enum texicmd cmd, |
|
texierr(p, "\"%s\" in a literal scope!?", sects[sec]); |
texierr(p, "\"%s\" in a literal scope!?", sects[sec]); |
|
|
/* We don't have a subsubsection, so make one up. */ |
/* We don't have a subsubsection, so make one up. */ |
texivspace(p); |
if (sec > 1) |
|
texivspace(p); |
teximacroopen(p, sects[sec]); |
teximacroopen(p, sects[sec]); |
parseeoln(p, buf, sz, pos); |
parseeoln(p, buf, sz, pos); |
teximacroclose(p); |
teximacroclose(p); |
texivspace(p); |
if (sec > 1) |
|
texivspace(p); |
} |
} |
|
|
static void |
static void |