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.
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