gitlab-rouge 1.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +23 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +16 -0
  5. data/gitlab-rouge.gemspec +17 -0
  6. data/lib/rouge.rb +57 -0
  7. data/lib/rouge/cli.rb +363 -0
  8. data/lib/rouge/demos/apache +21 -0
  9. data/lib/rouge/demos/applescript +2 -0
  10. data/lib/rouge/demos/c +8 -0
  11. data/lib/rouge/demos/clojure +5 -0
  12. data/lib/rouge/demos/coffeescript +5 -0
  13. data/lib/rouge/demos/common_lisp +1 -0
  14. data/lib/rouge/demos/conf +4 -0
  15. data/lib/rouge/demos/cpp +8 -0
  16. data/lib/rouge/demos/csharp +5 -0
  17. data/lib/rouge/demos/css +4 -0
  18. data/lib/rouge/demos/dart +6 -0
  19. data/lib/rouge/demos/diff +7 -0
  20. data/lib/rouge/demos/elixir +1 -0
  21. data/lib/rouge/demos/erb +1 -0
  22. data/lib/rouge/demos/erlang +7 -0
  23. data/lib/rouge/demos/factor +5 -0
  24. data/lib/rouge/demos/gherkin +17 -0
  25. data/lib/rouge/demos/glsl +14 -0
  26. data/lib/rouge/demos/go +7 -0
  27. data/lib/rouge/demos/groovy +9 -0
  28. data/lib/rouge/demos/haml +5 -0
  29. data/lib/rouge/demos/handlebars +7 -0
  30. data/lib/rouge/demos/haskell +6 -0
  31. data/lib/rouge/demos/html +8 -0
  32. data/lib/rouge/demos/http +14 -0
  33. data/lib/rouge/demos/ini +4 -0
  34. data/lib/rouge/demos/io +11 -0
  35. data/lib/rouge/demos/java +5 -0
  36. data/lib/rouge/demos/javascript +1 -0
  37. data/lib/rouge/demos/json +1 -0
  38. data/lib/rouge/demos/json-doc +1 -0
  39. data/lib/rouge/demos/liquid +11 -0
  40. data/lib/rouge/demos/literate_coffeescript +3 -0
  41. data/lib/rouge/demos/literate_haskell +7 -0
  42. data/lib/rouge/demos/llvm +20 -0
  43. data/lib/rouge/demos/lua +12 -0
  44. data/lib/rouge/demos/make +6 -0
  45. data/lib/rouge/demos/markdown +4 -0
  46. data/lib/rouge/demos/matlab +6 -0
  47. data/lib/rouge/demos/moonscript +16 -0
  48. data/lib/rouge/demos/nginx +5 -0
  49. data/lib/rouge/demos/nim +27 -0
  50. data/lib/rouge/demos/objective_c +14 -0
  51. data/lib/rouge/demos/ocaml +12 -0
  52. data/lib/rouge/demos/perl +5 -0
  53. data/lib/rouge/demos/php +3 -0
  54. data/lib/rouge/demos/plaintext +1 -0
  55. data/lib/rouge/demos/powershell +49 -0
  56. data/lib/rouge/demos/prolog +9 -0
  57. data/lib/rouge/demos/properties +7 -0
  58. data/lib/rouge/demos/puppet +6 -0
  59. data/lib/rouge/demos/python +6 -0
  60. data/lib/rouge/demos/qml +9 -0
  61. data/lib/rouge/demos/r +8 -0
  62. data/lib/rouge/demos/racket +24 -0
  63. data/lib/rouge/demos/ruby +9 -0
  64. data/lib/rouge/demos/rust +12 -0
  65. data/lib/rouge/demos/sass +3 -0
  66. data/lib/rouge/demos/scala +3 -0
  67. data/lib/rouge/demos/scheme +4 -0
  68. data/lib/rouge/demos/scss +5 -0
  69. data/lib/rouge/demos/sed +4 -0
  70. data/lib/rouge/demos/shell +2 -0
  71. data/lib/rouge/demos/slim +17 -0
  72. data/lib/rouge/demos/smalltalk +6 -0
  73. data/lib/rouge/demos/sml +4 -0
  74. data/lib/rouge/demos/sql +1 -0
  75. data/lib/rouge/demos/swift +5 -0
  76. data/lib/rouge/demos/tcl +1 -0
  77. data/lib/rouge/demos/tex +1 -0
  78. data/lib/rouge/demos/toml +9 -0
  79. data/lib/rouge/demos/tulip +14 -0
  80. data/lib/rouge/demos/vb +4 -0
  81. data/lib/rouge/demos/viml +5 -0
  82. data/lib/rouge/demos/xml +2 -0
  83. data/lib/rouge/demos/yaml +4 -0
  84. data/lib/rouge/formatter.rb +50 -0
  85. data/lib/rouge/formatters/html.rb +117 -0
  86. data/lib/rouge/formatters/null.rb +19 -0
  87. data/lib/rouge/formatters/terminal256.rb +176 -0
  88. data/lib/rouge/lexer.rb +443 -0
  89. data/lib/rouge/lexers/apache.rb +68 -0
  90. data/lib/rouge/lexers/apache/keywords.yml +453 -0
  91. data/lib/rouge/lexers/apple_script.rb +367 -0
  92. data/lib/rouge/lexers/c.rb +212 -0
  93. data/lib/rouge/lexers/clojure.rb +112 -0
  94. data/lib/rouge/lexers/coffeescript.rb +174 -0
  95. data/lib/rouge/lexers/common_lisp.rb +345 -0
  96. data/lib/rouge/lexers/conf.rb +24 -0
  97. data/lib/rouge/lexers/cpp.rb +66 -0
  98. data/lib/rouge/lexers/csharp.rb +88 -0
  99. data/lib/rouge/lexers/css.rb +271 -0
  100. data/lib/rouge/lexers/dart.rb +104 -0
  101. data/lib/rouge/lexers/diff.rb +31 -0
  102. data/lib/rouge/lexers/elixir.rb +108 -0
  103. data/lib/rouge/lexers/erb.rb +56 -0
  104. data/lib/rouge/lexers/erlang.rb +118 -0
  105. data/lib/rouge/lexers/factor.rb +302 -0
  106. data/lib/rouge/lexers/gherkin.rb +137 -0
  107. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  108. data/lib/rouge/lexers/glsl.rb +135 -0
  109. data/lib/rouge/lexers/go.rb +178 -0
  110. data/lib/rouge/lexers/groovy.rb +104 -0
  111. data/lib/rouge/lexers/haml.rb +228 -0
  112. data/lib/rouge/lexers/handlebars.rb +79 -0
  113. data/lib/rouge/lexers/haskell.rb +183 -0
  114. data/lib/rouge/lexers/html.rb +94 -0
  115. data/lib/rouge/lexers/http.rb +80 -0
  116. data/lib/rouge/lexers/ini.rb +57 -0
  117. data/lib/rouge/lexers/io.rb +68 -0
  118. data/lib/rouge/lexers/java.rb +76 -0
  119. data/lib/rouge/lexers/javascript.rb +297 -0
  120. data/lib/rouge/lexers/liquid.rb +287 -0
  121. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  122. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  123. data/lib/rouge/lexers/llvm.rb +84 -0
  124. data/lib/rouge/lexers/lua.rb +122 -0
  125. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  126. data/lib/rouge/lexers/make.rb +116 -0
  127. data/lib/rouge/lexers/markdown.rb +154 -0
  128. data/lib/rouge/lexers/matlab.rb +74 -0
  129. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  130. data/lib/rouge/lexers/moonscript.rb +110 -0
  131. data/lib/rouge/lexers/nginx.rb +71 -0
  132. data/lib/rouge/lexers/nim.rb +152 -0
  133. data/lib/rouge/lexers/objective_c.rb +197 -0
  134. data/lib/rouge/lexers/ocaml.rb +111 -0
  135. data/lib/rouge/lexers/perl.rb +197 -0
  136. data/lib/rouge/lexers/php.rb +173 -0
  137. data/lib/rouge/lexers/php/builtins.rb +204 -0
  138. data/lib/rouge/lexers/plain_text.rb +25 -0
  139. data/lib/rouge/lexers/powershell.rb +96 -0
  140. data/lib/rouge/lexers/prolog.rb +64 -0
  141. data/lib/rouge/lexers/properties.rb +55 -0
  142. data/lib/rouge/lexers/puppet.rb +128 -0
  143. data/lib/rouge/lexers/python.rb +228 -0
  144. data/lib/rouge/lexers/qml.rb +72 -0
  145. data/lib/rouge/lexers/r.rb +56 -0
  146. data/lib/rouge/lexers/racket.rb +542 -0
  147. data/lib/rouge/lexers/ruby.rb +415 -0
  148. data/lib/rouge/lexers/rust.rb +191 -0
  149. data/lib/rouge/lexers/sass.rb +74 -0
  150. data/lib/rouge/lexers/sass/common.rb +180 -0
  151. data/lib/rouge/lexers/scala.rb +142 -0
  152. data/lib/rouge/lexers/scheme.rb +112 -0
  153. data/lib/rouge/lexers/scss.rb +34 -0
  154. data/lib/rouge/lexers/sed.rb +170 -0
  155. data/lib/rouge/lexers/shell.rb +152 -0
  156. data/lib/rouge/lexers/slim.rb +228 -0
  157. data/lib/rouge/lexers/smalltalk.rb +116 -0
  158. data/lib/rouge/lexers/sml.rb +347 -0
  159. data/lib/rouge/lexers/sql.rb +140 -0
  160. data/lib/rouge/lexers/swift.rb +144 -0
  161. data/lib/rouge/lexers/tcl.rb +192 -0
  162. data/lib/rouge/lexers/tex.rb +72 -0
  163. data/lib/rouge/lexers/toml.rb +71 -0
  164. data/lib/rouge/lexers/tulip.rb +75 -0
  165. data/lib/rouge/lexers/vb.rb +164 -0
  166. data/lib/rouge/lexers/viml.rb +101 -0
  167. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  168. data/lib/rouge/lexers/xml.rb +59 -0
  169. data/lib/rouge/lexers/yaml.rb +364 -0
  170. data/lib/rouge/plugins/redcarpet.rb +30 -0
  171. data/lib/rouge/regex_lexer.rb +439 -0
  172. data/lib/rouge/template_lexer.rb +22 -0
  173. data/lib/rouge/text_analyzer.rb +48 -0
  174. data/lib/rouge/theme.rb +195 -0
  175. data/lib/rouge/themes/base16.rb +130 -0
  176. data/lib/rouge/themes/colorful.rb +67 -0
  177. data/lib/rouge/themes/github.rb +71 -0
  178. data/lib/rouge/themes/molokai.rb +82 -0
  179. data/lib/rouge/themes/monokai.rb +92 -0
  180. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  181. data/lib/rouge/themes/thankful_eyes.rb +71 -0
  182. data/lib/rouge/token.rb +182 -0
  183. data/lib/rouge/util.rb +101 -0
  184. data/lib/rouge/version.rb +7 -0
  185. metadata +231 -0
@@ -0,0 +1,112 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Clojure < RegexLexer
6
+ title "Clojure"
7
+ desc "The Clojure programming language (clojure.org)"
8
+
9
+ tag 'clojure'
10
+ aliases 'clj', 'cljs'
11
+
12
+ filenames '*.clj', '*.cljs'
13
+
14
+ mimetypes 'text/x-clojure', 'application/x-clojure'
15
+
16
+ def self.keywords
17
+ @keywords ||= Set.new %w(
18
+ fn def defn defmacro defmethod defmulti defn- defstruct if
19
+ cond let for
20
+ )
21
+ end
22
+
23
+ def self.builtins
24
+ @builtins ||= Set.new %w(
25
+ . .. * + - -> / < <= = == > >= accessor agent agent-errors
26
+ aget alength all-ns alter and append-child apply array-map
27
+ aset aset-boolean aset-byte aset-char aset-double aset-float
28
+ aset-int aset-long aset-short assert assoc await await-for bean
29
+ binding bit-and bit-not bit-or bit-shift-left bit-shift-right
30
+ bit-xor boolean branch? butlast byte cast char children
31
+ class clear-agent-errors comment commute comp comparator
32
+ complement concat conj cons constantly construct-proxy
33
+ contains? count create-ns create-struct cycle dec deref
34
+ difference disj dissoc distinct doall doc dorun doseq dosync
35
+ dotimes doto double down drop drop-while edit end? ensure eval
36
+ every? false? ffirst file-seq filter find find-doc find-ns
37
+ find-var first float flush fnseq frest gensym get-proxy-class
38
+ get hash-map hash-set identical? identity if-let import in-ns
39
+ inc index insert-child insert-left insert-right inspect-table
40
+ inspect-tree instance? int interleave intersection into
41
+ into-array iterate join key keys keyword keyword? last lazy-cat
42
+ lazy-cons left lefts line-seq list* list load load-file locking
43
+ long loop macroexpand macroexpand-1 make-array make-node map
44
+ map-invert map? mapcat max max-key memfn merge merge-with meta
45
+ min min-key name namespace neg? new newline next nil? node not
46
+ not-any? not-every? not= ns-imports ns-interns ns-map ns-name
47
+ ns-publics ns-refers ns-resolve ns-unmap nth nthrest or parse
48
+ partial path peek pop pos? pr pr-str print print-str println
49
+ println-str prn prn-str project proxy proxy-mappings quot
50
+ rand rand-int range re-find re-groups re-matcher re-matches
51
+ re-pattern re-seq read read-line reduce ref ref-set refer rem
52
+ remove remove-method remove-ns rename rename-keys repeat replace
53
+ replicate resolve rest resultset-seq reverse rfirst right
54
+ rights root rrest rseq second select select-keys send send-off
55
+ seq seq-zip seq? set short slurp some sort sort-by sorted-map
56
+ sorted-map-by sorted-set special-symbol? split-at split-with
57
+ str string? struct struct-map subs subvec symbol symbol?
58
+ sync take take-nth take-while test time to-array to-array-2d
59
+ tree-seq true? union up update-proxy val vals var-get var-set
60
+ var? vector vector-zip vector? when when-first when-let
61
+ when-not with-local-vars with-meta with-open with-out-str
62
+ xml-seq xml-zip zero? zipmap zipper'
63
+ )
64
+ end
65
+
66
+ identifier = %r([\w!$%*+,<=>?/.-]+)
67
+ keyword = %r([\w!\#$%*+,<=>?/.-]+)
68
+
69
+ def name_token(name)
70
+ return Keyword if self.class.keywords.include?(name)
71
+ return Name::Builtin if self.class.builtins.include?(name)
72
+ nil
73
+ end
74
+
75
+ state :root do
76
+ rule /;.*?\n/, Comment::Single
77
+ rule /\s+/m, Text::Whitespace
78
+
79
+ rule /-?\d+\.\d+/, Num::Float
80
+ rule /-?\d+/, Num::Integer
81
+ rule /0x-?[0-9a-fA-F]+/, Num::Hex
82
+
83
+ rule /"(\\.|[^"])*"/, Str
84
+ rule /'#{keyword}/, Str::Symbol
85
+ rule /::?#{keyword}/, Name::Constant
86
+ rule /\\(.|[a-z]+)/i, Str::Char
87
+
88
+
89
+ rule /~@|[`\'#^~&]/, Operator
90
+
91
+ rule /(\()(\s*)(#{identifier})/m do |m|
92
+ token Punctuation, m[1]
93
+ token Text::Whitespace, m[2]
94
+ token(name_token(m[3]) || Name::Function, m[3])
95
+ end
96
+
97
+ rule identifier do |m|
98
+ token name_token(m[0]) || Name
99
+ end
100
+
101
+ # vectors
102
+ rule /[\[\]]/, Punctuation
103
+
104
+ # maps
105
+ rule /[{}]/, Punctuation
106
+
107
+ # parentheses
108
+ rule /[()]/, Punctuation
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,174 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Coffeescript < RegexLexer
6
+ tag 'coffeescript'
7
+ aliases 'coffee', 'coffee-script'
8
+ filenames '*.coffee', 'Cakefile'
9
+ mimetypes 'text/coffeescript'
10
+
11
+ title "CoffeeScript"
12
+ desc 'The Coffeescript programming language (coffeescript.org)'
13
+
14
+ def self.analyze_text(text)
15
+ return 1 if text.shebang? 'coffee'
16
+ end
17
+
18
+ def self.keywords
19
+ @keywords ||= Set.new %w(
20
+ for in of while break return continue switch when then if else
21
+ throw try catch finally new delete typeof instanceof super
22
+ extends this class by
23
+ )
24
+ end
25
+
26
+ def self.constants
27
+ @constants ||= Set.new %w(
28
+ true false yes no on off null NaN Infinity undefined
29
+ )
30
+ end
31
+
32
+ def self.builtins
33
+ @builtins ||= Set.new %w(
34
+ Array Boolean Date Error Function Math netscape Number Object
35
+ Packages RegExp String sun decodeURI decodeURIComponent
36
+ encodeURI encodeURIComponent eval isFinite isNaN parseFloat
37
+ parseInt document window
38
+ )
39
+ end
40
+
41
+ id = /[$a-zA-Z_][a-zA-Z0-9_]*/
42
+
43
+ state :comments_and_whitespace do
44
+ rule /\s+/m, Text
45
+ rule /###.*?###/m, Comment::Multiline
46
+ rule /#.*?\n/, Comment::Single
47
+ end
48
+
49
+ state :multiline_regex do
50
+ # this order is important, so that #{ isn't interpreted
51
+ # as a comment
52
+ mixin :has_interpolation
53
+ mixin :comments_and_whitespace
54
+
55
+ rule %r(///([gim]+\b|\B)), Str::Regex, :pop!
56
+ rule %r(/), Str::Regex
57
+ rule %r([^/#]+), Str::Regex
58
+ end
59
+
60
+ state :slash_starts_regex do
61
+ mixin :comments_and_whitespace
62
+ rule %r(///) do
63
+ token Str::Regex
64
+ goto :multiline_regex
65
+ end
66
+
67
+ rule %r(
68
+ /(\\.|[^\[/\\\n]|\[(\\.|[^\]\\\n])*\])+/ # a regex
69
+ ([gim]+\b|\B)
70
+ )x, Str::Regex, :pop!
71
+
72
+ rule(//) { pop! }
73
+ end
74
+
75
+ state :root do
76
+ rule(%r(^(?=\s|/|<!--))) { push :slash_starts_regex }
77
+ mixin :comments_and_whitespace
78
+ rule %r(
79
+ [+][+]|--|~|&&|\band\b|\bor\b|\bis\b|\bisnt\b|\bnot\b|[?]|:|=|
80
+ [|][|]|\\(?=\n)|(<<|>>>?|==?|!=?|[-<>+*`%&|^/])=?
81
+ )x, Operator, :slash_starts_regex
82
+
83
+ rule /[-=]>/, Name::Function
84
+
85
+ rule /(@)([ \t]*)(#{id})/ do
86
+ groups Name::Variable::Instance, Text, Name::Attribute
87
+ push :slash_starts_regex
88
+ end
89
+
90
+ rule /([.])([ \t]*)(#{id})/ do
91
+ groups Punctuation, Text, Name::Attribute
92
+ push :slash_starts_regex
93
+ end
94
+
95
+ rule /#{id}(?=\s*:)/, Name::Attribute, :slash_starts_regex
96
+
97
+ rule /#{id}/ do |m|
98
+ if self.class.keywords.include? m[0]
99
+ token Keyword
100
+ elsif self.class.constants.include? m[0]
101
+ token Name::Constant
102
+ elsif self.class.builtins.include? m[0]
103
+ token Name::Builtin
104
+ else
105
+ token Name::Other
106
+ end
107
+
108
+ push :slash_starts_regex
109
+ end
110
+
111
+ rule /[{(\[;,]/, Punctuation, :slash_starts_regex
112
+ rule /[})\].]/, Punctuation
113
+
114
+ rule /\d+[.]\d+([eE]\d+)?[fd]?/, Num::Float
115
+ rule /0x[0-9a-fA-F]+/, Num::Hex
116
+ rule /\d+/, Num::Integer
117
+ rule /"""/, Str, :tdqs
118
+ rule /'''/, Str, :tsqs
119
+ rule /"/, Str, :dqs
120
+ rule /'/, Str, :sqs
121
+ end
122
+
123
+ state :strings do
124
+ # all coffeescript strings are multi-line
125
+ rule /[^#\\'"]+/m, Str
126
+
127
+ rule /\\./, Str::Escape
128
+ rule /#/, Str
129
+ end
130
+
131
+ state :double_strings do
132
+ rule /'/, Str
133
+ mixin :has_interpolation
134
+ mixin :strings
135
+ end
136
+
137
+ state :single_strings do
138
+ rule /"/, Str
139
+ mixin :strings
140
+ end
141
+
142
+ state :interpolation do
143
+ rule /}/, Str::Interpol, :pop!
144
+ mixin :root
145
+ end
146
+
147
+ state :has_interpolation do
148
+ rule /[#][{]/, Str::Interpol, :interpolation
149
+ end
150
+
151
+ state :dqs do
152
+ rule /"/, Str, :pop!
153
+ mixin :double_strings
154
+ end
155
+
156
+ state :tdqs do
157
+ rule /"""/, Str, :pop!
158
+ rule /"/, Str
159
+ mixin :double_strings
160
+ end
161
+
162
+ state :sqs do
163
+ rule /'/, Str, :pop!
164
+ mixin :single_strings
165
+ end
166
+
167
+ state :tsqs do
168
+ rule /'''/, Str, :pop!
169
+ rule /'/, Str
170
+ mixin :single_strings
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,345 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class CommonLisp < RegexLexer
6
+ title "Common Lisp"
7
+ desc "The Common Lisp variant of Lisp (common-lisp.net)"
8
+ tag 'common_lisp'
9
+ aliases 'cl', 'common-lisp'
10
+
11
+ filenames '*.cl', '*.lisp', '*.el' # used for Elisp too
12
+ mimetypes 'text/x-common-lisp'
13
+
14
+ # 638 functions
15
+ BUILTIN_FUNCTIONS = Set.new %w(
16
+ < <= = > >= - / /= * + 1- 1+ abort abs acons acos acosh add-method
17
+ adjoin adjustable-array-p adjust-array allocate-instance
18
+ alpha-char-p alphanumericp append apply apropos apropos-list
19
+ aref arithmetic-error-operands arithmetic-error-operation
20
+ array-dimension array-dimensions array-displacement
21
+ array-element-type array-has-fill-pointer-p array-in-bounds-p
22
+ arrayp array-rank array-row-major-index array-total-size
23
+ ash asin asinh assoc assoc-if assoc-if-not atan atanh atom
24
+ bit bit-and bit-andc1 bit-andc2 bit-eqv bit-ior bit-nand
25
+ bit-nor bit-not bit-orc1 bit-orc2 bit-vector-p bit-xor boole
26
+ both-case-p boundp break broadcast-stream-streams butlast
27
+ byte byte-position byte-size caaaar caaadr caaar caadar
28
+ caaddr caadr caar cadaar cadadr cadar caddar cadddr caddr
29
+ cadr call-next-method car cdaaar cdaadr cdaar cdadar cdaddr
30
+ cdadr cdar cddaar cddadr cddar cdddar cddddr cdddr cddr cdr
31
+ ceiling cell-error-name cerror change-class char char< char<=
32
+ char= char> char>= char/= character characterp char-code
33
+ char-downcase char-equal char-greaterp char-int char-lessp
34
+ char-name char-not-equal char-not-greaterp char-not-lessp
35
+ char-upcase cis class-name class-of clear-input clear-output
36
+ close clrhash code-char coerce compile compiled-function-p
37
+ compile-file compile-file-pathname compiler-macro-function
38
+ complement complex complexp compute-applicable-methods
39
+ compute-restarts concatenate concatenated-stream-streams conjugate
40
+ cons consp constantly constantp continue copy-alist copy-list
41
+ copy-pprint-dispatch copy-readtable copy-seq copy-structure
42
+ copy-symbol copy-tree cos cosh count count-if count-if-not
43
+ decode-float decode-universal-time delete delete-duplicates
44
+ delete-file delete-if delete-if-not delete-package denominator
45
+ deposit-field describe describe-object digit-char digit-char-p
46
+ directory directory-namestring disassemble documentation dpb
47
+ dribble echo-stream-input-stream echo-stream-output-stream
48
+ ed eighth elt encode-universal-time endp enough-namestring
49
+ ensure-directories-exist ensure-generic-function eq
50
+ eql equal equalp error eval evenp every exp export expt
51
+ fboundp fceiling fdefinition ffloor fifth file-author
52
+ file-error-pathname file-length file-namestring file-position
53
+ file-string-length file-write-date fill fill-pointer find
54
+ find-all-symbols find-class find-if find-if-not find-method
55
+ find-package find-restart find-symbol finish-output first
56
+ float float-digits floatp float-precision float-radix
57
+ float-sign floor fmakunbound force-output format fourth
58
+ fresh-line fround ftruncate funcall function-keywords
59
+ function-lambda-expression functionp gcd gensym gentemp get
60
+ get-decoded-time get-dispatch-macro-character getf gethash
61
+ get-internal-real-time get-internal-run-time get-macro-character
62
+ get-output-stream-string get-properties get-setf-expansion
63
+ get-universal-time graphic-char-p hash-table-count hash-table-p
64
+ hash-table-rehash-size hash-table-rehash-threshold
65
+ hash-table-size hash-table-test host-namestring identity
66
+ imagpart import initialize-instance input-stream-p inspect
67
+ integer-decode-float integer-length integerp interactive-stream-p
68
+ intern intersection invalid-method-error invoke-debugger
69
+ invoke-restart invoke-restart-interactively isqrt keywordp
70
+ last lcm ldb ldb-test ldiff length lisp-implementation-type
71
+ lisp-implementation-version list list* list-all-packages listen
72
+ list-length listp load load-logical-pathname-translations
73
+ log logand logandc1 logandc2 logbitp logcount logeqv
74
+ logical-pathname logical-pathname-translations logior
75
+ lognand lognor lognot logorc1 logorc2 logtest logxor
76
+ long-site-name lower-case-p machine-instance machine-type
77
+ machine-version macroexpand macroexpand-1 macro-function
78
+ make-array make-broadcast-stream make-concatenated-stream
79
+ make-condition make-dispatch-macro-character make-echo-stream
80
+ make-hash-table make-instance make-instances-obsolete make-list
81
+ make-load-form make-load-form-saving-slots make-package
82
+ make-pathname make-random-state make-sequence make-string
83
+ make-string-input-stream make-string-output-stream make-symbol
84
+ make-synonym-stream make-two-way-stream makunbound map mapc
85
+ mapcan mapcar mapcon maphash map-into mapl maplist mask-field
86
+ max member member-if member-if-not merge merge-pathnames
87
+ method-combination-error method-qualifiers min minusp mismatch mod
88
+ muffle-warning name-char namestring nbutlast nconc next-method-p
89
+ nintersection ninth no-applicable-method no-next-method not notany
90
+ notevery nreconc nreverse nset-difference nset-exclusive-or
91
+ nstring-capitalize nstring-downcase nstring-upcase nsublis
92
+ nsubst nsubst-if nsubst-if-not nsubstitute nsubstitute-if
93
+ nsubstitute-if-not nth nthcdr null numberp numerator nunion
94
+ oddp open open-stream-p output-stream-p package-error-package
95
+ package-name package-nicknames packagep package-shadowing-symbols
96
+ package-used-by-list package-use-list pairlis parse-integer
97
+ parse-namestring pathname pathname-device pathname-directory
98
+ pathname-host pathname-match-p pathname-name pathnamep
99
+ pathname-type pathname-version peek-char phase plusp
100
+ position position-if position-if-not pprint pprint-dispatch
101
+ pprint-fill pprint-indent pprint-linear pprint-newline pprint-tab
102
+ pprint-tabular prin1 prin1-to-string princ princ-to-string print
103
+ print-object probe-file proclaim provide random random-state-p
104
+ rassoc rassoc-if rassoc-if-not rational rationalize rationalp
105
+ read read-byte read-char read-char-no-hang read-delimited-list
106
+ read-from-string read-line read-preserving-whitespace
107
+ read-sequence readtable-case readtablep realp realpart
108
+ reduce reinitialize-instance rem remhash remove
109
+ remove-duplicates remove-if remove-if-not remove-method
110
+ remprop rename-file rename-package replace require rest
111
+ restart-name revappend reverse room round row-major-aref
112
+ rplaca rplacd sbit scale-float schar search second set
113
+ set-difference set-dispatch-macro-character set-exclusive-or
114
+ set-macro-character set-pprint-dispatch set-syntax-from-char
115
+ seventh shadow shadowing-import shared-initialize
116
+ short-site-name signal signum simple-bit-vector-p
117
+ simple-condition-format-arguments simple-condition-format-control
118
+ simple-string-p simple-vector-p sin sinh sixth sleep slot-boundp
119
+ slot-exists-p slot-makunbound slot-missing slot-unbound slot-value
120
+ software-type software-version some sort special-operator-p
121
+ sqrt stable-sort standard-char-p store-value stream-element-type
122
+ stream-error-stream stream-external-format streamp string string<
123
+ string<= string= string> string>= string/= string-capitalize
124
+ string-downcase string-equal string-greaterp string-left-trim
125
+ string-lessp string-not-equal string-not-greaterp string-not-lessp
126
+ stringp string-right-trim string-trim string-upcase sublis subseq
127
+ subsetp subst subst-if subst-if-not substitute substitute-if
128
+ substitute-if-not subtypepsvref sxhash symbol-function
129
+ symbol-name symbolp symbol-package symbol-plist symbol-value
130
+ synonym-stream-symbol syntax: tailp tan tanh tenth terpri third
131
+ translate-logical-pathname translate-pathname tree-equal truename
132
+ truncate two-way-stream-input-stream two-way-stream-output-stream
133
+ type-error-datum type-error-expected-type type-of
134
+ typep unbound-slot-instance unexport unintern union
135
+ unread-char unuse-package update-instance-for-different-class
136
+ update-instance-for-redefined-class upgraded-array-element-type
137
+ upgraded-complex-part-type upper-case-p use-package
138
+ user-homedir-pathname use-value values values-list vector vectorp
139
+ vector-pop vector-push vector-push-extend warn wild-pathname-p
140
+ write write-byte write-char write-line write-sequence write-string
141
+ write-to-string yes-or-no-p y-or-n-p zerop
142
+ ).freeze
143
+
144
+ SPECIAL_FORMS = Set.new %w(
145
+ block catch declare eval-when flet function go if labels lambda
146
+ let let* load-time-value locally macrolet multiple-value-call
147
+ multiple-value-prog1 progn progv quote return-from setq
148
+ symbol-macrolet tagbody the throw unwind-protect
149
+ )
150
+
151
+ MACROS = Set.new %w(
152
+ and assert call-method case ccase check-type cond ctypecase decf
153
+ declaim defclass defconstant defgeneric define-compiler-macro
154
+ define-condition define-method-combination define-modify-macro
155
+ define-setf-expander define-symbol-macro defmacro defmethod
156
+ defpackage defparameter defsetf defstruct deftype defun defvar
157
+ destructuring-bind do do* do-all-symbols do-external-symbols
158
+ dolist do-symbols dotimes ecase etypecase formatter
159
+ handler-bind handler-case ignore-errors incf in-package
160
+ lambda loop loop-finish make-method multiple-value-bind
161
+ multiple-value-list multiple-value-setq nth-value or pop
162
+ pprint-exit-if-list-exhausted pprint-logical-block pprint-pop
163
+ print-unreadable-object prog prog* prog1 prog2 psetf psetq
164
+ push pushnew remf restart-bind restart-case return rotatef
165
+ setf shiftf step time trace typecase unless untrace when
166
+ with-accessors with-compilation-unit with-condition-restarts
167
+ with-hash-table-iterator with-input-from-string with-open-file
168
+ with-open-stream with-output-to-string with-package-iterator
169
+ with-simple-restart with-slots with-standard-io-syntax
170
+ )
171
+
172
+ LAMBDA_LIST_KEYWORDS = Set.new %w(
173
+ &allow-other-keys &aux &body &environment &key &optional &rest
174
+ &whole
175
+ )
176
+
177
+ DECLARATIONS = Set.new %w(
178
+ dynamic-extent ignore optimize ftype inline special ignorable
179
+ notinline type
180
+ )
181
+
182
+ BUILTIN_TYPES = Set.new %w(
183
+ atom boolean base-char base-string bignum bit compiled-function
184
+ extended-char fixnum keyword nil signed-byte short-float
185
+ single-float double-float long-float simple-array
186
+ simple-base-string simple-bit-vector simple-string simple-vector
187
+ standard-char unsigned-byte
188
+
189
+ arithmetic-error cell-error condition control-error
190
+ division-by-zero end-of-file error file-error
191
+ floating-point-inexact floating-point-overflow
192
+ floating-point-underflow floating-point-invalid-operation
193
+ parse-error package-error print-not-readable program-error
194
+ reader-error serious-condition simple-condition simple-error
195
+ simple-type-error simple-warning stream-error storage-condition
196
+ style-warning type-error unbound-variable unbound-slot
197
+ undefined-function warning
198
+ )
199
+
200
+ BUILTIN_CLASSES = Set.new %w(
201
+ array broadcast-stream bit-vector built-in-class character
202
+ class complex concatenated-stream cons echo-stream file-stream
203
+ float function generic-function hash-table integer list
204
+ logical-pathname method-combination method null number package
205
+ pathname ratio rational readtable real random-state restart
206
+ sequence standard-class standard-generic-function standard-method
207
+ standard-object string-stream stream string structure-class
208
+ structure-object symbol synonym-stream t two-way-stream vector
209
+ )
210
+
211
+ nonmacro = /\\.|[a-zA-Z0-9!$%&*+-\/<=>?@\[\]^_{}~]/
212
+ constituent = /#{nonmacro}|[#.:]/
213
+ terminated = /(?=[ "'()\n,;`])/ # whitespace or terminating macro chars
214
+ symbol = /(\|[^\|]+\||#{nonmacro}#{constituent}*)/
215
+
216
+ state :root do
217
+ rule /\s+/m, Text
218
+ rule /;.*$/, Comment::Single
219
+ rule /#\|/, Comment::Multiline, :multiline_comment
220
+
221
+ # encoding comment
222
+ rule /#\d*Y.*$/, Comment::Special
223
+ rule /"(\\.|[^"\\])*"/, Str
224
+
225
+ rule /[:']#{symbol}/, Str::Symbol
226
+ rule /['`]/, Operator
227
+
228
+ # numbers
229
+ rule /[-+]?\d+\.?#{terminated}/, Num::Integer
230
+ rule %r([-+]?\d+/\d+#{terminated}), Num::Integer
231
+ rule %r(
232
+ [-+]?
233
+ (\d*\.\d+([defls][-+]?\d+)?
234
+ |\d+(\.\d*)?[defls][-+]?\d+)
235
+ #{terminated}
236
+ )x, Num::Float
237
+
238
+ # sharpsign strings and characters
239
+ rule /#\\.#{terminated}/, Str::Char
240
+ rule /#\\#{symbol}/, Str::Char
241
+
242
+ rule /#\(/, Operator, :root
243
+
244
+ # bitstring
245
+ rule /#\d*\*[01]*/, Other
246
+
247
+ # uninterned symbol
248
+ rule /#:#{symbol}/, Str::Symbol
249
+
250
+ # read-time and load-time evaluation
251
+ rule /#[.,]/, Operator
252
+
253
+ # function shorthand
254
+ rule /#'/, Name::Function
255
+
256
+ # binary rational
257
+ rule /#b[+-]?[01]+(\/[01]+)?/i, Num
258
+
259
+ # octal rational
260
+ rule /#o[+-]?[0-7]+(\/[0-7]+)?/i, Num::Oct
261
+
262
+ # hex rational
263
+ rule /#x[+-]?[0-9a-f]+(\/[0-9a-f]+)?/i, Num
264
+
265
+ # complex
266
+ rule /(#c)(\()/i do
267
+ groups Num, Punctuation
268
+ push :root
269
+ end
270
+
271
+ # arrays and structures
272
+ rule /(#(?:\d+a|s))(\()/i do
273
+ groups Literal::Other, Punctuation
274
+ push :root
275
+ end
276
+
277
+ # path
278
+ rule /#p?"(\\.|[^"])*"/i, Str::Symbol
279
+
280
+ # reference
281
+ rule /#\d+[=#]/, Operator
282
+
283
+ # read-time comment
284
+ rule /#+nil#{terminated}\s*\(/, Comment, :commented_form
285
+
286
+ # read-time conditional
287
+ rule /#[+-]/, Operator
288
+
289
+ # special operators that should have been parsed already
290
+ rule /(,@|,|\.)/, Operator
291
+
292
+ # special constants
293
+ rule /(t|nil)#{terminated}/, Name::Constant
294
+
295
+ # functions and variables
296
+ # note that these get filtered through in stream_tokens
297
+ rule /\*#{symbol}\*/, Name::Variable::Global
298
+ rule symbol do |m|
299
+ sym = m[0]
300
+
301
+ if BUILTIN_FUNCTIONS.include? sym
302
+ token Name::Builtin
303
+ elsif SPECIAL_FORMS.include? sym
304
+ token Keyword
305
+ elsif MACROS.include? sym
306
+ token Name::Builtin
307
+ elsif LAMBDA_LIST_KEYWORDS.include? sym
308
+ token Keyword
309
+ elsif DECLARATIONS.include? sym
310
+ token Keyword
311
+ elsif BUILTIN_TYPES.include? sym
312
+ token Keyword::Type
313
+ elsif BUILTIN_CLASSES.include? sym
314
+ token Name::Class
315
+ else
316
+ token Name::Variable
317
+ end
318
+ end
319
+
320
+ rule /\(/, Punctuation, :root
321
+ rule /\)/, Punctuation do
322
+ if stack.empty?
323
+ token Error
324
+ else
325
+ token Punctuation
326
+ pop!
327
+ end
328
+ end
329
+ end
330
+
331
+ state :multiline_comment do
332
+ rule /#\|/, Comment::Multiline, :multiline_comment
333
+ rule /\|#/, Comment::Multiline, :pop!
334
+ rule /[^\|#]+/, Comment::Multiline
335
+ rule /[\|#]/, Comment::Multiline
336
+ end
337
+
338
+ state :commented_form do
339
+ rule /\(/, Comment, :commented_form
340
+ rule /\)/, Comment, :pop!
341
+ rule /[^()]+/, Comment
342
+ end
343
+ end
344
+ end
345
+ end