* texi2mdoc: Have @math and @verb correctly escape arguments, add
@ 2015-02-23 14:36 kristaps
0 siblings, 0 replies; only message in thread
From: kristaps @ 2015-02-23 14:36 UTC (permalink / raw)
To: source
Log Message:
-----------
Have @math and @verb correctly escape arguments, add @cartouche, fix
accent marks.
Modified Files:
--------------
texi2mdoc:
extern.h
main.c
util.c
Revision Data
-------------
Index: extern.h
===================================================================
RCS file: /home/cvs/mdocml/texi2mdoc/extern.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -Lextern.h -Lextern.h -u -p -r1.8 -r1.9
--- extern.h
+++ extern.h
@@ -39,6 +39,8 @@ enum texicmd {
TEXICMD_BANG,
TEXICMD_BULLET,
TEXICMD_BYE,
+ TEXICMD_CARTOUCHE,
+ TEXICMD_CEDILLA,
TEXICMD_CENTER,
TEXICMD_CHAPTER,
TEXICMD_CINDEX,
@@ -66,6 +68,8 @@ enum texicmd {
TEXICMD_DEFTYPEFNX,
TEXICMD_DEFTYPEFUN,
TEXICMD_DEFTYPEFUNX,
+ TEXICMD_DEFTYPEMETHOD,
+ TEXICMD_DEFTYPEMETHODX,
TEXICMD_DEFTYPEVAR,
TEXICMD_DEFTYPEVARX,
TEXICMD_DEFTYPEVR,
@@ -86,6 +90,7 @@ enum texicmd {
TEXICMD_EMAIL,
TEXICMD_EMPH,
TEXICMD_END,
+ TEXICMD_ENDDOTS,
TEXICMD_ENUMERATE,
TEXICMD_ENV,
TEXICMD_EQUIV,
@@ -125,7 +130,7 @@ enum texicmd {
TEXICMD_IMAGE,
TEXICMD_INCLUDE,
TEXICMD_INDENTBLOCK,
- TEXICMD_USER_INDEX,
+ TEXICMD_INFOREF,
TEXICMD_INSERTCOPYING,
TEXICMD_ITEM,
TEXICMD_ITEMIZE,
@@ -168,6 +173,7 @@ enum texicmd {
TEXICMD_SETTITLE,
TEXICMD_SHORTCONTENTS,
TEXICMD_SLANTED,
+ TEXICMD_SLASH,
TEXICMD_SP,
TEXICMD_SPACE,
TEXICMD_SMALLBOOK,
@@ -205,6 +211,7 @@ enum texicmd {
TEXICMD_UNNUMBEREDSUBSUBSEC,
TEXICMD_UREF,
TEXICMD_URL,
+ TEXICMD_USER_INDEX,
TEXICMD_VALUE,
TEXICMD_VAR,
TEXICMD_VERB,
@@ -336,6 +343,7 @@ void teximacro(struct texi *, const char
void teximacroclose(struct texi *);
void teximacroopen(struct texi *, const char *);
void texipunctuate(struct texi *, const char *, size_t, size_t *);
+void texiputbuf(struct texi *p, const char *, size_t, size_t);
void texiputchar(struct texi *p, char);
void texiputchars(struct texi *, const char *);
void texivspace(struct texi *);
Index: util.c
===================================================================
RCS file: /home/cvs/mdocml/texi2mdoc/util.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -Lutil.c -Lutil.c -u -p -r1.8 -r1.9
--- util.c
+++ util.c
@@ -193,6 +193,21 @@ texiputchars(struct texi *p, const char
}
/*
+ * This puts all characters onto the output stream but makes sure to
+ * escape mdoc(7) slashes.
+ */
+void
+texiputbuf(struct texi *p, const char *buf, size_t start, size_t end)
+{
+
+ for ( ; start < end; start++) {
+ texiputchar(p, buf[start]);
+ if ('\\' == buf[start])
+ texiputchar(p, 'e');
+ }
+}
+
+/*
* Close an mdoc(7) macro opened with teximacroopen().
* If there are no more macros on the line, prints a newline.
*/
Index: main.c
===================================================================
RCS file: /home/cvs/mdocml/texi2mdoc/main.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -Lmain.c -Lmain.c -u -p -r1.33 -r1.34
--- main.c
+++ main.c
@@ -95,6 +95,8 @@ static const struct texitok __texitoks[T
{ dosymbol, "!", 1 }, /* TEXICMD_BANG */
{ dosymbol, "bullet", 6 }, /* TEXICMD_BULLET */
{ dobye, "bye", 3 }, /* TEXICMD_BYE */
+ { doblock, "cartouche", 9 }, /* TEXICMD_CARTOUCHE */
+ { doaccent, ",", 1 }, /* TEXICMD_CEDILLA */
{ doignline, "center", 6 }, /* TEXICMD_CENTER */
{ dosection, "chapter", 7 }, /* TEXICMD_CHAPTER */
{ doignline, "cindex", 6 }, /* TEXICMD_CINDEX */
@@ -122,6 +124,8 @@ static const struct texitok __texitoks[T
{ dodefn, "deftypefnx", 10 }, /* TEXICMD_DEFTYPEFNX */
{ dodefn, "deftypefun", 10 }, /* TEXICMD_DEFTYPEFUN */
{ dodefn, "deftypefunx", 11 }, /* TEXICMD_DEFTYPEFUNX */
+ { dodefn, "deftypemethod", 13 }, /* TEXICMD_DEFTYPEMETHOD */
+ { dodefn, "deftypemethodx", 14 }, /* TEXICMD_DEFTYPEMETHODX */
{ dodefn, "deftypevar", 10 }, /* TEXICMD_DEFTYPEVAR */
{ dodefn, "deftypevarx", 11 }, /* TEXICMD_DEFTYPEVARX */
{ dodefn, "deftypevr", 9 }, /* TEXICMD_DEFTYPEVR */
@@ -142,6 +146,7 @@ static const struct texitok __texitoks[T
{ dolink, "email", 5 }, /* TEXICMD_EMAIL */
{ doinline, "emph", 4 }, /* TEXICMD_EMPH */
{ NULL, "end", 3 }, /* TEXICMD_END */
+ { dosymbol, "enddots", 7 }, /* TEXICMD_ENDDOTS */
{ doenumerate, "enumerate", 9 }, /* TEXICMD_ENUMERATE */
{ doinline, "env", 3 }, /* TEXICMD_ENV */
{ dosymbol, "equiv", 5 }, /* TEXICMD_EQUIV */
@@ -181,7 +186,7 @@ static const struct texitok __texitoks[T
{ doignbracket, "image", 5 }, /* TEXICMD_IMAGE */
{ doinclude, "include", 7 }, /* TEXICMD_INCLUDE */
{ dodisplay, "indentblock", 11 }, /* TEXICMD_INDENTBLOCK */
- { doignline, "", 0 }, /* TEXICMD_USER_INDEX */
+ { dolink, "inforef", 7 }, /* TEXICMD_INDENTBLOCK */
{ doignline, "insertcopying", 13 }, /* TEXICMD_INSERTCOPYING */
{ doitem, "item", 4 }, /* TEXICMD_ITEM */
{ doitemize, "itemize", 7 }, /* TEXICMD_ITEMIZE */
@@ -224,6 +229,7 @@ static const struct texitok __texitoks[T
{ dotitle, "settitle", 8 }, /* TEXICMD_SETTITLE */
{ doignline, "shortcontents", 13 }, /* TEXICMD_SHORTCONTENTS */
{ doinline, "slanted", 7 }, /* TEXICMD_SLANTED */
+ { dosymbol, "/", 1 }, /* TEXICMD_SLASH */
{ dosp, "sp", 2 }, /* TEXICMD_SP */
{ dosymbol, " ", 1 }, /* TEXICMD_SPACE */
{ doignline, "smallbook", 9 }, /* TEXICMD_SMALLBOOK */
@@ -261,6 +267,7 @@ static const struct texitok __texitoks[T
{ dosubsubsection, "unnumberedsubsubsec", 19 }, /* TEXICMD_UNNUMBEREDSUBSUBSEC */
{ dolink, "uref", 4 }, /* TEXICMD_UREF */
{ dolink, "url", 3 }, /* TEXICMD_URL */
+ { doignline, "", 0 }, /* TEXICMD_USER_INDEX */
{ dovalue, "value", 5 }, /* TEXICMD_VALUE */
{ doinline, "var", 3 }, /* TEXICMD_VAR */
{ doverb, "verb", 4 }, /* TEXICMD_VERB */
@@ -319,6 +326,7 @@ dodefn(struct texi *p, enum texicmd cmd,
case (TEXICMD_DEFTP):
case (TEXICMD_DEFTYPEFN):
case (TEXICMD_DEFTYPEFUN):
+ case (TEXICMD_DEFTYPEMETHOD):
case (TEXICMD_DEFTYPEVAR):
case (TEXICMD_DEFTYPEVR):
case (TEXICMD_DEFUN):
@@ -341,6 +349,10 @@ dodefn(struct texi *p, enum texicmd cmd,
texivspace(p);
switch (cmd) {
+ case (TEXICMD_DEFTYPEMETHOD):
+ case (TEXICMD_DEFTYPEMETHODX):
+ texiputchars(p, "Method");
+ break;
case (TEXICMD_DEFMAC):
case (TEXICMD_DEFMACX):
texiputchars(p, "Macro");
@@ -389,6 +401,8 @@ dodefn(struct texi *p, enum texicmd cmd,
case (TEXICMD_DEFTYPEFUNX):
case (TEXICMD_DEFTYPEFN):
case (TEXICMD_DEFTYPEFNX):
+ case (TEXICMD_DEFTYPEMETHOD):
+ case (TEXICMD_DEFTYPEMETHODX):
teximacroopen(p, "Ft");
parselinearg(p, buf, sz, pos);
teximacroclose(p);
@@ -591,6 +605,7 @@ doverb(struct texi *p, enum texicmd cmd,
const char *buf, size_t sz, size_t *pos)
{
char delim;
+ size_t start;
while (*pos < sz && isws(buf[*pos]))
advance(p, buf, pos);
@@ -606,15 +621,17 @@ doverb(struct texi *p, enum texicmd cmd,
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;
- texiputchar(p, buf[*pos]);
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);
@@ -867,8 +884,28 @@ doaccent(struct texi *p, enum texicmd cm
if (*pos == sz)
return;
- advance(p, buf, pos);
+ if (p->seenws && p->outcol && 0 == p->literal)
+ texiputchar(p, ' ');
+ p->seenws = 0;
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):
switch (buf[*pos]) {
case ('a'): case ('A'):
@@ -895,6 +932,7 @@ doaccent(struct texi *p, enum texicmd cm
break;
default:
texiputchar(p, buf[*pos]);
+ break;
}
break;
case (TEXICMD_GRAVE):
@@ -921,6 +959,7 @@ doaccent(struct texi *p, enum texicmd cm
break;
default:
texiputchar(p, buf[*pos]);
+ break;
}
break;
case (TEXICMD_UMLAUT):
@@ -936,11 +975,13 @@ doaccent(struct texi *p, enum texicmd cm
break;
default:
texiputchar(p, buf[*pos]);
+ break;
}
break;
default:
abort();
}
+ advance(p, buf, pos);
}
static void
@@ -973,6 +1014,7 @@ dosymbol(struct texi *p, enum texicmd cm
texiputchars(p, "\\(co");
break;
case (TEXICMD_DOTS):
+ case (TEXICMD_ENDDOTS):
texiputchars(p, "...");
break;
case (TEXICMD_EQUIV):
@@ -999,6 +1041,9 @@ dosymbol(struct texi *p, enum texicmd cm
case (TEXICMD_RESULT):
texiputchars(p, "\\(rA");
break;
+ case (TEXICMD_SLASH):
+ texiputchar(p, '/');
+ break;
case (TEXICMD_SQUIGGLE_LEFT):
texiputchars(p, "{");
break;
@@ -1033,7 +1078,7 @@ static void
domath(struct texi *p, enum texicmd cmd,
const char *buf, size_t sz, size_t *pos)
{
- size_t nest;
+ size_t nest, start;
/*
* Math handling is different from everything else.
@@ -1049,18 +1094,18 @@ domath(struct texi *p, enum texicmd cmd,
if (p->seenws && p->outcol && 0 == p->literal)
texiputchar(p, ' ');
p->seenws = 0;
- for (nest = 1; *pos < sz && nest > 0; ) {
+ for (nest = 1, start = *pos; *pos < sz && nest > 0; ) {
if ('{' == buf[*pos])
nest++;
else if ('}' == buf[*pos])
if (0 == --nest)
continue;
- texiputchar(p, buf[*pos]);
advance(p, buf, pos);
}
if (*pos == sz)
return;
assert('}' == buf[*pos]);
+ texiputbuf(p, buf, start, *pos);
advance(p, buf, pos);
}
@@ -1156,6 +1201,10 @@ dolink(struct texi *p, enum texicmd cmd,
texiputchars(p, "see Section");
teximacroopen(p, "Qq");
break;
+ case (TEXICMD_INFOREF):
+ texiputchars(p, "See Info file node");
+ teximacroopen(p, "Qq");
+ break;
default:
abort();
}
@@ -1233,11 +1282,13 @@ dosubsection(struct texi *p, enum texicm
texierr(p, "\"%s\" in a literal scope!?", sects[sec]);
/* We don't have a subsubsection, so make one up. */
- texivspace(p);
+ if (sec > 1)
+ texivspace(p);
teximacroopen(p, sects[sec]);
parseeoln(p, buf, sz, pos);
teximacroclose(p);
- texivspace(p);
+ if (sec > 1)
+ texivspace(p);
}
static void
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2015-02-23 14:36 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-23 14:36 texi2mdoc: Have @math and @verb correctly escape arguments, add kristaps
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).