cmark

My personal build of CMark ✏️

Commit
555472cf8d1ffe99506fdbd2a87e2e33bb3b197f
Parent
cdb0a5e8602ce2475555c48c9f285e736ccb22ef
Author
John MacFarlane <jgm@berkeley.edu>
Date

Fixed tabs in indentation.

Closes #101.

This patch fixes `S_advance_offset` so that it doesn't gobble a tab character when advancing less than the width of a tab.

Diffstat

2 files changed, 12 insertions, 10 deletions

Status File Name N° Changes Insertions Deletions
Modified man/man3/cmark.3 14 7 7
Modified src/blocks.c 8 5 3
diff --git a/man/man3/cmark.3 b/man/man3/cmark.3
@@ -1,4 +1,4 @@
-.TH cmark 3 "January 11, 2016" "LOCAL" "Library Functions Manual"
+.TH cmark 3 "February 02, 2016" "LOCAL" "Library Functions Manual"
 .SH
 NAME
 .PP
@@ -363,8 +363,8 @@ otherwise 0.
 \fIint\f[] \fBcmark_node_set_list_start\f[](\fIcmark_node *node\f[], \fIint start\f[])
 
 .PP
-Sets starting number of \f[I]node\f[], if it is an ordered list. Returns
-1 on success, 0 on failure.
+Sets starting number of \f[I]node\f[], if it is an ordered list.
+Returns 1 on success, 0 on failure.
 
 .PP
 \fIint\f[] \fBcmark_node_get_list_tight\f[](\fIcmark_node *node\f[])
@@ -389,8 +389,8 @@ Returns the info string from a fenced code block.
 \fIint\f[] \fBcmark_node_set_fence_info\f[](\fIcmark_node *node\f[], \fIconst char *info\f[])
 
 .PP
-Sets the info string in a fenced code block, returning 1 on success and
-0 on failure.
+Sets the info string in a fenced code block, returning 1 on success
+and 0 on failure.
 
 .PP
 \fIconst char *\f[] \fBcmark_node_get_url\f[](\fIcmark_node *node\f[])
@@ -517,8 +517,8 @@ Returns 1 on success, 0 on failure.
 \fIint\f[] \fBcmark_node_append_child\f[](\fIcmark_node *node\f[], \fIcmark_node *child\f[])
 
 .PP
-Adds \f[I]child\f[] to the end of the children of \f[I]node\f[]. Returns
-1 on success, 0 on failure.
+Adds \f[I]child\f[] to the end of the children of \f[I]node\f[].
+Returns 1 on success, 0 on failure.
 
 .PP
 \fIvoid\f[] \fBcmark_consolidate_text_nodes\f[](\fIcmark_node *root\f[])
diff --git a/src/blocks.c b/src/blocks.c
@@ -570,12 +570,14 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input,
                              bufsize_t count, bool columns) {
   char c;
   int chars_to_tab;
+  int chars_to_advance;
   while (count > 0 && (c = peek_at(input, parser->offset))) {
     if (c == '\t') {
       chars_to_tab = TAB_STOP - (parser->column % TAB_STOP);
-      parser->column += chars_to_tab;
-      parser->offset += 1;
-      count -= (columns ? chars_to_tab : 1);
+      chars_to_advance = chars_to_tab > count ? count : chars_to_tab;
+      parser->column += chars_to_advance;
+      parser->offset += chars_to_advance < chars_to_tab ? 0 : 1;
+      count -= (columns ? chars_to_advance : 1);
     } else {
       parser->offset += 1;
       parser->column += 1; // assume ascii; block starts are ascii