I was trying to fix the Emacs Template Toolkit mode file so that it correctly highlights multi-line directives. I could not find how to tell Emacs to make “.” match also a newline, but I found that the negative clause [^...] will match anything that is not specified, including newlines. So by using it with a rarely used character (such as a linefeed character, which is not commonly used in Unix) I can achieve what I wanted. The original regular expression was:
"\\(\\[%[-+]?\\)\\(.+?\\)\\([-+]?%\\]\\)"
and the new one is:
"\\(\\[%[-+]?\\)\\([^\r]+?\\)\\([-+]?%\\]\\)"
If someone knows if it is possible and how to enable multi-line regex matching in Emacs, I’d love to know!
5 responses so far ↓
1 Dave Cross // Mar 27, 2007 at 4:07 pm
Ooh… thanks for attempting to fix this. It’s something that has been (pretty low down) on my TODO list for years.
Please send me patches when you’re finished
2 Hitchhiker // Mar 27, 2007 at 4:20 pm
Hi Dave – wow! You were really quick in noticing my write up, I guess you do keep an eye on your server logs
My patch so far consists of replacing the regex as shown above. If I find a better way of doing it, I will let you know.
3 Tom Weissmann // Aug 7, 2007 at 2:50 pm
How about using the null character, as in [^]]?
4 Tom Weissmann // Oct 9, 2007 at 10:41 am
The null character is backslash zero.
5 Hitchhiker // Oct 9, 2007 at 11:20 pm
Tom: that sounds useful. I will try it out. Thanks!