Fix escaping with surrounds

When we assigned stop = strstr(start, search), we'd grab the first
match even if it was escaped. Instead, we update stop as we go.
This commit is contained in:
Steven Dee 2013-06-22 15:59:28 -04:00
parent 1df23c3882
commit b8bb25f4a7
2 changed files with 6 additions and 2 deletions

6
smu.c
View file

@ -449,10 +449,12 @@ dosurround(const char *begin, const char *end, int newblock) {
start = begin + l;
p = start - 1;
do {
stop = p;
p = strstr(p + 1, surround[i].search);
} while(p && p[-1] == '\\');
if(!p || p >= end ||
!(stop = strstr(start, surround[i].search)) || stop >= end)
if (p && p[-1] != '\\')
stop = p;
if(!stop || stop < start || stop >= end)
continue;
fputs(surround[i].before, stdout);
if(surround[i].process)

View file

@ -7,6 +7,8 @@ simple tests
first paragraph.
testing surround: _emph_ then **strong** and `code`.
`\`escaped backticks\``.
`x = *y * 6;`
horizontal rule: