/usr/share/highlight/langDefs/ruby.lang is in highlight-common 3.41-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | Description="Ruby"
Identifiers=[[ [a-zA-Z_][\w\-]* ]]
Digits=[[ (?:0x|0X|0b)[0-9a-fA-F]+|\d*[\.\_]?\d+(?:[eE][\-\+]\d+)?[lLuU]? ]]
Keywords={
{ Id=1,
List={"alias", "and", "begin", "begin", "break", "case", "class", "def",
"defined", "loop", "do", "else", "elsif", "end", "end", "ensure",
"false", "for", "if", "in", "module", "next", "nil", "not", "or",
"redo", "rescue", "retry", "return", "require", "self", "super",
"then", "true", "undef", "unless", "until", "when", "while",
"yield", "true", "false", "nil", "stdin", "stdout", "stderr", "env",
"argf", "argv", "data", "version", "ruby-release-date",
"ruby-platform", "include", "extend", "eval", "private", "raise", "throw"},
},
{ Id=3,
List = {"TRUE","FALSE","NIL","STDIN","STDOUT","STDERR","ENV","ARGF","ARGV",
"DATA","RUBY_VERSION","RUBY_RELEASE_DATE","RUBY_PLATFORM"}
},
{ Id=2,
Regex=[[[\$\@][\/\w]+]],
},
-- see OnStateChange below
{ Id=3,
Regex=[[m?\/.*?\/|(s|tr)\/.*?\/.*?\/[cegimosx]*]],
Group=0,
},
{ Id=3,
Regex=[[\:\:?\w+]],
},
{ Id=4,
Regex=[[(\w+)\s*\(]],
},
}
-- hereDoc opening delimiter, see OnStateChange to handle end of string
Strings={
Delimiter=[["|'|`|<<[\-"'`]?[\w_]+["'`]?]],
Interpolation = [[ %\{[^}]*?\} ]],
DelimiterPairs= {
{ Open=[[%q\(]], Close=[[\)]] },
{ Open=[[%Q\(]], Close=[[\)]] },
{ Open=[[%\(]], Close=[[\)]] },
{ Open=[[%x\(]], Close=[[\)]] },
{ Open=[[%q\{]], Close=[[\}]] },
{ Open=[[%Q\{]], Close=[[\}]] },
{ Open=[[%\{]], Close=[[\}]] },
{ Open=[[%x\{]], Close=[[\}]] },
}
}
IgnoreCase=false
Comments={
{ Block=false,
Delimiter= { [[#]] },
},
{ Block=true,
Nested=false,
Delimiter= { [[\=begin]],[[\=end]] }
}
}
Operators=[[\(|\)|\[|\]|\{|\}|\,|\;|\:|\.|\&|<|>|\!|\-|\+|\/|\*|\=|\?|\%|\|]]
-- resolve issue with # which starts comments and extrapolation sequences in strings
function OnStateChange(oldState, newState, token, groupID)
-- https://fossies.org/linux/misc/puppet-5.3.2.tar.gz/puppet-5.3.2/lib/puppet/indirector/hiera.rb?m=t
if token==")" or token=="}" or token=="{" and oldState~=HL_STRING then
return HL_OPERATOR
end
if oldState~=HL_STRING and newState==HL_INTERPOLATION then
return HL_REJECT
end
if oldState==HL_STRING and token==hereDoc then
hereDoc = nil
return HL_STRING_END
end
if hereDoc~=nil then
return HL_STRING
end
-- resolve issue with regex expression which spans strings like "</i>" + VAR + "</i>"
if string.sub(token,1,1)=="/" and oldState==HL_STRING and newState==HL_KEYWORD then
return HL_REJECT
end
--recognize hereDoc multine strings
--do not clear hereDoc if token is ",' or `
if (oldState==HL_STANDARD or oldState==HL_STRING) and newState==HL_STRING
and not string.find("\"'`", token) then
hereDoc = string.match(token, "<<[%-\"'`]?([%a_]+)" )
end
-- fix quoted string termination
if oldState~=HL_STRING then
qString=0
end
if newState==HL_STRING and (token=="%q(" or token=="%Q(" or token=="%(" or token=="%x(" ) then
qString=1
return HL_STRING
end
if newState==HL_STRING and (token=="%q{" or token=="%Q{" or token=="%{" or token=="%x{" ) then
qString=2
return HL_STRING
end
if oldState==HL_STRING and qString==1 and token==")" then
qString=0
return HL_STRING_END
end
if oldState==HL_STRING and qString==2 and token=="}" then
qString=0
return HL_STRING_END
end
return newState
end
|