diff options
-rw-r--r-- | src/commonmark.c | 11 | ||||
-rw-r--r-- | src/latex.c | 86 |
2 files changed, 40 insertions, 57 deletions
diff --git a/src/commonmark.c b/src/commonmark.c index 7dc2767..5d098e7 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -50,16 +50,13 @@ static inline void outc(cmark_renderer *renderer, cmark_strbuf_printf(renderer->buffer, "%%%2x", c); renderer->column += 3; } else { - cmark_strbuf_putc(renderer->buffer, '\\'); - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 2; + cmark_render_ascii(renderer, "\\"); + cmark_render_code_point(renderer, c); } - renderer->begin_line = false; } else { - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; - renderer->begin_line = false; + cmark_render_code_point(renderer, c); } + renderer->begin_line = (c == 10); } diff --git a/src/latex.c b/src/latex.c index bf0c65e..592c40c 100644 --- a/src/latex.c +++ b/src/latex.c @@ -17,7 +17,6 @@ #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, @@ -25,8 +24,7 @@ static inline void outc(cmark_renderer *renderer, unsigned char nextc) { if (escape == LITERAL) { - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_code_point(renderer, c); } else { switch(c) { case 123: // '{' @@ -34,129 +32,117 @@ static inline void outc(cmark_renderer *renderer, case 35: // '#' case 37: // '%' case 38: // '&' - ASCII("\\"); - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_ascii(renderer, "\\"); + cmark_render_code_point(renderer, c); break; case 36: // '$' case 95: // '_' if (escape == NORMAL) { - ASCII("\\"); + cmark_render_ascii(renderer, "\\"); } - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_code_point(renderer, c); break; case 45 : // '-' if (nextc == 45) { // prevent ligature - ASCII("\\-"); + cmark_render_ascii(renderer, "\\-"); } else { - ASCII("-"); + cmark_render_ascii(renderer, "-"); } break; case 126: // '~' if (escape == NORMAL) { - ASCII("\\textasciitilde{}"); + cmark_render_ascii(renderer, "\\textasciitilde{}"); } else { - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_code_point(renderer, c); } break; case 94: // '^' - ASCII("\\^{}"); + cmark_render_ascii(renderer, "\\^{}"); break; case 92: // '\\' if (escape == URL) { // / acts as path sep even on windows: - ASCII("/"); + cmark_render_ascii(renderer, "/"); } else { - ASCII("\\textbackslash{}"); + cmark_render_ascii(renderer, "\\textbackslash{}"); } break; case 124: // '|' - ASCII("\\textbar{}"); + cmark_render_ascii(renderer, "\\textbar{}"); break; case 60: // '<' - ASCII("\\textless{}"); + cmark_render_ascii(renderer, "\\textless{}"); break; case 62: // '>' - ASCII("\\textgreater{}"); + cmark_render_ascii(renderer, "\\textgreater{}"); break; case 91: // '[' case 93: // ']' - ASCII("{"); - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; - ASCII("}"); + cmark_render_ascii(renderer, "{"); + cmark_render_code_point(renderer, c); + cmark_render_ascii(renderer, "}"); break; case 34: // '"' - ASCII("\\textquotedbl{}"); + cmark_render_ascii(renderer, "\\textquotedbl{}"); // requires \usepackage[T1]{fontenc} break; case 39: // '\'' - ASCII("\\textquotesingle{}"); + cmark_render_ascii(renderer, "\\textquotesingle{}"); // requires \usepackage{textcomp} break; case 160: // nbsp - ASCII("~"); - renderer->column += 1; + cmark_render_ascii(renderer, "~"); break; case 8230: // hellip - ASCII("\\ldots{}"); + cmark_render_ascii(renderer, "\\ldots{}"); break; case 8216: // lsquo if (escape == NORMAL) { - ASCII("`"); + cmark_render_ascii(renderer, "`"); } else { - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_code_point(renderer, c); } break; case 8217: // rsquo if (escape == NORMAL) { - ASCII("\'"); + cmark_render_ascii(renderer, "\'"); } else { - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_code_point(renderer, c); } break; case 8220: // ldquo if (escape == NORMAL) { - ASCII("``"); + cmark_render_ascii(renderer, "``"); } else { - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_code_point(renderer, c); } break; case 8221: // rdquo if (escape == NORMAL) { - ASCII("''"); + cmark_render_ascii(renderer, "''"); } else { - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_code_point(renderer, c); } break; case 8212: // emdash if (escape == NORMAL) { - ASCII("---"); + cmark_render_ascii(renderer, "---"); } else { - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_code_point(renderer, c); } break; case 8211: // endash if (escape == NORMAL) { - ASCII("--"); + cmark_render_ascii(renderer, "--"); } else { - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; + cmark_render_code_point(renderer, c); } break; default: - utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; - renderer->begin_line = false; + cmark_render_code_point(renderer, c); } } + renderer->begin_line = (c == 10); } typedef enum { |