gitlab-rouge 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +23 -0
- data/LICENSE +186 -0
- data/bin/rougify +16 -0
- data/gitlab-rouge.gemspec +17 -0
- data/lib/rouge.rb +57 -0
- data/lib/rouge/cli.rb +363 -0
- data/lib/rouge/demos/apache +21 -0
- data/lib/rouge/demos/applescript +2 -0
- data/lib/rouge/demos/c +8 -0
- data/lib/rouge/demos/clojure +5 -0
- data/lib/rouge/demos/coffeescript +5 -0
- data/lib/rouge/demos/common_lisp +1 -0
- data/lib/rouge/demos/conf +4 -0
- data/lib/rouge/demos/cpp +8 -0
- data/lib/rouge/demos/csharp +5 -0
- data/lib/rouge/demos/css +4 -0
- data/lib/rouge/demos/dart +6 -0
- data/lib/rouge/demos/diff +7 -0
- data/lib/rouge/demos/elixir +1 -0
- data/lib/rouge/demos/erb +1 -0
- data/lib/rouge/demos/erlang +7 -0
- data/lib/rouge/demos/factor +5 -0
- data/lib/rouge/demos/gherkin +17 -0
- data/lib/rouge/demos/glsl +14 -0
- data/lib/rouge/demos/go +7 -0
- data/lib/rouge/demos/groovy +9 -0
- data/lib/rouge/demos/haml +5 -0
- data/lib/rouge/demos/handlebars +7 -0
- data/lib/rouge/demos/haskell +6 -0
- data/lib/rouge/demos/html +8 -0
- data/lib/rouge/demos/http +14 -0
- data/lib/rouge/demos/ini +4 -0
- data/lib/rouge/demos/io +11 -0
- data/lib/rouge/demos/java +5 -0
- data/lib/rouge/demos/javascript +1 -0
- data/lib/rouge/demos/json +1 -0
- data/lib/rouge/demos/json-doc +1 -0
- data/lib/rouge/demos/liquid +11 -0
- data/lib/rouge/demos/literate_coffeescript +3 -0
- data/lib/rouge/demos/literate_haskell +7 -0
- data/lib/rouge/demos/llvm +20 -0
- data/lib/rouge/demos/lua +12 -0
- data/lib/rouge/demos/make +6 -0
- data/lib/rouge/demos/markdown +4 -0
- data/lib/rouge/demos/matlab +6 -0
- data/lib/rouge/demos/moonscript +16 -0
- data/lib/rouge/demos/nginx +5 -0
- data/lib/rouge/demos/nim +27 -0
- data/lib/rouge/demos/objective_c +14 -0
- data/lib/rouge/demos/ocaml +12 -0
- data/lib/rouge/demos/perl +5 -0
- data/lib/rouge/demos/php +3 -0
- data/lib/rouge/demos/plaintext +1 -0
- data/lib/rouge/demos/powershell +49 -0
- data/lib/rouge/demos/prolog +9 -0
- data/lib/rouge/demos/properties +7 -0
- data/lib/rouge/demos/puppet +6 -0
- data/lib/rouge/demos/python +6 -0
- data/lib/rouge/demos/qml +9 -0
- data/lib/rouge/demos/r +8 -0
- data/lib/rouge/demos/racket +24 -0
- data/lib/rouge/demos/ruby +9 -0
- data/lib/rouge/demos/rust +12 -0
- data/lib/rouge/demos/sass +3 -0
- data/lib/rouge/demos/scala +3 -0
- data/lib/rouge/demos/scheme +4 -0
- data/lib/rouge/demos/scss +5 -0
- data/lib/rouge/demos/sed +4 -0
- data/lib/rouge/demos/shell +2 -0
- data/lib/rouge/demos/slim +17 -0
- data/lib/rouge/demos/smalltalk +6 -0
- data/lib/rouge/demos/sml +4 -0
- data/lib/rouge/demos/sql +1 -0
- data/lib/rouge/demos/swift +5 -0
- data/lib/rouge/demos/tcl +1 -0
- data/lib/rouge/demos/tex +1 -0
- data/lib/rouge/demos/toml +9 -0
- data/lib/rouge/demos/tulip +14 -0
- data/lib/rouge/demos/vb +4 -0
- data/lib/rouge/demos/viml +5 -0
- data/lib/rouge/demos/xml +2 -0
- data/lib/rouge/demos/yaml +4 -0
- data/lib/rouge/formatter.rb +50 -0
- data/lib/rouge/formatters/html.rb +117 -0
- data/lib/rouge/formatters/null.rb +19 -0
- data/lib/rouge/formatters/terminal256.rb +176 -0
- data/lib/rouge/lexer.rb +443 -0
- data/lib/rouge/lexers/apache.rb +68 -0
- data/lib/rouge/lexers/apache/keywords.yml +453 -0
- data/lib/rouge/lexers/apple_script.rb +367 -0
- data/lib/rouge/lexers/c.rb +212 -0
- data/lib/rouge/lexers/clojure.rb +112 -0
- data/lib/rouge/lexers/coffeescript.rb +174 -0
- data/lib/rouge/lexers/common_lisp.rb +345 -0
- data/lib/rouge/lexers/conf.rb +24 -0
- data/lib/rouge/lexers/cpp.rb +66 -0
- data/lib/rouge/lexers/csharp.rb +88 -0
- data/lib/rouge/lexers/css.rb +271 -0
- data/lib/rouge/lexers/dart.rb +104 -0
- data/lib/rouge/lexers/diff.rb +31 -0
- data/lib/rouge/lexers/elixir.rb +108 -0
- data/lib/rouge/lexers/erb.rb +56 -0
- data/lib/rouge/lexers/erlang.rb +118 -0
- data/lib/rouge/lexers/factor.rb +302 -0
- data/lib/rouge/lexers/gherkin.rb +137 -0
- data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
- data/lib/rouge/lexers/glsl.rb +135 -0
- data/lib/rouge/lexers/go.rb +178 -0
- data/lib/rouge/lexers/groovy.rb +104 -0
- data/lib/rouge/lexers/haml.rb +228 -0
- data/lib/rouge/lexers/handlebars.rb +79 -0
- data/lib/rouge/lexers/haskell.rb +183 -0
- data/lib/rouge/lexers/html.rb +94 -0
- data/lib/rouge/lexers/http.rb +80 -0
- data/lib/rouge/lexers/ini.rb +57 -0
- data/lib/rouge/lexers/io.rb +68 -0
- data/lib/rouge/lexers/java.rb +76 -0
- data/lib/rouge/lexers/javascript.rb +297 -0
- data/lib/rouge/lexers/liquid.rb +287 -0
- data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
- data/lib/rouge/lexers/literate_haskell.rb +36 -0
- data/lib/rouge/lexers/llvm.rb +84 -0
- data/lib/rouge/lexers/lua.rb +122 -0
- data/lib/rouge/lexers/lua/builtins.rb +22 -0
- data/lib/rouge/lexers/make.rb +116 -0
- data/lib/rouge/lexers/markdown.rb +154 -0
- data/lib/rouge/lexers/matlab.rb +74 -0
- data/lib/rouge/lexers/matlab/builtins.rb +11 -0
- data/lib/rouge/lexers/moonscript.rb +110 -0
- data/lib/rouge/lexers/nginx.rb +71 -0
- data/lib/rouge/lexers/nim.rb +152 -0
- data/lib/rouge/lexers/objective_c.rb +197 -0
- data/lib/rouge/lexers/ocaml.rb +111 -0
- data/lib/rouge/lexers/perl.rb +197 -0
- data/lib/rouge/lexers/php.rb +173 -0
- data/lib/rouge/lexers/php/builtins.rb +204 -0
- data/lib/rouge/lexers/plain_text.rb +25 -0
- data/lib/rouge/lexers/powershell.rb +96 -0
- data/lib/rouge/lexers/prolog.rb +64 -0
- data/lib/rouge/lexers/properties.rb +55 -0
- data/lib/rouge/lexers/puppet.rb +128 -0
- data/lib/rouge/lexers/python.rb +228 -0
- data/lib/rouge/lexers/qml.rb +72 -0
- data/lib/rouge/lexers/r.rb +56 -0
- data/lib/rouge/lexers/racket.rb +542 -0
- data/lib/rouge/lexers/ruby.rb +415 -0
- data/lib/rouge/lexers/rust.rb +191 -0
- data/lib/rouge/lexers/sass.rb +74 -0
- data/lib/rouge/lexers/sass/common.rb +180 -0
- data/lib/rouge/lexers/scala.rb +142 -0
- data/lib/rouge/lexers/scheme.rb +112 -0
- data/lib/rouge/lexers/scss.rb +34 -0
- data/lib/rouge/lexers/sed.rb +170 -0
- data/lib/rouge/lexers/shell.rb +152 -0
- data/lib/rouge/lexers/slim.rb +228 -0
- data/lib/rouge/lexers/smalltalk.rb +116 -0
- data/lib/rouge/lexers/sml.rb +347 -0
- data/lib/rouge/lexers/sql.rb +140 -0
- data/lib/rouge/lexers/swift.rb +144 -0
- data/lib/rouge/lexers/tcl.rb +192 -0
- data/lib/rouge/lexers/tex.rb +72 -0
- data/lib/rouge/lexers/toml.rb +71 -0
- data/lib/rouge/lexers/tulip.rb +75 -0
- data/lib/rouge/lexers/vb.rb +164 -0
- data/lib/rouge/lexers/viml.rb +101 -0
- data/lib/rouge/lexers/viml/keywords.rb +12 -0
- data/lib/rouge/lexers/xml.rb +59 -0
- data/lib/rouge/lexers/yaml.rb +364 -0
- data/lib/rouge/plugins/redcarpet.rb +30 -0
- data/lib/rouge/regex_lexer.rb +439 -0
- data/lib/rouge/template_lexer.rb +22 -0
- data/lib/rouge/text_analyzer.rb +48 -0
- data/lib/rouge/theme.rb +195 -0
- data/lib/rouge/themes/base16.rb +130 -0
- data/lib/rouge/themes/colorful.rb +67 -0
- data/lib/rouge/themes/github.rb +71 -0
- data/lib/rouge/themes/molokai.rb +82 -0
- data/lib/rouge/themes/monokai.rb +92 -0
- data/lib/rouge/themes/monokai_sublime.rb +90 -0
- data/lib/rouge/themes/thankful_eyes.rb +71 -0
- data/lib/rouge/token.rb +182 -0
- data/lib/rouge/util.rb +101 -0
- data/lib/rouge/version.rb +7 -0
- metadata +231 -0
@@ -0,0 +1,72 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class TeX < RegexLexer
|
6
|
+
title "TeX"
|
7
|
+
desc "The TeX typesetting system"
|
8
|
+
tag 'tex'
|
9
|
+
aliases 'TeX', 'LaTeX', 'latex'
|
10
|
+
|
11
|
+
filenames '*.tex', '*.aux', '*.toc'
|
12
|
+
mimetypes 'text/x-tex', 'text/x-latex'
|
13
|
+
|
14
|
+
def self.analyze_text(text)
|
15
|
+
return 1 if text =~ /\A\s*\\documentclass/
|
16
|
+
return 1 if text =~ /\A\s*\\input/
|
17
|
+
return 1 if text =~ /\A\s*\\documentstyle/
|
18
|
+
return 1 if text =~ /\A\s*\\relax/
|
19
|
+
end
|
20
|
+
|
21
|
+
command = /\\([a-z]+|\s+|.)/i
|
22
|
+
|
23
|
+
state :general do
|
24
|
+
rule /%.*$/, Comment
|
25
|
+
rule /[{}&_^]/, Punctuation
|
26
|
+
end
|
27
|
+
|
28
|
+
state :root do
|
29
|
+
rule /\\\[/, Punctuation, :displaymath
|
30
|
+
rule /\\\(/, Punctuation, :inlinemath
|
31
|
+
rule /\$\$/, Punctuation, :displaymath
|
32
|
+
rule /\$/, Punctuation, :inlinemath
|
33
|
+
rule /\\(begin|end)\{.*?\}/, Name::Tag
|
34
|
+
|
35
|
+
rule /(\\verb)\b(\S)(.*?)(\2)/ do |m|
|
36
|
+
groups Name::Builtin, Keyword::Pseudo, Str::Other, Keyword::Pseudo
|
37
|
+
end
|
38
|
+
|
39
|
+
rule command, Keyword, :command
|
40
|
+
mixin :general
|
41
|
+
rule /[^\\$%&_^{}]+/, Text
|
42
|
+
end
|
43
|
+
|
44
|
+
state :math do
|
45
|
+
rule command, Name::Variable
|
46
|
+
mixin :general
|
47
|
+
rule /[0-9]+/, Num
|
48
|
+
rule /[-=!+*\/()\[\]]/, Operator
|
49
|
+
rule /[^=!+*\/()\[\]\\$%&_^{}0-9-]+/, Name::Builtin
|
50
|
+
end
|
51
|
+
|
52
|
+
state :inlinemath do
|
53
|
+
rule /\\\)/, Punctuation, :pop!
|
54
|
+
rule /\$/, Punctuation, :pop!
|
55
|
+
mixin :math
|
56
|
+
end
|
57
|
+
|
58
|
+
state :displaymath do
|
59
|
+
rule /\\\]/, Punctuation, :pop!
|
60
|
+
rule /\$\$/, Punctuation, :pop!
|
61
|
+
rule /\$/, Name::Builtin
|
62
|
+
mixin :math
|
63
|
+
end
|
64
|
+
|
65
|
+
state :command do
|
66
|
+
rule /\[.*?\]/, Name::Attribute
|
67
|
+
rule /\*/, Keyword
|
68
|
+
rule(//) { pop! }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class TOML < RegexLexer
|
6
|
+
title "TOML"
|
7
|
+
desc 'the TOML configuration format (https://github.com/mojombo/toml)'
|
8
|
+
tag 'toml'
|
9
|
+
|
10
|
+
filenames '*.toml'
|
11
|
+
mimetypes 'text/x-toml'
|
12
|
+
|
13
|
+
def self.analyze_text(text)
|
14
|
+
return 0.1 if text =~ /\A\[[\w.]+\]\s*\w+\s*=\s*("\w+")+/
|
15
|
+
end
|
16
|
+
|
17
|
+
identifier = /[\w.\S]+/
|
18
|
+
|
19
|
+
state :basic do
|
20
|
+
rule /\s+/, Text
|
21
|
+
rule /#.*?$/, Comment
|
22
|
+
rule /(true|false)/, Keyword::Constant
|
23
|
+
rule /(?<!=)\s*\[[\w\d\S]+\]/, Name::Namespace
|
24
|
+
|
25
|
+
rule /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/, Literal::Date
|
26
|
+
|
27
|
+
rule /(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?/, Num::Float
|
28
|
+
rule /\d+[eE][+-]?[0-9]+j?/, Num::Float
|
29
|
+
rule /\-?\d+/, Num::Integer
|
30
|
+
end
|
31
|
+
|
32
|
+
state :root do
|
33
|
+
mixin :basic
|
34
|
+
|
35
|
+
rule /(#{identifier})(\s*)(=)/ do
|
36
|
+
groups Name::Property, Text, Punctuation
|
37
|
+
push :value
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
state :value do
|
43
|
+
rule /\n/, Text, :pop!
|
44
|
+
mixin :content
|
45
|
+
end
|
46
|
+
|
47
|
+
state :content do
|
48
|
+
mixin :basic
|
49
|
+
rule /"/, Str, :dq
|
50
|
+
mixin :esc_str
|
51
|
+
rule /\,/, Punctuation
|
52
|
+
rule /\[/, Punctuation, :array
|
53
|
+
end
|
54
|
+
|
55
|
+
state :dq do
|
56
|
+
rule /"/, Str, :pop!
|
57
|
+
mixin :esc_str
|
58
|
+
rule /[^\\"]+/, Str
|
59
|
+
end
|
60
|
+
|
61
|
+
state :esc_str do
|
62
|
+
rule /\\[0t\tn\n "\\ r]/, Str::Escape
|
63
|
+
end
|
64
|
+
|
65
|
+
state :array do
|
66
|
+
mixin :content
|
67
|
+
rule /\]/, Punctuation, :pop!
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
class Tulip < RegexLexer
|
4
|
+
tag 'tulip'
|
5
|
+
aliases 'tlp'
|
6
|
+
filenames '*.tlp'
|
7
|
+
desc 'The tulip programming language http://github.com/jneen/tulip'
|
8
|
+
|
9
|
+
id = /\w[\w-]*/
|
10
|
+
|
11
|
+
def self.analyze_text(text)
|
12
|
+
return 1 if text.shebang?('tulip')
|
13
|
+
end
|
14
|
+
|
15
|
+
state :root do
|
16
|
+
rule /\s+/, Text
|
17
|
+
rule /#.*?\n/, Comment
|
18
|
+
rule /%#{id}/, Keyword::Type
|
19
|
+
rule /@#{id}/, Keyword
|
20
|
+
rule /[.][.]?#{id}/, Name::Label
|
21
|
+
rule /-#{id}[?]?/, Str::Symbol
|
22
|
+
rule /\d+/, Num
|
23
|
+
rule %r(/#{id}?), Name::Decorator
|
24
|
+
rule %r((#{id}/)(#{id})) do
|
25
|
+
groups Name::Namespace, Name::Variable
|
26
|
+
end
|
27
|
+
|
28
|
+
rule /"{/, Str, :string_interp
|
29
|
+
rule /'?{/, Str, :string
|
30
|
+
rule /['"][^\s)\]]+/, Str
|
31
|
+
|
32
|
+
rule /[$]/, Name::Variable
|
33
|
+
|
34
|
+
rule /[-+:;~!()\[\]=?>|_%,]/, Punctuation
|
35
|
+
rule /[.][.][.]/, Punctuation
|
36
|
+
rule id, Name
|
37
|
+
end
|
38
|
+
|
39
|
+
state :string_base do
|
40
|
+
rule /{/ do
|
41
|
+
token Str; push
|
42
|
+
end
|
43
|
+
|
44
|
+
rule /}/, Str, :pop!
|
45
|
+
rule /[$]/, Str
|
46
|
+
rule /[^${}\\]+/, Str
|
47
|
+
end
|
48
|
+
|
49
|
+
state :string do
|
50
|
+
mixin :string_base
|
51
|
+
rule /\\/, Str
|
52
|
+
end
|
53
|
+
|
54
|
+
state :interp do
|
55
|
+
rule(/[(]/) { token Punctuation; push }
|
56
|
+
rule /[)]/, Punctuation, :pop!
|
57
|
+
mixin :root
|
58
|
+
end
|
59
|
+
|
60
|
+
state :interp_root do
|
61
|
+
rule /[(]/, Str::Interpol, :interp
|
62
|
+
rule /[)]/, Str::Interpol, :pop!
|
63
|
+
mixin :root
|
64
|
+
end
|
65
|
+
|
66
|
+
state :string_interp do
|
67
|
+
rule /\\./, Str::Escape
|
68
|
+
rule /[$][(]/, Str::Interpol, :interp_root
|
69
|
+
rule /[$]#{id}?/, Name::Variable
|
70
|
+
mixin :string_base
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
@@ -0,0 +1,164 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class VisualBasic < RegexLexer
|
6
|
+
title "Visual Basic"
|
7
|
+
desc "Visual Basic"
|
8
|
+
tag 'vb'
|
9
|
+
aliases 'visualbasic'
|
10
|
+
filenames '*.vbs'
|
11
|
+
mimetypes 'text/x-visualbasic', 'application/x-visualbasic'
|
12
|
+
|
13
|
+
def self.keywords
|
14
|
+
@keywords ||= Set.new %w(
|
15
|
+
AddHandler Alias ByRef ByVal CBool CByte CChar CDate CDbl CDec
|
16
|
+
CInt CLng CObj CSByte CShort CSng CStr CType CUInt CULng CUShort
|
17
|
+
Call Case Catch Class Const Continue Declare Default Delegate
|
18
|
+
Dim DirectCast Do Each Else ElseIf End EndIf Enum Erase Error
|
19
|
+
Event Exit False Finally For Friend Function Get Global GoSub
|
20
|
+
GoTo Handles If Implements Imports Inherits Interface Let
|
21
|
+
Lib Loop Me Module MustInherit MustOverride MyBase MyClass
|
22
|
+
Namespace Narrowing New Next Not NotInheritable NotOverridable
|
23
|
+
Nothing Of On Operator Option Optional Overloads Overridable
|
24
|
+
Overrides ParamArray Partial Private Property Protected Public
|
25
|
+
RaiseEvent ReDim ReadOnly RemoveHandler Resume Return Select Set
|
26
|
+
Shadows Shared Single Static Step Stop Structure Sub SyncLock
|
27
|
+
Then Throw To True Try TryCast Using Wend When While Widening
|
28
|
+
With WithEvents WriteOnly
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.keywords_type
|
33
|
+
@keywords_type ||= Set.new %w(
|
34
|
+
Boolean Byte Char Date Decimal Double Integer Long Object
|
35
|
+
SByte Short Single String Variant UInteger ULong UShort
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.operator_words
|
40
|
+
@operator_words ||= Set.new %w(
|
41
|
+
AddressOf And AndAlso As GetType In Is IsNot Like Mod Or OrElse
|
42
|
+
TypeOf Xor
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.builtins
|
47
|
+
@builtins ||= Set.new %w(
|
48
|
+
Console ConsoleColor
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
id = /[a-z_]\w*/i
|
53
|
+
upper_id = /[A-Z]\w*/
|
54
|
+
|
55
|
+
state :whitespace do
|
56
|
+
rule /\s+/, Text
|
57
|
+
rule /\n/, Text, :bol
|
58
|
+
rule /rem\b.*?$/i, Comment::Single
|
59
|
+
rule %r(%\{.*?%\})m, Comment::Multiline
|
60
|
+
rule /'.*$/, Comment::Single
|
61
|
+
end
|
62
|
+
|
63
|
+
state :bol do
|
64
|
+
rule /\s+/, Text
|
65
|
+
rule /<.*?>/, Name::Attribute
|
66
|
+
rule(//) { :pop! }
|
67
|
+
end
|
68
|
+
|
69
|
+
state :root do
|
70
|
+
mixin :whitespace
|
71
|
+
rule %r(
|
72
|
+
[#]If\b .*? \bThen
|
73
|
+
| [#]ElseIf\b .*? \bThen
|
74
|
+
| [#]End \s+ If
|
75
|
+
| [#]Const
|
76
|
+
| [#]ExternalSource .*? \n
|
77
|
+
| [#]End \s+ ExternalSource
|
78
|
+
| [#]Region .*? \n
|
79
|
+
| [#]End \s+ Region
|
80
|
+
| [#]ExternalChecksum
|
81
|
+
)x, Comment::Preproc
|
82
|
+
rule /[.]/, Punctuation, :dotted
|
83
|
+
rule /[(){}!#,:]/, Punctuation
|
84
|
+
rule /Option\s+(Strict|Explicit|Compare)\s+(On|Off|Binary|Text)/,
|
85
|
+
Keyword::Declaration
|
86
|
+
rule /End\b/, Keyword, :end
|
87
|
+
rule /(Dim|Const)\b/, Keyword, :dim
|
88
|
+
rule /(Function|Sub|Property)\b/, Keyword, :funcname
|
89
|
+
rule /(Class|Structure|Enum)\b/, Keyword, :classname
|
90
|
+
rule /(Module|Namespace|Imports)\b/, Keyword, :namespace
|
91
|
+
|
92
|
+
rule upper_id do |m|
|
93
|
+
match = m[0]
|
94
|
+
if self.class.keywords.include? match
|
95
|
+
token Keyword
|
96
|
+
elsif self.class.keywords_type.include? match
|
97
|
+
token Keyword::Type
|
98
|
+
elsif self.class.operator_words.include? match
|
99
|
+
token Operator::Word
|
100
|
+
elsif self.class.builtins.include? match
|
101
|
+
token Name::Builtin
|
102
|
+
else
|
103
|
+
token Name
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
rule(
|
108
|
+
%r(&=|[*]=|/=|\\=|\^=|\+=|-=|<<=|>>=|<<|>>|:=|<=|>=|<>|[-&*/\\^+=<>.]),
|
109
|
+
Operator
|
110
|
+
)
|
111
|
+
|
112
|
+
rule /"/, Str, :string
|
113
|
+
rule /#{id}[%&@!#\$]?/, Name
|
114
|
+
rule /#.*?#/, Literal::Date
|
115
|
+
|
116
|
+
rule /(\d+\.\d*|\d*\.\d+)(f[+-]?\d+)?/i, Num::Float
|
117
|
+
rule /\d+([SILDFR]|US|UI|UL)?/, Num::Integer
|
118
|
+
rule /&H[0-9a-f]+([SILDFR]|US|UI|UL)?/, Num::Integer
|
119
|
+
rule /&O[0-7]+([SILDFR]|US|UI|UL)?/, Num::Integer
|
120
|
+
|
121
|
+
rule /_\n/, Keyword
|
122
|
+
end
|
123
|
+
|
124
|
+
state :dotted do
|
125
|
+
mixin :whitespace
|
126
|
+
rule id, Name, :pop!
|
127
|
+
end
|
128
|
+
|
129
|
+
state :string do
|
130
|
+
rule /""/, Str::Escape
|
131
|
+
rule /"C?/, Str, :pop!
|
132
|
+
rule /[^"]+/, Str
|
133
|
+
end
|
134
|
+
|
135
|
+
state :dim do
|
136
|
+
mixin :whitespace
|
137
|
+
rule id, Name::Variable, :pop!
|
138
|
+
rule(//) { pop! }
|
139
|
+
end
|
140
|
+
|
141
|
+
state :funcname do
|
142
|
+
mixin :whitespace
|
143
|
+
rule id, Name::Function, :pop!
|
144
|
+
end
|
145
|
+
|
146
|
+
state :classname do
|
147
|
+
mixin :whitespace
|
148
|
+
rule id, Name::Class, :pop!
|
149
|
+
end
|
150
|
+
|
151
|
+
state :namespace do
|
152
|
+
mixin :whitespace
|
153
|
+
rule /#{id}([.]#{id})*/, Name::Namespace, :pop!
|
154
|
+
end
|
155
|
+
|
156
|
+
state :end do
|
157
|
+
mixin :whitespace
|
158
|
+
rule /(Function|Sub|Property|Class|Structure|Enum|Module|Namespace)\b/,
|
159
|
+
Keyword, :pop!
|
160
|
+
rule(//) { pop! }
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
|
3
|
+
module Rouge
|
4
|
+
module Lexers
|
5
|
+
class VimL < RegexLexer
|
6
|
+
title "VimL"
|
7
|
+
desc "VimL, the scripting language for the Vim editor (vim.org)"
|
8
|
+
tag 'viml'
|
9
|
+
aliases 'vim', 'vimscript', 'ex'
|
10
|
+
filenames '*.vim', '*.vba', '.vimrc', '.exrc', '.gvimrc',
|
11
|
+
'_vimrc', '_exrc', '_gvimrc' # _ names for windows
|
12
|
+
|
13
|
+
mimetypes 'text/x-vim'
|
14
|
+
|
15
|
+
def self.keywords
|
16
|
+
load Pathname.new(__FILE__).dirname.join('viml/keywords.rb')
|
17
|
+
self.keywords
|
18
|
+
end
|
19
|
+
|
20
|
+
state :root do
|
21
|
+
rule /^(\s*)(".*?)$/ do
|
22
|
+
groups Text, Comment
|
23
|
+
end
|
24
|
+
|
25
|
+
rule /^\s*\\/, Str::Escape
|
26
|
+
|
27
|
+
rule /[ \t]+/, Text
|
28
|
+
|
29
|
+
# TODO: regexes can have other delimiters
|
30
|
+
rule %r(/(\\\\|\\/|[^\n/])*/), Str::Regex
|
31
|
+
rule %r("(\\\\|\\"|[^\n"])*"), Str::Double
|
32
|
+
rule %r('(\\\\|\\'|[^\n'])*'), Str::Single
|
33
|
+
|
34
|
+
# if it's not a string, it's a comment.
|
35
|
+
rule /(?<=\s)"[^-:.%#=*].*?$/, Comment
|
36
|
+
|
37
|
+
rule /-?\d+/, Num
|
38
|
+
rule /#[0-9a-f]{6}/i, Num::Hex
|
39
|
+
rule /^:/, Punctuation
|
40
|
+
rule /[():<>+=!\[\]{}\|,~.-]/, Punctuation
|
41
|
+
rule /\b(let|if|else|endif|elseif|fun|function|endfunction)\b/,
|
42
|
+
Keyword
|
43
|
+
|
44
|
+
rule /\b(NONE|bold|italic|underline|dark|light)\b/, Name::Builtin
|
45
|
+
|
46
|
+
rule /[absg]:\w+\b/, Name::Variable
|
47
|
+
rule /\b\w+\b/ do |m|
|
48
|
+
name = m[0]
|
49
|
+
keywords = self.class.keywords
|
50
|
+
|
51
|
+
if mapping_contains?(keywords[:command], name)
|
52
|
+
token Keyword
|
53
|
+
elsif mapping_contains?(keywords[:option], name)
|
54
|
+
token Name::Builtin
|
55
|
+
elsif mapping_contains?(keywords[:auto], name)
|
56
|
+
token Name::Builtin
|
57
|
+
else
|
58
|
+
token Text
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# no errors in VimL!
|
63
|
+
rule /./m, Text
|
64
|
+
end
|
65
|
+
|
66
|
+
def mapping_contains?(mapping, word)
|
67
|
+
shortest, longest = find_likely_mapping(mapping, word)
|
68
|
+
|
69
|
+
shortest and word.start_with?(shortest) and
|
70
|
+
longest and longest.start_with?(word)
|
71
|
+
end
|
72
|
+
|
73
|
+
# binary search through the mappings to find the one that's likely
|
74
|
+
# to actually work.
|
75
|
+
def find_likely_mapping(mapping, word)
|
76
|
+
min = 0
|
77
|
+
max = mapping.size
|
78
|
+
|
79
|
+
until max == min
|
80
|
+
mid = (max + min) / 2
|
81
|
+
|
82
|
+
cmp, _ = mapping[mid]
|
83
|
+
|
84
|
+
case word <=> cmp
|
85
|
+
when 1
|
86
|
+
# too low
|
87
|
+
min = mid + 1
|
88
|
+
when -1
|
89
|
+
# too high
|
90
|
+
max = mid
|
91
|
+
when 0
|
92
|
+
# just right, abort!
|
93
|
+
return mapping[mid]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
mapping[max - 1]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|