[TxMt] Re: Javascript Language Highlighter Misses Regex in Array
Joseph Pecoraro
joepeck02 at gmail.com
Thu Jun 26 23:08:40 UTC 2008
Hey again,
I worked with AlexRoss in ##textmate and found a possible solution (we
don't know if anything else broke but it looks good so far). I also
fixed something else in the process. I don't know who maintains the
language but maybe they can make an assessment on wether or not this
affects any edge cases (the comma change seems rather dangerous). If
all looks good I think it would be good to merge into the bundle.
Maybe change the "comment = 'JavaScript Syntax: version 2.0';" at the
top to update the version number? Here goes:
My changes and tests:
------------------------------
Test Cases:
[Make it obvious] http://pastie.textmate.org/private/tmwxc0nhbjh0guwfltw7g
[1000 lines should be good to test] http://code.google.com/p/google-code-prettify/source/browse/trunk/src/prettify.js
New Definition File: (I don't think I can attach it to the list so I
pastie'd)
http://pastie.textmate.org/223002
Diff: (changes to "meta.delimiter.object.comma.js" and
"string.regexp.js")
joe$ diff old.textmate new.textmate
62c62
< match = '\b(function)\s+([a-zA-Z_$]\w*)?\s*(\()(.*?)(\))';
---
> match = '\b(function)(\s+[a-zA-Z_$]\w*)?\s*(\()(.*?)(\))';
214c214
< begin = '(?<=[=(:]|^|return)\s*(/)(?![/*+{}?])';
---
> begin = '(?<=[\[,&=(:]|^|return)\s*(/)(?![/*+{}?])';
228c228
< match = ',[ |\t]*';
---
> match = ',';
For those who want to see what actually changed:
-------------------------------------------------------------------
Old Definition Image: (shows errors)
http://www.grabup.com/uploads/19a58ab51574cc91d0ba8dcf070387d4.png
New Definition Image: (shows correctly)
http://www.grabup.com/uploads/31ef744364e7d43b55bbd72c4a270603.png
Thanks,
Joseph Pecoraro
On Jun 26, 2008, at 6: 13PM, Joseph Pecoraro wrote:
> Hello All,
>
> The JavaScript language highlighter doesn't highlight regular
> expressions inside of an array. Here is a code sample that shows
> some simple test cases and only a few pass:
>
> /test/
> [/test/]
> [1,2,/test/]
> [1,2,/test/,'blah',/test/]
> [ /test/, /test/ ,/test/ ]
> new Array(1,2,3)
> new Array(/test/, /test/, /test/)
> "blah".match(/test/);
>
> I haven't worked much with languages before, but I assume all that
> would be needed would be including "string.regexp.js" inside of an
> array class or maybe modify
> "punctuation.definition.string.begin.js". I couldn't find any way
> to do that. I also tried adding a "," to the list of characters
> that could come before the regexp itself but it didn't seem to work,
> but I'm still new.
>
> Can anyone recommend a solution?
>
> Also, can anyone point me to where I can find the definition of
> "punctuation.definition.*" and the like?
>
> References I have look at:
> http://blog.macromates.com/2005/introduction-to-scopes/
> http://manual.macromates.com/en/language_grammars.html#naming_conventions
>
> Thanks in Advance,
> Joseph Pecoraro
More information about the textmate
mailing list