summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/latex.c81
1 files changed, 28 insertions, 53 deletions
diff --git a/src/latex.c b/src/latex.c
index 4fd1199..bf0c65e 100644
--- a/src/latex.c
+++ b/src/latex.c
@@ -17,6 +17,7 @@
#define LIT(s) renderer->out(renderer, s, false, LITERAL)
#define CR() renderer->cr(renderer)
#define BLANKLINE() renderer->blankline(renderer)
+#define ASCII(s) cmark_render_ascii(renderer, s)
static inline void outc(cmark_renderer *renderer,
cmark_escaping escape,
@@ -33,99 +34,78 @@ static inline void outc(cmark_renderer *renderer,
case 35: // '#'
case 37: // '%'
case 38: // '&'
- cmark_strbuf_putc(renderer->buffer, '\\');
+ ASCII("\\");
utf8proc_encode_char(c, renderer->buffer);
- renderer->column += 2;
+ renderer->column += 1;
break;
case 36: // '$'
case 95: // '_'
if (escape == NORMAL) {
- cmark_strbuf_putc(renderer->buffer, '\\');
- renderer->column += 1;
+ ASCII("\\");
}
utf8proc_encode_char(c, renderer->buffer);
renderer->column += 1;
break;
case 45 : // '-'
if (nextc == 45) { // prevent ligature
- cmark_strbuf_putc(renderer->buffer, '\\');
- renderer->column += 1;
+ ASCII("\\-");
+ } else {
+ ASCII("-");
}
- utf8proc_encode_char(c, renderer->buffer);
- renderer->column += 1;
- break;
+ break;
case 126: // '~'
if (escape == NORMAL) {
- cmark_strbuf_puts(renderer->buffer,
- "\\textasciitilde{}");
- renderer->column += 17;
+ ASCII("\\textasciitilde{}");
} else {
utf8proc_encode_char(c, renderer->buffer);
renderer->column += 1;
}
break;
case 94: // '^'
- cmark_strbuf_puts(renderer->buffer,
- "\\^{}");
- renderer->column += 4;
+ ASCII("\\^{}");
break;
case 92: // '\\'
if (escape == URL) {
// / acts as path sep even on windows:
- cmark_strbuf_puts(renderer->buffer, "/");
- renderer->column += 1;
+ ASCII("/");
} else {
- cmark_strbuf_puts(renderer->buffer,
- "\\textbackslash{}");
- renderer->column += 16;
+ ASCII("\\textbackslash{}");
}
break;
case 124: // '|'
- cmark_strbuf_puts(renderer->buffer,
- "\\textbar{}");
- renderer->column += 10;
+ ASCII("\\textbar{}");
break;
case 60: // '<'
- cmark_strbuf_puts(renderer->buffer,
- "\\textless{}");
- renderer->column += 11;
+ ASCII("\\textless{}");
break;
case 62: // '>'
- cmark_strbuf_puts(renderer->buffer,
- "\\textgreater{}");
- renderer->column += 14;
+ ASCII("\\textgreater{}");
break;
case 91: // '['
case 93: // ']'
- cmark_strbuf_putc(renderer->buffer, '{');
+ ASCII("{");
utf8proc_encode_char(c, renderer->buffer);
- cmark_strbuf_putc(renderer->buffer, '}');
- renderer->column += 3;
+ renderer->column += 1;
+ ASCII("}");
break;
case 34: // '"'
- cmark_strbuf_puts(renderer->buffer,
- "\\textquotedbl{}");
+ ASCII("\\textquotedbl{}");
// requires \usepackage[T1]{fontenc}
- renderer->column += 15;
break;
case 39: // '\''
- cmark_strbuf_puts(renderer->buffer,
- "\\textquotesingle{}");
- renderer->column += 18;
+ ASCII("\\textquotesingle{}");
// requires \usepackage{textcomp}
break;
case 160: // nbsp
- cmark_strbuf_putc(renderer->buffer, '~');
+ ASCII("~");
renderer->column += 1;
break;
case 8230: // hellip
- cmark_strbuf_puts(renderer->buffer, "\\ldots{}");
- renderer->column += 8;
+ ASCII("\\ldots{}");
break;
case 8216: // lsquo
if (escape == NORMAL) {
- cmark_strbuf_putc(renderer->buffer, '`');
- renderer->column += 1;
+ ASCII("`");
} else {
utf8proc_encode_char(c, renderer->buffer);
renderer->column += 1;
@@ -133,8 +113,7 @@ static inline void outc(cmark_renderer *renderer,
break;
case 8217: // rsquo
if (escape == NORMAL) {
- cmark_strbuf_putc(renderer->buffer, '\'');
- renderer->column += 1;
+ ASCII("\'");
} else {
utf8proc_encode_char(c, renderer->buffer);
renderer->column += 1;
@@ -142,8 +121,7 @@ static inline void outc(cmark_renderer *renderer,
break;
case 8220: // ldquo
if (escape == NORMAL) {
- cmark_strbuf_puts(renderer->buffer, "``");
- renderer->column += 2;
+ ASCII("``");
} else {
utf8proc_encode_char(c, renderer->buffer);
renderer->column += 1;
@@ -151,8 +129,7 @@ static inline void outc(cmark_renderer *renderer,
break;
case 8221: // rdquo
if (escape == NORMAL) {
- cmark_strbuf_puts(renderer->buffer, "''");
- renderer->column += 2;
+ ASCII("''");
} else {
utf8proc_encode_char(c, renderer->buffer);
renderer->column += 1;
@@ -160,8 +137,7 @@ static inline void outc(cmark_renderer *renderer,
break;
case 8212: // emdash
if (escape == NORMAL) {
- cmark_strbuf_puts(renderer->buffer, "---");
- renderer->column += 3;
+ ASCII("---");
} else {
utf8proc_encode_char(c, renderer->buffer);
renderer->column += 1;
@@ -169,8 +145,7 @@ static inline void outc(cmark_renderer *renderer,
break;
case 8211: // endash
if (escape == NORMAL) {
- cmark_strbuf_puts(renderer->buffer, "--");
- renderer->column += 2;
+ ASCII("--");
} else {
utf8proc_encode_char(c, renderer->buffer);
renderer->column += 1;