Lorenzo Bettini wrote:
gnombat wrote:
I'm having trouble with backreferences in source-highlight 2.7. If I
create a language definition file named foo.lang:
keyword = `a(.)\1`
And then I create a test file example.foo:
aaa abb acc a** a@@
And then I run source-highlight:
source-highlight --lang-def=foo.lang example.foo
Then "aaa", "abb" and "acc" are highlighted, but "a**" and "a@@" are
not. Shouldn't the dot match any character?
yes you're right, so this must be a bug...
I'll try to work on it tomorrow
thanks for the feedback!
cheers
Lorenzo
I think I figured out what is going on: is_to_isolate from
regexpstatebuilder.cpp is treating the regular expression as an
alphanumerical string because `a(.)\1` starts and ends with a letter or
number.
/**
* An expression is isolated basically if it is an alphanumerical
* string
* TODO check whether this is actually correct in principle
* @param s
* @return
*/
bool is_to_isolate(const string &s) {
if (s.size()) {
if ((isalnum(s[0]) || s[0] == '_') && (isalnum(s[s.size()-1]) ||
s[s.size()-1] == '_'))
return true;
}
return false;
}
Then the whole regular expression gets surrounded with word boundary
characters. This causes the match to fail with "a**" and "a@@".