diff --git a/Commands/Copy as Bookmarklet to Clipboard.tmCommand b/Commands/Copy as Bookmarklet to Clipboard.tmCommand new file mode 100644 index 0000000..7410fbf --- /dev/null +++ b/Commands/Copy as Bookmarklet to Clipboard.tmCommand @@ -0,0 +1,54 @@ + + + + + beforeRunningCommand + nop + command + #!/usr/bin/env perl +# +# Written by John Gruber, taken with permission from: +# http://daringfireball.net/2007/03/javascript_bookmarklet_builder + +use strict; +use warnings; +use URI::Escape qw(uri_escape_utf8); +use open IO => ":utf8", # UTF8 by default + ":std"; # Apply to STDIN/STDOUT/STDERR + +my $src = do { local $/; <> }; + +# Zap the first line if there's already a bookmarklet comment: +$src =~ s{^// ?javascript:.+\n}{}; +my $bookmarklet = $src; + +$bookmarklet =~ s{^\s*//.+\n}{}gm; # Kill comments. +$bookmarklet =~ s{\t}{ }gm; # Tabs to spaces +$bookmarklet =~ s{ +}{ }gm; # Space runs to one space +$bookmarklet =~ s{^\s+}{}gm; # Kill line-leading whitespace +$bookmarklet =~ s{\s+$}{}gm; # Kill line-ending whitespace +$bookmarklet =~ s{\n}{}gm; # Kill newlines + +# Escape single- and double-quotes, spaces, control chars, unicode: +$bookmarklet = "javascript:" . + uri_escape_utf8($bookmarklet, qq('" \x00-\x1f\x7f-\xff)); + +print "// $bookmarklet\n" . $src; + +# Put bookmarklet on clipboard: +`/bin/echo -n '$bookmarklet' | /usr/bin/pbcopy`; + + input + selection + keyEquivalent + ^H + name + Copy as Bookmarklet to Clipboard + output + replaceSelectedText + scope + source.js + uuid + 20E61C43-B81F-4FB9-9362-BFFE668EB9C9 + + diff --git a/Commands/Reformat Document : Selection.tmCommand b/Commands/Reformat Document : Selection.tmCommand new file mode 100644 index 0000000..4ef9cec --- /dev/null +++ b/Commands/Reformat Document : Selection.tmCommand @@ -0,0 +1,591 @@ + + + + + beforeRunningCommand + nop + command + #!/usr/bin/env php +<?php +/* + +JS Beautifier + +(c) 2007, Einars "elfz" Lielmanis + +http://elfz.laacz.lv/beautify/ + +You are free to use this in any way you want, in case you find this useful or working for you. + +Ported with permission to TextMate by Ale Muñoz. + +(Based on v35 of JS Beautifier) + +*/ + +error_reporting(E_ALL); +ini_set('display_errors', 'on'); + + +$n = 1; +define('IN_EXPR', ++$n); +define('IN_BLOCK', ++$n); + + +define('TK_UNKNOWN', ++$n); +define('TK_WORD', ++$n); +define('TK_START_EXPR', ++$n); +define('TK_END_EXPR', ++$n); +define('TK_START_BLOCK', ++$n); +define('TK_END_BLOCK', ++$n); +define('TK_END_COMMAND', ++$n); +define('TK_EOF', ++$n); +define('TK_STRING', ++$n); + +define('TK_BLOCK_COMMENT', ++$n); +define('TK_COMMENT', ++$n); + +define('TK_OPERATOR', ++$n); + +// internal flags +define('PRINT_NONE', ++$n); +define('PRINT_SPACE', ++$n); +define('PRINT_NL', ++$n); + + +function js_beautify($js_source_text, $tab_size = 4) +{ + global $output, $token_text, $last_type, $last_text, $in, $ins, $indent, $tab_string, $is_last_nl; + + global $input, $input_length; + + $tab_string = str_repeat(' ', $tab_size); + + $input = $js_source_text; + $input_length = strlen($input); + + $last_word = ''; // last TK_WORD passed + $last_type = TK_START_EXPR; // last token type + $last_text = ''; // last token text + $output = ''; + + $is_last_nl = true; // was the last character written a newline? + + // words which should always start on new line. + // simple hack for cases when lines aren't ending with semicolon. + // feel free to tell me about the ones that need to be added. + $line_starters = explode(',', 'continue,try,throw,return,var,if,switch,case,default,for,while,break,function'); + + // states showing if we are currently in expression (i.e. "if" case) - IN_EXPR, or in usual block (like, procedure), IN_BLOCK. + // some formatting depends on that. + $in = IN_BLOCK; + $ins = array($in); + + + $indent = 0; + $pos = 0; // parser position + $in_case = false; // flag for parser that case/default has been processed, and next colon needs special attention + + while (true) { + list($token_text, $token_type) = get_next_token($pos); + if ($token_type == TK_EOF) { + break; + } + + // $output .= " [$token_type:$last_type]"; + + switch($token_type) { + + case TK_START_EXPR: + + in(IN_EXPR); + if ($last_type == TK_END_EXPR or $last_type == TK_START_EXPR) { + // do nothing on (( and )( and ][ and ]( .. + } elseif ($last_type != TK_WORD and $last_type != TK_OPERATOR) { + space(); + } elseif (in_array($last_word, $line_starters) and $last_word != 'function') { + space(); + } + token(); + break; + + case TK_END_EXPR: + + token(); + in_pop(); + break; + + case TK_START_BLOCK: + + in(IN_BLOCK); + if ($last_type != TK_OPERATOR and $last_type != TK_START_EXPR) { + if ($last_type == TK_START_BLOCK) { + nl(); + } else { + space(); + } + } + token(); + indent(); + break; + + case TK_END_BLOCK: + + if ($last_type == TK_END_EXPR) { + unindent(); + nl(false); + } elseif ($last_type == TK_END_BLOCK) { + unindent(); + nl(false); + } elseif ($last_type == TK_START_BLOCK) { + // nothing + unindent(); + } else { + unindent(); + nl(false); + } + token(); + in_pop(); + break; + + case TK_WORD: + + if ($token_text == 'case' or $token_text == 'default') { + if ($last_text == ':') { + // switch cases following one another + remove_indent(); + } else { + $indent--; + nl(); + $indent++; + } + token(); + $in_case = true; + break; + } + + $prefix = PRINT_NONE; + if ($last_type == TK_END_BLOCK) { + if (!in_array(strtolower($token_text), array('else', 'catch', 'finally'))) { + $prefix = PRINT_NL; + } else { + $prefix = PRINT_SPACE; + space(); + } + } elseif ($last_type == TK_END_COMMAND && $in == IN_BLOCK) { + $prefix = PRINT_NL; + } elseif ($last_type == TK_END_COMMAND && $in == IN_EXPR) { + $prefix = PRINT_SPACE; + } elseif ($last_type == TK_WORD) { + if ($last_word == 'else') { // else if + $prefix = PRINT_SPACE; + } else { + $prefix = PRINT_SPACE; + } + } elseif ($last_type == TK_START_BLOCK) { + $prefix = PRINT_NL; + } elseif ($last_type == TK_END_EXPR) { + space(); + } + + if (in_array($token_text, $line_starters) or $prefix == PRINT_NL) { + + if ($last_text == 'else') { + // no need to force newline on else break + // DONOTHING + space(); + } elseif (($last_type == TK_START_EXPR or $last_text == '=') and $token_text == 'function') { + // no need to force newline on 'function': (function + // DONOTHING + } else + if ($last_type != TK_END_EXPR) { + if (($last_type != TK_START_EXPR or $token_text != 'var') and $last_text != ':') { + // no need to force newline on 'var': for (var x = 0...) + if ($token_text == 'if' and $last_type == TK_WORD and $last_word == 'else') { + // no newline for } else if { + space(); + } else { + nl(); + } + } + } + } elseif ($prefix == PRINT_SPACE) { + space(); + } + token(); + $last_word = strtolower($token_text); + break; + + case TK_END_COMMAND: + + token(); + break; + + case TK_STRING: + + if ($last_type == TK_START_BLOCK or $last_type == TK_END_BLOCK) { + nl(); + } elseif ($last_type == TK_WORD) { + space(); + } + token(); + break; + + case TK_OPERATOR: + $start_delim = true; + $end_delim = true; + + if ($token_text == ':' and $in_case) { + token(); // colon really asks for separate treatment + nl(); + $expecting_case = false; + break; + } + + $in_case = false; + + + + if ($token_text == ',') { + if ($last_type == TK_END_BLOCK) { + token(); + nl(); + } else { + if ($in == IN_BLOCK) { + token(); + nl(); + } else { + token(); + space(); + } + } + break; + } elseif ($token_text == '--' or $token_text == '++') { // unary operators special case + if ($last_text == ';') { + // space for (;; ++i) + $start_delim = true; + $end_delim = false; + } else { + $start_delim = false; + $end_delim = false; + } + } elseif ($token_text == '!' and $last_type == TK_START_EXPR) { + // special case handling: if (!a) + $start_delim = false; + $end_delim = false; + } elseif ($last_type == TK_OPERATOR) { + $start_delim = false; + $end_delim = false; + } elseif ($last_type == TK_END_EXPR) { + $start_delim = true; + $end_delim = true; + } elseif ($token_text == '.') { + // decimal digits or object.property + $start_delim = false; + $end_delim = false; + + } elseif ($token_text == ':') { + // zz: xx + // can't differentiate ternary op, so for now it's a ? b: c; without space before colon + $start_delim = false; + } + if ($start_delim) { + space(); + } + + token(); + + if ($end_delim) { + space(); + } + break; + + case TK_BLOCK_COMMENT: + + nl(); + token(); + nl(); + break; + + case TK_COMMENT: + + //if ($last_type != TK_COMMENT) { + nl(); + //} + token(); + nl(); + break; + + case TK_UNKNOWN: + token(); + break; + } + + if ($token_type != TK_COMMENT) { + $last_type = $token_type; + $last_text = $token_text; + } + } + + // clean empty lines from redundant spaces + $output = preg_replace('/^ +$/m', '', $output); + + return $output; +} + + + + +function nl($ignore_repeated = true) +{ + global $indent, $output, $tab_string, $is_last_nl; + + if ($output == '') return; // no newline on start of file + + if ($ignore_repeated and $is_last_nl) { + return; + } + + $is_last_nl = true; + + $output .= "\n" . str_repeat($tab_string, $indent); +} + + +// hack for correct multiple newline handling +function safe_nl($newlines = 1) +{ + global $output; + if ($newlines) { + $output .= str_repeat("\n", $newlines - 1); + } + nl(); +} + + +function space() +{ + global $output, $is_last_nl; + + $is_last_nl = false; + + if ($output and substr($output, -1) != ' ') { // prevent occassional duplicate space + $output .= ' '; + } +} + + +function token() +{ + global $token_text, $output, $is_last_nl; + $output .= $token_text; + $is_last_nl = false; +} + +function indent() +{ + global $indent; + $indent ++; +} + + +function unindent() +{ + global $indent; + if ($indent) { + $indent --; + } +} + + +function remove_indent() +{ + global $tab_string, $output; + $tab_string_len = strlen($tab_string); + if (substr($output, -$tab_string_len) == $tab_string) { + $output = substr($output, 0, -$tab_string_len); + } +} + + +function in($where) +{ + global $ins, $in; + array_push($ins, $in); + $in = $where; +} + + +function in_pop() +{ + global $ins, $in; + $in = array_pop($ins); +} + + + +function make_array($str) +{ + $res = array(); + for ($i = 0; $i < strlen($str); $i++) { + $res[] = $str[$i]; + } + return $res; +} + + + +function get_next_token(&$pos) +{ + global $last_type, $last_text; + global $whitespace, $wordchar, $punct; + global $input, $input_length, $is_last_nl; + + + if (!$whitespace) $whitespace = make_array("\n\r\t "); + if (!$wordchar) $wordchar = make_array('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$'); + if (!$punct) $punct = explode(' ', '+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> <<< >>= <<= && &= | || ! !! , : ? ^ ^= |='); + + $n_newlines = 0; + do { + if ($pos >= $input_length) { + return array('', TK_EOF); + } + $c = $input[$pos]; + $pos += 1; + if ($c == "\n") { + $n_newlines += 1; + } + } while (in_array($c, $whitespace)); + + if ($n_newlines) { + safe_nl($n_newlines); + } + + if (in_array($c, $wordchar)) { + if ($pos < $input_length) { + while (in_array($input[$pos], $wordchar)) { + $c .= $input[$pos]; + $pos += 1; + if ($pos == $input_length) break; + } + } + if ($c == 'in') { // hack for 'in' operator + return array($c, TK_OPERATOR); + } + return array($c, TK_WORD); + } + + if ($c == '(' || $c == '[') { + return array($c, TK_START_EXPR); + } + + if ($c == ')' || $c == ']') { + return array($c, TK_END_EXPR); + } + + if ($c == '{') { + return array($c, TK_START_BLOCK); + } + + if ($c == '}') { + return array($c, TK_END_BLOCK); + } + + if ($c == ';') { + return array($c, TK_END_COMMAND); + } + + if ($c == '/') { + // peek for comment /* ... */ + if ($input[$pos] == '*') { + $comment = ''; + $pos += 1; + if ($pos < $input_length){ + while (!($input[$pos] == '*' && isset($input[$pos + 1]) && $input[$pos + 1] == '/') && $pos < $input_length) { + $comment .= $input[$pos]; + $pos += 1; + if ($pos >= $input_length) break; + } + } + $pos +=2; + return array("/*$comment*/", TK_BLOCK_COMMENT); + } + // peek for comment // ... + if ($input[$pos] == '/') { + $comment = $c; + while ($input[$pos] != "\x0d" && $input[$pos] != "\x0a") { + $comment .= $input[$pos]; + $pos += 1; + if ($pos >= $input_length) break; + } + $pos += 1; + return array($comment, TK_COMMENT); + } + + } + + if ($c == "'" || // string + $c == '"' || // string + ($c == '/' && + (($last_type == TK_WORD and $last_text == 'return') or ($last_type == TK_START_EXPR || $last_type == TK_END_BLOCK || $last_type == TK_OPERATOR || $last_type == TK_EOF || $last_type == TK_END_COMMAND)))) { // regexp + $sep = $c; + $c = ''; + $esc = false; + + if ($pos < $input_length) { + + while ($esc || $input[$pos] != $sep) { + $c .= $input[$pos]; + if (!$esc) { + $esc = $input[$pos] == '\\'; + } else { + $esc = false; + } + $pos += 1; + if ($pos >= $input_length) break; + } + + } + + $pos += 1; + if ($last_type == TK_END_COMMAND) { + nl(); + } + return array($sep . $c . $sep, TK_STRING); + } + + if (in_array($c, $punct)) { + while (in_array($c . $input[$pos], $punct)) { + $c .= $input[$pos]; + $pos += 1; + if ($pos >= $input_length) break; + } + return array($c, TK_OPERATOR); + } + + return array($c, TK_UNKNOWN); +} + +if (isset($_ENV['TM_SELECTED_TEXT'])) { + $input = get_magic_quotes_gpc() ? stripslashes($_ENV['TM_SELECTED_TEXT']) : $_ENV['TM_SELECTED_TEXT']; +} else { + $input = file_get_contents('php://stdin'); +} + +print js_beautify($input); +?> + input + selection + keyEquivalent + ^H + name + Reformat Document / Selection + output + replaceSelectedText + scope + source.js + uuid + 36EC03E9-EFF4-479A-AB90-8DFA16800642 + + diff --git a/Syntaxes/JavaScript Basic.tmLanguage b/Syntaxes/JavaScript Basic.tmLanguage new file mode 100644 index 0000000..e4771e9 --- /dev/null +++ b/Syntaxes/JavaScript Basic.tmLanguage @@ -0,0 +1,651 @@ + + + + + comment + JavaScript Syntax: version 2.0 + fileTypes + + js + htc + jsx + + foldingStartMarker + ^.*(\bfunction\s*(\w+\s*)?\([^\)]*\)(\s*\{[^\}]*)?\s*$)|(={\s*$)|(\({$) + foldingStopMarker + (^\s*\})|(^}\)); + keyEquivalent + ^~J + name + JavaScript Basic + patterns + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + + + comment + match stuff like: Sound.prototype = { … } when extending an object + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\s*=\s* + name + meta.class.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + + 3 + + name + entity.name.function.js + + 4 + + name + storage.type.function.js + + 5 + + name + punctuation.definition.parameters.begin.js + + 6 + + name + variable.parameter.function.js + + 7 + + name + punctuation.definition.parameters.end.js + + + comment + match stuff like: Sound.prototype.play = function() { … } + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)?\s*(\()(.*?)(\)) + name + meta.function.prototype.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + support.constant.js + + 3 + + name + entity.name.function.js + + + comment + match stuff like: Sound.prototype.play = myfunc + match + ([a-zA-Z_?.$][\w?.$]*)\.(prototype)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s* + name + meta.function.js + + + captures + + 1 + + name + support.class.js + + 2 + + name + entity.name.function.js + + 3 + + name + storage.type.function.js + + 4 + + name + punctuation.definition.parameters.begin.js + + 5 + + name + variable.parameter.function.js + + 6 + + name + punctuation.definition.parameters.end.js + + + comment + match stuff like: Sound.play = function() { … } + match + ([a-zA-Z_?.$][\w?.$]*)\.([a-zA-Z_?.$][\w?.$]*)\s*=\s*(function)\s*(\()(.*?)(\)) + name + meta.function.js + + + captures + + 1 + + name + storage.type.function.js + + 2 + + name + entity.name.function.js + + 3 + + name + punctuation.definition.parameters.begin.js + + 4 + + name + variable.parameter.function.js + + 5 + + name + punctuation.definition.parameters.end.js + + + comment + match regular function like: function myFunc(arg) { … } + match + \b(function)\s+([a-zA-Z_$]\w*)?\s*(\()(.*?)(\)) + name + meta.function.js + + + captures + + 1 + + name + entity.name.function.js + + 2 + + name + storage.type.function.js + + 3 + + name + punctuation.definition.parameters.begin.js + + 4 + + name + variable.parameter.function.js + + 5 + + name + punctuation.definition.parameters.end.js + + + comment + match stuff like: foobar: function() { … } + match + \b([a-zA-Z_?.$][\w?.$]*)\s*:\s*\b(function)?\s*(\()(.*?)(\)) + name + meta.function.json.js + + + captures + + 1 + + name + string.quoted.single.js + + 10 + + name + punctuation.definition.parameters.begin.js + + 11 + + name + variable.parameter.function.js + + 12 + + name + punctuation.definition.parameters.end.js + + 2 + + name + punctuation.definition.string.begin.js + + 3 + + name + entity.name.function.js + + 4 + + name + punctuation.definition.string.end.js + + 5 + + name + string.quoted.double.js + + 6 + + name + punctuation.definition.string.begin.js + + 7 + + name + entity.name.function.js + + 8 + + name + punctuation.definition.string.end.js + + 9 + + name + entity.name.function.js + + + comment + Attempt to match "foo": function + match + (?:((')(.*?)('))|((")(.*?)(")))\s*:\s*\b(function)?\s*(\()(.*?)(\)) + name + meta.function.json.js + + + captures + + 1 + + name + keyword.operator.new.js + + 2 + + name + entity.name.type.instance.js + + + match + (new)\s+(\w+(?:\.\w*)?) + name + meta.class.instance.constructor + + + match + \b(console)\b + name + entity.name.type.object.js.firebug + + + match + \.(warn|info|log|error|time|timeEnd|assert)\b + name + support.function.js.firebug + + + match + \b((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?))\b + name + constant.numeric.js + + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.js + + + end + ' + endCaptures + + 0 + + name + punctuation.definition.string.end.js + + + name + string.quoted.single.js + patterns + + + match + \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.) + name + constant.character.escape.js + + + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.js + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.js + + + name + string.quoted.double.js + patterns + + + match + \\(x\h{2}|[0-2][0-7]{,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.) + name + constant.character.escape.js + + + + + begin + /\*\* + captures + + 0 + + name + punctuation.definition.comment.js + + + end + \*/ + name + comment.block.documentation.js + + + begin + /\* + captures + + 0 + + name + punctuation.definition.comment.js + + + end + \*/ + name + comment.block.js + + + captures + + 1 + + name + punctuation.definition.comment.js + + + match + (//).*$\n? + name + comment.line.double-slash.js + + + captures + + 0 + + name + punctuation.definition.comment.html.js + + 2 + + name + punctuation.definition.comment.html.js + + + match + (<!--|-->) + name + comment.block.html.js + + + match + \b(boolean|byte|char|class|double|enum|float|function|int|interface|long|short|var|void)\b + name + storage.type.js + + + match + \b(const|export|extends|final|implements|native|private|protected|public|static|synchronized|throws|transient|volatile)\b + name + storage.modifier.js + + + match + \b(break|case|catch|continue|default|do|else|finally|for|goto|if|import|package|return|switch|throw|try|while)\b + name + keyword.control.js + + + match + \b(delete|in|instanceof|new|typeof|with)\b + name + keyword.operator.js + + + match + \btrue\b + name + constant.language.boolean.true.js + + + match + \bfalse\b + name + constant.language.boolean.false.js + + + match + \bnull\b + name + constant.language.null.js + + + match + \b(super|this)\b + name + variable.language.js + + + match + \b(debugger)\b + name + keyword.other.js + + + match + \b(Anchor|Applet|Area|Array|Boolean|Button|Checkbox|Date|document|event|FileUpload|Form|Frame|Function|Hidden|History|Image|JavaArray|JavaClass|JavaObject|JavaPackage|java|Layer|Link|Location|Math|MimeType|Number|navigator|netscape|Object|Option|Packages|Password|Plugin|Radio|RegExp|Reset|Select|String|Style|Submit|screen|sun|Text|Textarea|window|XMLHttpRequest)\b + name + support.class.js + + + match + \b(s(h(ift|ow(Mod(elessDialog|alDialog)|Help))|croll(X|By(Pages|Lines)?|Y|To)?|t(op|rike)|i(n|zeToContent|debar|gnText)|ort|u(p|b(str(ing)?)?)|pli(ce|t)|e(nd|t(Re(sizable|questHeader)|M(i(nutes|lliseconds)|onth)|Seconds|Ho(tKeys|urs)|Year|Cursor|Time(out)?|Interval|ZOptions|Date|UTC(M(i(nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(ome|andleEvent)|navigate|c(har(CodeAt|At)|o(s|n(cat|textual|firm)|mpile)|eil|lear(Timeout|Interval)?|a(ptureEvents|ll)|reate(StyleSheet|Popup|EventObject))|t(o(GMTString|S(tring|ource)|U(TCString|pperCase)|Lo(caleString|werCase))|est|a(n|int(Enabled)?))|i(s(NaN|Finite)|ndexOf|talics)|d(isableExternalCapture|ump|etachEvent)|u(n(shift|taint|escape|watch)|pdateCommands)|j(oin|avaEnabled)|p(o(p|w)|ush|lugins.refresh|a(ddings|rse(Int|Float)?)|r(int|ompt|eference))|e(scape|nableExternalCapture|val|lementFromPoint|x(p|ec(Script|Command)?))|valueOf|UTC|queryCommand(State|Indeterm|Enabled|Value)|f(i(nd|le(ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(nt(size|color)|rward)|loor|romCharCode)|watch|l(ink|o(ad|g)|astIndexOf)|a(sin|nchor|cos|t(tachEvent|ob|an(2)?)|pply|lert|b(s|ort))|r(ou(nd|teEvents)|e(size(By|To)|calc|turnValue|place|verse|l(oad|ease(Capture|Events)))|andom)|g(o|et(ResponseHeader|M(i(nutes|lliseconds)|onth)|Se(conds|lection)|Hours|Year|Time(zoneOffset)?|Da(y|te)|UTC(M(i(nutes|lliseconds)|onth)|Seconds|Hours|Da(y|te)|FullYear)|FullYear|A(ttention|llResponseHeaders)))|m(in|ove(B(y|elow)|To(Absolute)?|Above)|ergeAttributes|a(tch|rgins|x))|b(toa|ig|o(ld|rderWidths)|link|ack))\b(?=\() + name + support.function.js + + + match + \b(s(ub(stringData|mit)|plitText|e(t(NamedItem|Attribute(Node)?)|lect))|has(ChildNodes|Feature)|namedItem|c(l(ick|o(se|neNode))|reate(C(omment|DATASection|aption)|T(Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(ntityReference|lement)|Attribute))|tabIndex|i(nsert(Row|Before|Cell|Data)|tem)|open|delete(Row|C(ell|aption)|T(Head|Foot)|Data)|focus|write(ln)?|a(dd|ppend(Child|Data))|re(set|place(Child|Data)|move(NamedItem|Child|Attribute(Node)?)?)|get(NamedItem|Element(sBy(Name|TagName)|ById)|Attribute(Node)?)|blur)\b(?=\() + name + support.function.dom.js + + + match + (?<=\.)(s(ystemLanguage|cr(ipts|ollbars|een(X|Y|Top|Left))|t(yle(Sheets)?|atus(Text|bar)?)|ibling(Below|Above)|ource|uffixes|e(curity(Policy)?|l(ection|f)))|h(istory|ost(name)?|as(h|Focus))|y|X(MLDocument|SLDocument)|n(ext|ame(space(s|URI)|Prop))|M(IN_VALUE|AX_VALUE)|c(haracterSet|o(n(structor|trollers)|okieEnabled|lorDepth|mp(onents|lete))|urrent|puClass|l(i(p(boardData)?|entInformation)|osed|asses)|alle(e|r)|rypto)|t(o(olbar|p)|ext(Transform|Indent|Decoration|Align)|ags)|SQRT(1_2|2)|i(n(ner(Height|Width)|put)|ds|gnoreCase)|zIndex|o(scpu|n(readystatechange|Line)|uter(Height|Width)|p(sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(i(splay|alog(Height|Top|Width|Left|Arguments)|rectories)|e(scription|fault(Status|Ch(ecked|arset)|View)))|u(ser(Profile|Language|Agent)|n(iqueID|defined)|pdateInterval)|_content|p(ixelDepth|ort|ersonalbar|kcs11|l(ugins|atform)|a(thname|dding(Right|Bottom|Top|Left)|rent(Window|Layer)?|ge(X(Offset)?|Y(Offset)?))|r(o(to(col|type)|duct(Sub)?|mpter)|e(vious|fix)))|e(n(coding|abledPlugin)|x(ternal|pando)|mbeds)|v(isibility|endor(Sub)?|Linkcolor)|URLUnencoded|P(I|OSITIVE_INFINITY)|f(ilename|o(nt(Size|Family|Weight)|rmName)|rame(s|Element)|gColor)|E|whiteSpace|l(i(stStyleType|n(eHeight|kColor))|o(ca(tion(bar)?|lName)|wsrc)|e(ngth|ft(Context)?)|a(st(M(odified|atch)|Index|Paren)|yer(s|X)|nguage))|a(pp(MinorVersion|Name|Co(deName|re)|Version)|vail(Height|Top|Width|Left)|ll|r(ity|guments)|Linkcolor|bove)|r(ight(Context)?|e(sponse(XML|Text)|adyState))|global|x|m(imeTypes|ultiline|enubar|argin(Right|Bottom|Top|Left))|L(N(10|2)|OG(10E|2E))|b(o(ttom|rder(RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(Color|Image)))\b + name + support.constant.js + + + match + (?<=\.)(s(hape|ystemId|c(heme|ope|rolling)|ta(ndby|rt)|ize|ummary|pecified|e(ctionRowIndex|lected(Index)?)|rc)|h(space|t(tpEquiv|mlFor)|e(ight|aders)|ref(lang)?)|n(o(Resize|tation(s|Name)|Shade|Href|de(Name|Type|Value)|Wrap)|extSibling|ame)|c(h(ildNodes|Off|ecked|arset)?|ite|o(ntent|o(kie|rds)|de(Base|Type)?|l(s|Span|or)|mpact)|ell(s|Spacing|Padding)|l(ear|assName)|aption)|t(ype|Bodies|itle|Head|ext|a(rget|gName)|Foot)|i(sMap|ndex|d|m(plementation|ages))|o(ptions|wnerDocument|bject)|d(i(sabled|r)|o(c(type|umentElement)|main)|e(clare|f(er|ault(Selected|Checked|Value)))|at(eTime|a))|useMap|p(ublicId|arentNode|r(o(file|mpt)|eviousSibling))|e(n(ctype|tities)|vent|lements)|v(space|ersion|alue(Type)?|Link|Align)|URL|f(irstChild|orm(s)?|ace|rame(Border)?)|width|l(ink(s)?|o(ngDesc|wSrc)|a(stChild|ng|bel))|a(nchors|c(ce(ssKey|pt(Charset)?)|tion)|ttributes|pplets|l(t|ign)|r(chive|eas)|xis|Link|bbr)|r(ow(s|Span|Index)|ules|e(v|ferrer|l|adOnly))|m(ultiple|e(thod|dia)|a(rgin(Height|Width)|xLength))|b(o(dy|rder)|ackground|gColor))\b + name + support.constant.dom.js + + + match + \b(ELEMENT_NODE|ATTRIBUTE_NODE|TEXT_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|INDEX_SIZE_ERR|DOMSTRING_SIZE_ERR|HIERARCHY_REQUEST_ERR|WRONG_DOCUMENT_ERR|INVALID_CHARACTER_ERR|NO_DATA_ALLOWED_ERR|NO_MODIFICATION_ALLOWED_ERR|NOT_FOUND_ERR|NOT_SUPPORTED_ERR|INUSE_ATTRIBUTE_ERR)\b + name + support.constant.dom.js + + + match + \bon(R(ow(s(inserted|delete)|e(nter|xit))|e(s(ize(start|end)?|et)|adystatechange))|Mouse(o(ut|ver)|down|up|move)|B(efore(cut|deactivate|u(nload|pdate)|p(aste|rint)|editfocus|activate)|lur)|S(croll|top|ubmit|elect(start|ionchange)?)|H(over|elp)|C(hange|ont(extmenu|rolselect)|ut|ellchange|l(ick|ose))|D(eactivate|ata(setc(hanged|omplete)|available)|r(op|ag(start|over|drop|en(ter|d)|leave)?)|blclick)|Unload|P(aste|ropertychange)|Error(update)?|Key(down|up|press)|Focus|Load|A(ctivate|fter(update|print)|bort))\b + name + support.function.event-handler.js + + + match + !|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|/=|%=|\+=|\-=|&=|\^=|\b(in|instanceof|new|delete|typeof|void)\b + name + keyword.operator.js + + + match + \b(Infinity|NaN|Undefined)\b + name + constant.language.js + + + begin + (?<=[=(:]|^|return)\s*(/)(?![/*+{}?]) + beginCaptures + + 1 + + name + punctuation.definition.string.begin.js + + + end + (/)[igm]* + endCaptures + + 1 + + name + punctuation.definition.string.end.js + + + name + string.regexp.js + patterns + + + match + \\. + name + constant.character.escape.js + + + + + match + \; + name + punctuation.terminator.statement.js + + + match + ,[ |\t]* + name + meta.delimiter.object.comma.js + + + match + \. + name + meta.delimiter.method.period.js + + + match + \{|\} + name + meta.brace.curly.js + + + match + \(|\) + name + meta.brace.round.js + + + match + \[|\] + name + meta.brace.square.js + + + scopeName + source.js.basic + uuid + 0D2D03B9-F18B-4D9D-A960-716FDEC35331 + + diff --git a/info.plist b/info.plist index 16ac3e7..b804b73 100644 --- a/info.plist +++ b/info.plist @@ -130,7 +130,6 @@ 009A3E6C-FE3F-4A18-8759-2DC31F17BBE2 7B9AEFCC-B450-416D-8527-430FE2A08568 9E0E3BCC-7F20-4D6B-891D-A44D6EC56E31 - 0C6DE5D1-2AAA-4327-A746-94FCCD7A45C9 6D3097A0-7065-480A-9DE2-D7EEE181E783 uuid