diff -Naur redcloth/ext/redcloth_scan/redcloth.h ../redcloth/ext/redcloth_scan/redcloth.h --- redcloth/ext/redcloth_scan/redcloth.h 2009-01-04 23:47:40.000000000 -0600 +++ ../redcloth/ext/redcloth_scan/redcloth.h 2009-01-04 23:45:27.000000000 -0600 @@ -97,8 +97,22 @@ char punct = 1; \ while (p > reg && punct == 1) { \ switch (*(p - 1)) { \ + case ')': \ + { /*needed to keep inside chars scoped for less memory usage*/\ + char *temp_p = p - 1; \ + char level = -1; \ + while (temp_p > reg) { \ + switch(*(temp_p - 1)) { \ + case '(': ++level; break; \ + case ')': --level; break; \ + } \ + --temp_p; \ + } \ + if (level == 0) { punct = 0; } else { --p; } \ + } \ + break; \ case '!': case '"': case '#': case '$': case '%': case ']': case '[': case '&': case '\'': \ - case '*': case '+': case ',': case '-': case '.': case ')': case '(': case ':': \ + case '*': case '+': case ',': case '-': case '.': case '(': case ':': \ case ';': case '=': case '?': case '@': case '\\': case '^': case '_': \ case '`': case '|': case '~': p--; break; \ default: punct = 0; \