diff options
| -rw-r--r-- | src/blocks.c | 21 | 
1 files changed, 16 insertions, 5 deletions
diff --git a/src/blocks.c b/src/blocks.c index 20ea579..ff102c9 100644 --- a/src/blocks.c +++ b/src/blocks.c @@ -17,6 +17,10 @@  #define CODE_INDENT 4  #define TAB_STOP 4 +#ifndef MIN +#define MIN(x, y) ((x < y) ? x : y) +#endif +  #define peek_at(i, n) (i)->data[n]  static inline bool S_is_line_end_char(char c) { @@ -587,11 +591,18 @@ static void S_advance_offset(cmark_parser *parser, cmark_chunk *input,    while (count > 0 && (c = peek_at(input, parser->offset))) {      if (c == '\t') {        chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); -      parser->partially_consumed_tab = columns && chars_to_tab > count; -      chars_to_advance = parser->partially_consumed_tab ? count : chars_to_tab; -      parser->column += chars_to_advance; -      parser->offset += parser->partially_consumed_tab ? 0 : 1; -      count -= (columns ? chars_to_advance : 1); +      if (columns) { +	parser->partially_consumed_tab = chars_to_tab > count; +	chars_to_advance = MIN(count, chars_to_tab); +	parser->column += chars_to_advance; +        parser->offset += (parser->partially_consumed_tab ? 0 : 1); +	count -= chars_to_advance; +      } else { +	parser->partially_consumed_tab = false; +	parser->column += chars_to_tab; +	parser->offset += 1; +	count -= 1; +      }      } else {        parser->partially_consumed_tab = false;        parser->offset += 1;  | 
