diff options
| author | Steven Dee <steve@smartercode.net> | 2013-06-22 15:59:28 -0400 |
|---|---|---|
| committer | Steven Dee <steve@smartercode.net> | 2013-06-22 16:14:25 -0400 |
| commit | b8bb25f4a7a08c5cecb21abab3835b25a079c7ec (patch) | |
| tree | e5e34a8b8c3716affb17095ef29a9e7dac597056 | |
| parent | 1df23c38824a74849c176a5a3bd54d9f1dba8817 (diff) | |
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.
| -rw-r--r-- | smu.c | 6 | ||||
| -rw-r--r-- | testdoc | 2 |
2 files changed, 6 insertions, 2 deletions
@@ -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) @@ -7,6 +7,8 @@ simple tests first paragraph. testing surround: _emph_ then **strong** and `code`. +`\`escaped backticks\``. + `x = *y * 6;` horizontal rule: |