(CHAIN OF THOUGH, PROBABLY DEPRECATED) Thanks for all the RegExp help ... I'm getting closer but it seems far from a cigar. I tried to add this, after the normal tag declaration (that is, almost first in the language)
{ name = "declaration.tag.html"; match = "<(img)[^>]*(>)"; captures = { 1 = { name = "entity.name.tag.img.html"; }; 2 = { name = "meta.scope.between-tag-pair.html"; }; }; },
It's a modified version of the first code, since no image tags have closing </img> things, but rather <img ... > I removed the \b and the </(\1)> parts. Also the removed the last capture. Now this does indeed make the scope catch entity.name.tag.img.html (is that the correct syntax?) but it does not capture any of the attributes in between. Now from looking at this it seems the only thing that would be captured as meta.scope.between-tag-pair.html would be the final > from the code above, but I tried some other stuff and I always got stuck with either having img tags or attributes, not both :( I also do not really get the inital (?i:( part of the original tag catching code, shouldn't ?'s be used after something to mean 1 or 0 occurrences of that very thing? (I also suppose : is some xml thingie) Just noted that (?:subexp) means "not captured group", but that wouldn't apply here since there's an "i" in between? It feels quite hard after all, since it's difficult to read and understand the underlying ideas with all capture rules. (END CHAIN OF THOUGHT)
DID SOME MORE RESEARCH and found out that perhaps I should rather have edited further down and popped in something like { name = "declaration.tag.html"; begin = "<(img)"; end = ">"; captures = { 1 = { name = "entity.name.img.tag.html"; }; }; patterns = ( { include = "#tag-stuff"; } ); },
which makes sense given the repository and the tag-stuff, but this doesn't seem to do anything either, and if this is the place where tags are caught (which seems likely since it worked rather fine even when i removed the code mentioned above), what does the { name = "declaration.tag.html"; match = "<(?i:(head|table|thead|tbody|tfoot|tr|td|div| fieldset|style|script|ul|ol|li|form|dl))\b[^>]*(>)</(\1)>"; captures = { 1 = { name = "entity.name.tag.html"; }; 2 = { name = "meta.scope.between-tag-pair.html"; }; 3 = { name = "entity.name.tag.html"; }; }; },
part do?
Lots of questions, I know. Hate to be a bother and all that but I've spent quite some time trying to get my head around this and it would be nice to get to the bottom of it. I hope I haven't overlooked any obvious source that tells me all the answers. I have looked in the TextMate blog and also on the RegExp that textmate is said to follow (though not overly studied either source). Hope I'm not being overly lazy by posting all these questions instead of fighting it out like a man with a big manual.
hehe, as a final, light note, I entered the word bar in a file and then tried to a regexp find for both bar\w bar\w (bar)\w (bar)\w but neither found it, what was wrong with that?
Andreas