> Looking at the diff, the b was previously a <, so the intent was to  
> convert \< to \b (because of a change in the regexp library), but  
> accidentally all <’s where converted to b’s.
> I have now reverted this part of r976, better late than never :)

Excellent!  My first bug report and fix!  Most exciting.  Please forgive my enthusiasm; I only came to programming in a serious way about a year ago.  I was 'inspired' to do so by a custom program my company rolled out that was so astonishingly awful that I felt that I had to demonstrate that better could be done.  So, a year later, with 20+ newly purchased yet well worn O'Reilly titles on my shelf, it's nice to be able to start contributing back to projects I like.

In addition, I have found another small problem with the Python bundle - it has to do with the way it scopes 'meta.item-access.python' sections.

In particular, it gets confused by the end ], and does not recognize it as 'punctuation.definition.arguments.end.python', although it recognizes the lead [ correctly as 'punctuation.definition.arguments.start.python'.  For instance, put the following in TextMate as Python, and note the scopes/coloring of the []'s.

pairing_name = findNextWord(packet[row])[0]

The regexes responsible are below, along with my explanation of the problem and proposed fix:

{ name = 'meta.item-access.python';
begin = '(?=[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*\s*\[)';
end = '(\])';
patterns = (
{ begin = '(?=[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\s*\[)';
end = '(?=\s*\[)';
patterns = ( { include = '#dotted_name'; } );
},
{ begin = '(\[)';
end = '(?=\])';
beginCaptures = { 1 = { name = 'punctuation.definition.arguments.begin.python'; }; };
endCaptures = { 1 = { name = 'punctuation.definition.arguments.end.python'; }; };
patterns = ( { include = '$base'; } );
contentName = 'meta.item-access.arguments.python';
},



The problem is that the 'meta.item-access.python' begin regex tags a LOCATION, specifically the location of the beginning of the first legit Python dotted name followed by a [, thus correctly allowing the [ itself to be matched within by 'punctuation.definition.arguments.begin.python'.  However, the 'meta.item-access.python' end regex tags not the LOCATION of the end ], but the end ] itself, thus preventing 'punctuation.definition.arguments.end.python' from selecting the end ] as it should.  In addition, the regex for 'punctuation.definition.arguments.end.python', instead of selecting the end ], selects the LOCATION followed by an end ], which gives it no characters in its scope!

My proposed fix swaps the two; both the start and end 'meta.item-access.python' regexes select for LOCATION, and both 'punctuation.definition.arguments.begin.python' and 'punctuation.definition.arguments.end.python' select for the actual CHARACTERS [ and ].  The code is below, and I have tested that it properly scopes the Python constructs now.

{ name = 'meta.item-access.python';
begin = '(?=[A-Za-z_][A-Za-z0-9_]*(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*\s*\[)';
end = '(?<=\])';
patterns = (
{ begin = '(?=[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z_][A-Za-z0-9_]*)*\s*\[)';
end = '(?=\s*\[)';
patterns = ( { include = '#dotted_name'; } );
},
{ begin = '(\[)';
end = '(\])';
beginCaptures = { 1 = { name = 'punctuation.definition.arguments.begin.python'; }; };
endCaptures = { 1 = { name = 'punctuation.definition.arguments.end.python'; }; };
patterns = ( { include = '$base'; } );
contentName = 'meta.item-access.arguments.python';
},
);
},

Hope this is helpful - I am (slowly!) looking through the rest of the Python language definition to see if there are any other glitches I can spot.  Cheers,

Nick