Howdy.

The whole porpoise behind the javascript bundles is to add better code folding and nested bracket scopes.

I use the JavaScript bracketed proto language which calls my modified version of the Prototype language (Prototype and Scriptaculous Mod) which calls the Javascript language.

The practical upshot of all that is that I can give each level of a nest of brackets a slightly darker background color (As seen in the javascript section of the screecast using the iLife 05 2 theme) and I can keep the curly brackets on the same line as the function or whatever and still be able to fold the section.

Using the Prototype JS language from encytemedia adds some nice scopes to prototype specific words. Also, the MochiKit (js) language does the same thing for MochiKit DOM function names and I have the MochiKit HELP command to look up their functions in a TextMate HTML window from the API description.

The normal JS language uses:
foldingStartMarker = '^.*\bfunction\s*(\w+\s*)?\([^\)]*\)(\s*\{[^\}]*)?\s*$';
foldingStopMarker = '^\s*\}';

My version uses:
foldingStartMarker = '(^.*{[^}]*$|^.*\([^\)]*$|^.*/\*(?!.*\*/).*$)';
foldingStopMarker = '(^\s*\}|^\s*\)|^(?!.*/\*).*\*/)';

You can really see the difference on files like the MochiKit 1.2 : PACKED VERSION where nothing is tabbed properly, because of being compressed. Personally, I find having the opening curly bracket on the next line after the function to be truly horrible and unreadable, but that's just me. ;)

The slightly darker nested brackets are surprisingly addictive. I did it once, just to see what it would look like & if I could even do it, but now I  just can't work in any deeply nested language without it. I used to have to think hard and pay attention to what level of the nest i'm in, but now I never don't know. The normal balance command is also totally invaluable (if only it worked on nested html/xml tags, too).

It's not uncommon to see scopes like "source.js.bracketed.prototype meta.round-brackets.round meta.round-brackets.curly meta.round-brackets.curly meta.round-brackets.curly meta.round-brackets.curly meta.round-brackets.curly meta.round-brackets.round" using my version where the official js version just lists it as "source.js".

I know I should totally change the scope name from meta.round-brackets.round & …curly. But i'd have to change every bundle that uses it and every theme that uses it and I just haven't gotten around (or curly ;) ) to doing it yet.

Anybody have any suggestions on how I should name that? Should it even start with 'meta'?

Now that I have all this, I secretly wish more languages used curly brackets.

Thanks. (boy did I honk on for a while, huh)
PS: Yes, porpoise != purpose, that was merely for comedic effect. ;)

I've been trying to adapt the nested scopes thing to ruby's do…end,  if…end, etc… But then I lose the scope for the words themselves.


On Feb 6, 2006, at 4:55 AM, Andreas Wahlin wrote:

It would also be nice with some explanations for your JavaScript bundles and so on on that page :)
And I also like the x51-something bundle a lot!

Andreas