ファイルはこちら20080101p01。
あいだにコメントを挟みながら一連の DIFF差分(sh_ruby.js.diff)を見ていく。
--- sh_ruby.js.original Fri Aug 3 12:16:32 2007
+++ sh_ruby.js Sat Jan 19 01:35:32 2008
@@ -2,123 +2,427 @@
this.sh_languages = {};
}
sh_languages['ruby'] = [
[
{
- 'regex': /\b(?:require)\b/g,
- 'style': 'sh_preproc'
+ regex: /\brequire\b/g,
+ style: 'sh_preproc'
},
- {
- 'next': 1,
- 'regex': /#/g,
- 'style': 'sh_comment'
+ { // part of Kernel methods.
+ regex: /\b(?:exit!?|(?:abort|at_exit|BEGIN|callcc|END|eval|exec|fork|load|spawn|syscall|system|trap|warn)\b)/g,
+ style: 'sh_preproc'
},
{
- 'regex': /\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/g,
- 'style': 'sh_number'
+ regex: /[+-]?\b(?:0(?:x[A-Fa-f0-9_]+|d[\d_]+|b[01_]+|o?[0-7_]+)|(?:0\.)?[\d_]+(?:[Ee][+-]?[\d_]+)?)\b/g,
+ style: 'sh_number'
},
{
- 'next': 2,
- 'regex': /"/g,
- 'style': 'sh_string'
+ next: 2,
+ regex: /"/g,
+ style: 'sh_string'
},
{
- 'next': 3,
- 'regex': /'/g,
- 'style': 'sh_string'
+ next: 3,
+ regex: /'/g,
+ style: 'sh_string'
},
{
- 'next': 4,
- 'regex': /</g,
- 'style': 'sh_string'
+ next: 4,
+ regex: /<(?=[\w\/])/g,
+ style: 'sh_string'
},
{
- 'regex': /\/[^\n]*\//g,
- 'style': 'sh_regexp'
+ regex: /\/(?:\\.|[^\n\\\/])*\/[eimnosux]*(?![A-Za-z])/g,
+ style: 'sh_regexp'
},
{
- 'regex': /(%r)(\{(?:\\\}|#\{[A-Za-z0-9]+\}|[^}])*\})/g,
- 'style': ['sh_symbol', 'sh_regexp']
+ regex: /(?:\b(?:alias|attr(?:_reader|_writer|_accessor)?|begin|break|case|do|else|elsif|end|ensure|for|if|in|include|lambda|loop|next|proc|raise|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|and|not|or|def|class|module|catch|fail|throw)\b|&&|\|\|)/g,
+ style: 'sh_keyword'
},
{
- 'regex': /\b(?:alias|begin|BEGIN|break|case|defined|do|else|elsif|end|END|ensure|for|if|in|include|loop|next|raise|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|false|nil|self|true|__FILE__|__LINE__|and|not|or|def|class|module|catch|fail|load|throw)\b/g,
- 'style': 'sh_keyword'
+ next: 5,
+ regex: /^=begin/g,
+ style: 'sh_comment'
},
{
- 'next': 5,
- 'regex': /(?:^\=begin)/g,
- 'style': 'sh_comment'
+ regex: /@@?[A-Za-z_][A-Za-z0-9_]*/g,
+ style: 'sh_type'
},
- {
- 'regex': /(?:\$[#]?|@@|@)(?:[A-Za-z0-9_]+|'|\"|\/)/g,
- 'style': 'sh_type'
+ { // global variables
+ regex: /\$(?:[_&~`'\+\?!@=\/\\,;\.<>\*\$:"]|-?[A-Za-z0-9_]+\b)/g,
+ style: 'sh_type'
+ },
+ { // %r(regexp)
+ next: 6,
+ regex: /%r(?=[\(<\[\{])/g,
+ style: 'sh_regexp'
+ },
+ { // %x(command), %w(array)
+ next: 11,
+ regex: /%[xWw](?=[\(<\[\{])/g,
+ style: 'sh_normal'
+ },
+ { // %(string), %s(symbol)
+ next: 16,
+ regex: /%[Qqs]?(?=[\(<\[\{])/g,
+ style: 'sh_string'
+ },
+ { // %r!regexp!i
+ regex: /%r([ -'*-\/:;=?@\\^_`|~])(?:\\.|.)*?\1[eimnosux](?![A-Za-z])/g,
+ style: 'sh_regexp'
+ },
+ { // %x!command!, %w!array!
+ regex: /%[xWw]?([ -'*-\/:;=?@\\^_`|~])(?:\\.|.)*?\1/g,
+ style: 'sh_string'
+ },
+ { // %!string!, %s!symbol!
+ regex: /%[Qqs]?([ -'*-\/:;=?@\\^_`|~])(?:\\.|.)*?\1/g,
+ style: 'sh_string'
+ },
+ { // Symbol
+ regex: /(:)((?:@@?|\$|[A-Za-z_])\w+\b[!\?]?)/g,
+ style: ['sh_symbol', 'sh_string']
+ },
+ { // Symbol
+ regex: /(:)(\+|~|\*\*?|-|\/|%|<=>|<<?|>>?|^|===?|=~|!~|&|\|)(?=[^\w\d]|$)/g,
+ style: ['sh_symbol', 'sh_string']
+ },
+ { // Constants
+ regex: /\b[A-Z]\w+\b/g,
+ style: 'sh_function'
+ },
+ { // Constants
+ regex: /\b(?:self|nil(?!\?)|true|false|__FILE__|__LINE__)\b/g,
+ style: 'sh_function'
+ },
+ { // don't highlight ? and ! as symbols if they are part of a method call
+ regex: /\b[a-z_]\w*[!\?]/g,
+ style: 'sh_normal'
},
{
- 'regex': /[A-Za-z0-9]+(?:\?|!)/g,
- 'style': 'sh_normal'
+ regex: /~|!|%|\^|\*|\(|\)|-|\+|=|\[|\]|\\|::?|;|,|\.|\/|\?|&|<|>|\|/g,
+ style: 'sh_symbol'
},
{
- 'regex': /~|!|%|\^|\*|\(|\)|-|\+|=|\[|\]|\\|:|;|,|\.|\/|\?|&|<|>|\|/g,
- 'style': 'sh_symbol'
+ regex: /(#)(\{)/g,
+ style: ['sh_symbol', 'sh_cbracket']
},
{
- 'regex': /(#)(\{)/g,
- 'style': ['sh_symbol', 'sh_cbracket']
+ regex: /\{|\}/g,
+ style: 'sh_cbracket'
},
{
- 'regex': /\{|\}/g,
- 'style': 'sh_cbracket'
+ next: 1,
+ regex: /#/g,
+ style: 'sh_comment'
}
],
[
{
- 'exit': true,
- 'regex': /$/g
+ exit: true,
+ regex: /$/g
}
],
[
{
- 'exit': true,
- 'regex': /$/g
+ exit: true,
+ regex: /$/g
},
{
- 'regex': /\\(?:\\|")/g
+ regex: /\\[\\"]/g
},
{
- 'exit': true,
- 'regex': /"/g,
- 'style': 'sh_string'
+ exit: true,
+ regex: /"/g
}
],
[
{
- 'exit': true,
- 'regex': /$/g
+ exit: true,
+ regex: /$/g
},
{
- 'regex': /\\(?:\\|')/g
+ regex: /\\[\\']/g
},
{
- 'exit': true,
- 'regex': /'/g,
- 'style': 'sh_string'
+ exit: true,
+ regex: /'/g
}
],
[
{
- 'exit': true,
- 'regex': /$/g
+ exit: true,
+ regex: /$/g
},
{
- 'exit': true,
- 'regex': />/g,
- 'style': 'sh_string'
+ exit: true,
+ regex: />/g
}
],
[
{
- 'exit': true,
- 'regex': /^(?:\=end)/g,
- 'style': 'sh_comment'
+ exit: true,
+ regex: /^=end/g
}
+ ],
+ [ // state 6-10: %r(regexp)
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 7,
+ regex: /\(/g,
+ style: 'sh_regexp'
+ },
+ {
+ next: 8,
+ regex: /</g,
+ style: 'sh_regexp'
+ },
+ {
+ next: 9,
+ regex: /\[/g,
+ style: 'sh_regexp'
+ },
+ {
+ next: 10,
+ regex: /\{/g,
+ style: 'sh_regexp'
+ },
+ {
+ exit: true,
+ regex: /[)>\]}][eimnosux]*/g,
+ style: 'sh_regexp'
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 6,
+ regex: /(?=\()/g
+ },
+ {
+ exit: true,
+ regex: /(?=\))/g
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 6,
+ regex: /(?=<)/g
+ },
+ {
+ exit: true,
+ regex: /(?=>)/g
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 6,
+ regex: /(?=\[)/g
+ },
+ {
+ exit: true,
+ regex: /(?=])/g
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 6,
+ regex: /(?={)/g
+ },
+ {
+ exit: true,
+ regex: /(?=})/g
+ }
+ ],
+ [ // state 11-15: %x(command)
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 12,
+ regex: /\(/g,
+ style: 'sh_normal'
+ },
+ {
+ next: 13,
+ regex: /</g,
+ style: 'sh_normal'
+ },
+ {
+ next: 14,
+ regex: /\[/g,
+ style: 'sh_normal'
+ },
+ {
+ next: 15,
+ regex: /\{/g,
+ style: 'sh_normal'
+ },
+ {
+ exit: true,
+ regex: /[)>\]}]/g,
+ style: 'sh_normal'
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 11,
+ regex: /(?=\()/g
+ },
+ {
+ exit: true,
+ regex: /(?=\))/g
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 11,
+ regex: /(?=<)/g
+ },
+ {
+ exit: true,
+ regex: /(?=>)/g
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 11,
+ regex: /(?=\[)/g
+ },
+ {
+ exit: true,
+ regex: /(?=])/g
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 11,
+ regex: /(?={)/g
+ },
+ {
+ exit: true,
+ regex: /(?=})/g
+ }
+ ],
+ [ // state 16-20: %Q(string)
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 17,
+ regex: /\(/g,
+ style: 'sh_string'
+ },
+ {
+ next: 18,
+ regex: /</g,
+ style: 'sh_string'
+ },
+ {
+ next: 19,
+ regex: /\[/g,
+ style: 'sh_string'
+ },
+ {
+ next: 20,
+ regex: /\{/g,
+ style: 'sh_string'
+ },
+ {
+ exit: true,
+ regex: /[)>\]}]/g,
+ style: 'sh_string'
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 16,
+ regex: /(?=\()/g
+ },
+ {
+ exit: true,
+ regex: /(?=\))/g
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 16,
+ regex: /(?=<)/g
+ },
+ {
+ exit: true,
+ regex: /(?=>)/g
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 16,
+ regex: /(?=\[)/g
+ },
+ {
+ exit: true,
+ regex: /(?=])/g
+ }
+ ],
+ [
+ {
+ exit: true,
+ regex: /$/g
+ },
+ {
+ next: 16,
+ regex: /(?={)/g
+ },
+ {
+ exit: true,
+ regex: /(?=})/g
+ }
]
];