cmark

My personal build of CMark ✏️

Commit
26305f4eff1e2205c1259e82076295a575d7ca41
Parent
88078d6479b50f84acba80f2a4c0779e52159beb
Author
John MacFarlane <jgm@berkeley.edu>
Date

Use cmark_render_code_point in renderers.

Diffstat

2 files changed, 40 insertions, 57 deletions

Status File Name N° Changes Insertions Deletions
Modified src/commonmark.c 11 4 7
Modified src/latex.c 86 36 50
diff --git 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
@@ -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  {