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,367 @@
1
+ # -*- coding: utf-8 -*- #
2
+ module Rouge
3
+ module Lexers
4
+ class AppleScript < RegexLexer
5
+ title "AppleScript"
6
+ desc "The AppleScript scripting language by Apple Inc. (http://developer.apple.com/applescript/)"
7
+
8
+ tag 'applescript'
9
+ aliases 'applescript'
10
+
11
+ filenames '*.applescript', '*.scpt'
12
+
13
+ mimetypes 'application/x-applescript'
14
+
15
+ def self.literals
16
+ @literals ||= ['AppleScript', 'current application', 'false', 'linefeed',
17
+ 'missing value', 'pi','quote', 'result', 'return', 'space',
18
+ 'tab', 'text item delimiters', 'true', 'version']
19
+ end
20
+
21
+ def self.classes
22
+ @classes ||= ['alias ', 'application ', 'boolean ', 'class ', 'constant ',
23
+ 'date ', 'file ', 'integer ', 'list ', 'number ', 'POSIX file ',
24
+ 'real ', 'record ', 'reference ', 'RGB color ', 'script ',
25
+ 'text ', 'unit types', '(?:Unicode )?text', 'string']
26
+ end
27
+
28
+ def self.builtins
29
+ @builtins ||= ['attachment', 'attribute run', 'character', 'day', 'month',
30
+ 'paragraph', 'word', 'year']
31
+ end
32
+
33
+ def self.handler_params
34
+ @handler_params ||= ['about', 'above', 'against', 'apart from', 'around',
35
+ 'aside from', 'at', 'below', 'beneath', 'beside',
36
+ 'between', 'for', 'given', 'instead of', 'on', 'onto',
37
+ 'out of', 'over', 'since']
38
+ end
39
+
40
+ def self.commands
41
+ @commands ||= ['ASCII (character|number)', 'activate', 'beep', 'choose URL',
42
+ 'choose application', 'choose color', 'choose file( name)?',
43
+ 'choose folder', 'choose from list',
44
+ 'choose remote application', 'clipboard info',
45
+ 'close( access)?', 'copy', 'count', 'current date', 'delay',
46
+ 'delete', 'display (alert|dialog)', 'do shell script',
47
+ 'duplicate', 'exists', 'get eof', 'get volume settings',
48
+ 'info for', 'launch', 'list (disks|folder)', 'load script',
49
+ 'log', 'make', 'mount volume', 'new', 'offset',
50
+ 'open( (for access|location))?', 'path to', 'print', 'quit',
51
+ 'random number', 'read', 'round', 'run( script)?',
52
+ 'say', 'scripting components',
53
+ 'set (eof|the clipboard to|volume)', 'store script',
54
+ 'summarize', 'system attribute', 'system info',
55
+ 'the clipboard', 'time to GMT', 'write', 'quoted form']
56
+ end
57
+
58
+ def self.references
59
+ @references ||= ['(in )?back of', '(in )?front of', '[0-9]+(st|nd|rd|th)',
60
+ 'first', 'second', 'third', 'fourth', 'fifth', 'sixth',
61
+ 'seventh', 'eighth', 'ninth', 'tenth', 'after', 'back',
62
+ 'before', 'behind', 'every', 'front', 'index', 'last',
63
+ 'middle', 'some', 'that', 'through', 'thru', 'where', 'whose']
64
+ end
65
+
66
+ def self.operators
67
+ @operators ||= ["and", "or", "is equal", "equals", "(is )?equal to", "is not",
68
+ "isn't", "isn't equal( to)?", "is not equal( to)?",
69
+ "doesn't equal", "does not equal", "(is )?greater than",
70
+ "comes after", "is not less than or equal( to)?",
71
+ "isn't less than or equal( to)?", "(is )?less than",
72
+ "comes before", "is not greater than or equal( to)?",
73
+ "isn't greater than or equal( to)?",
74
+ "(is )?greater than or equal( to)?", "is not less than",
75
+ "isn't less than", "does not come before",
76
+ "doesn't come before", "(is )?less than or equal( to)?",
77
+ "is not greater than", "isn't greater than",
78
+ "does not come after", "doesn't come after", "starts? with",
79
+ "begins? with", "ends? with", "contains?", "does not contain",
80
+ "doesn't contain", "is in", "is contained by", "is not in",
81
+ "is not contained by", "isn't contained by", "div", "mod",
82
+ "not", "(a )?(ref( to)?|reference to)", "is", "does"]
83
+ end
84
+
85
+ def self.controls
86
+ @controls ||= ['considering', 'else', 'error', 'exit', 'from', 'if',
87
+ 'ignoring', 'in', 'repeat', 'tell', 'then', 'times', 'to',
88
+ 'try', 'until', 'using terms from', 'while', 'whith',
89
+ 'with timeout( of)?', 'with transaction', 'by', 'continue',
90
+ 'end', 'its?', 'me', 'my', 'return', 'of' , 'as']
91
+ end
92
+
93
+ def self.declarations
94
+ @declarations ||= ['global', 'local', 'prop(erty)?', 'set', 'get']
95
+ end
96
+
97
+ def self.reserved
98
+ @reserved ||= ['but', 'put', 'returning', 'the']
99
+ end
100
+
101
+ def self.studio_classes
102
+ @studio_classes ||= ['action cell', 'alert reply', 'application', 'box',
103
+ 'browser( cell)?', 'bundle', 'button( cell)?', 'cell',
104
+ 'clip view', 'color well', 'color-panel',
105
+ 'combo box( item)?', 'control',
106
+ 'data( (cell|column|item|row|source))?', 'default entry',
107
+ 'dialog reply', 'document', 'drag info', 'drawer',
108
+ 'event', 'font(-panel)?', 'formatter',
109
+ 'image( (cell|view))?', 'matrix', 'menu( item)?', 'item',
110
+ 'movie( view)?', 'open-panel', 'outline view', 'panel',
111
+ 'pasteboard', 'plugin', 'popup button',
112
+ 'progress indicator', 'responder', 'save-panel',
113
+ 'scroll view', 'secure text field( cell)?', 'slider',
114
+ 'sound', 'split view', 'stepper', 'tab view( item)?',
115
+ 'table( (column|header cell|header view|view))',
116
+ 'text( (field( cell)?|view))?', 'toolbar( item)?',
117
+ 'user-defaults', 'view', 'window']
118
+ end
119
+
120
+ def self.studio_events
121
+ @studio_events ||= ['accept outline drop', 'accept table drop', 'action',
122
+ 'activated', 'alert ended', 'awake from nib', 'became key',
123
+ 'became main', 'begin editing', 'bounds changed',
124
+ 'cell value', 'cell value changed', 'change cell value',
125
+ 'change item value', 'changed', 'child of item',
126
+ 'choose menu item', 'clicked', 'clicked toolbar item',
127
+ 'closed', 'column clicked', 'column moved',
128
+ 'column resized', 'conclude drop', 'data representation',
129
+ 'deminiaturized', 'dialog ended', 'document nib name',
130
+ 'double clicked', 'drag( (entered|exited|updated))?',
131
+ 'drop', 'end editing', 'exposed', 'idle', 'item expandable',
132
+ 'item value', 'item value changed', 'items changed',
133
+ 'keyboard down', 'keyboard up', 'launched',
134
+ 'load data representation', 'miniaturized', 'mouse down',
135
+ 'mouse dragged', 'mouse entered', 'mouse exited',
136
+ 'mouse moved', 'mouse up', 'moved',
137
+ 'number of browser rows', 'number of items',
138
+ 'number of rows', 'open untitled', 'opened', 'panel ended',
139
+ 'parameters updated', 'plugin loaded', 'prepare drop',
140
+ 'prepare outline drag', 'prepare outline drop',
141
+ 'prepare table drag', 'prepare table drop',
142
+ 'read from file', 'resigned active', 'resigned key',
143
+ 'resigned main', 'resized( sub views)?',
144
+ 'right mouse down', 'right mouse dragged',
145
+ 'right mouse up', 'rows changed', 'scroll wheel',
146
+ 'selected tab view item', 'selection changed',
147
+ 'selection changing', 'should begin editing',
148
+ 'should close', 'should collapse item',
149
+ 'should end editing', 'should expand item',
150
+ 'should open( untitled)?',
151
+ 'should quit( after last window closed)?',
152
+ 'should select column', 'should select item',
153
+ 'should select row', 'should select tab view item',
154
+ 'should selection change', 'should zoom', 'shown',
155
+ 'update menu item', 'update parameters',
156
+ 'update toolbar item', 'was hidden', 'was miniaturized',
157
+ 'will become active', 'will close', 'will dismiss',
158
+ 'will display browser cell', 'will display cell',
159
+ 'will display item cell', 'will display outline cell',
160
+ 'will finish launching', 'will hide', 'will miniaturize',
161
+ 'will move', 'will open', 'will pop up', 'will quit',
162
+ 'will resign active', 'will resize( sub views)?',
163
+ 'will select tab view item', 'will show', 'will zoom',
164
+ 'write to file', 'zoomed']
165
+ end
166
+
167
+ def self.studio_commands
168
+ @studio_commands ||= ['animate', 'append', 'call method', 'center',
169
+ 'close drawer', 'close panel', 'display',
170
+ 'display alert', 'display dialog', 'display panel', 'go',
171
+ 'hide', 'highlight', 'increment', 'item for',
172
+ 'load image', 'load movie', 'load nib', 'load panel',
173
+ 'load sound', 'localized string', 'lock focus', 'log',
174
+ 'open drawer', 'path for', 'pause', 'perform action',
175
+ 'play', 'register', 'resume', 'scroll', 'select( all)?',
176
+ 'show', 'size to fit', 'start', 'step back',
177
+ 'step forward', 'stop', 'synchronize', 'unlock focus',
178
+ 'update']
179
+ end
180
+
181
+ def self.studio_properties
182
+ @studio_properties ||= ['accepts arrow key', 'action method', 'active',
183
+ 'alignment', 'allowed identifiers',
184
+ 'allows branch selection', 'allows column reordering',
185
+ 'allows column resizing', 'allows column selection',
186
+ 'allows customization', 'allows editing text attributes',
187
+ 'allows empty selection', 'allows mixed state',
188
+ 'allows multiple selection', 'allows reordering',
189
+ 'allows undo', 'alpha( value)?', 'alternate image',
190
+ 'alternate increment value', 'alternate title',
191
+ 'animation delay', 'associated file name',
192
+ 'associated object', 'auto completes', 'auto display',
193
+ 'auto enables items', 'auto repeat', 'auto resizes( outline column)?',
194
+ 'auto save expanded items', 'auto save name',
195
+ 'auto save table columns', 'auto saves configuration',
196
+ 'auto scroll', 'auto sizes all columns to fit',
197
+ 'auto sizes cells', 'background color', 'bezel state',
198
+ 'bezel style', 'bezeled', 'border rect', 'border type',
199
+ 'bordered', 'bounds( rotation)?', 'box type',
200
+ 'button returned', 'button type',
201
+ 'can choose directories', 'can choose files', 'can draw', 'can hide',
202
+ 'cell( (background color|size|type))?', 'characters',
203
+ 'class', 'click count', 'clicked( data)? column',
204
+ 'clicked data item', 'clicked( data)? row',
205
+ 'closeable', 'collating', 'color( (mode|panel))',
206
+ 'command key down', 'configuration',
207
+ 'content(s| (size|view( margins)?))?', 'context',
208
+ 'continuous', 'control key down', 'control size',
209
+ 'control tint', 'control view',
210
+ 'controller visible', 'coordinate system',
211
+ 'copies( on scroll)?', 'corner view', 'current cell',
212
+ 'current column', 'current( field)? editor',
213
+ 'current( menu)? item', 'current row',
214
+ 'current tab view item', 'data source',
215
+ 'default identifiers', 'delta (x|y|z)',
216
+ 'destination window', 'directory', 'display mode',
217
+ 'displayed cell', 'document( (edited|rect|view))?',
218
+ 'double value', 'dragged column', 'dragged distance',
219
+ 'dragged items', 'draws( cell)? background',
220
+ 'draws grid', 'dynamically scrolls', 'echos bullets',
221
+ 'edge', 'editable', 'edited( data)? column',
222
+ 'edited data item', 'edited( data)? row', 'enabled',
223
+ 'enclosing scroll view', 'ending page',
224
+ 'error handling', 'event number', 'event type',
225
+ 'excluded from windows menu', 'executable path',
226
+ 'expanded', 'fax number', 'field editor', 'file kind',
227
+ 'file name', 'file type', 'first responder',
228
+ 'first visible column', 'flipped', 'floating',
229
+ 'font( panel)?', 'formatter', 'frameworks path',
230
+ 'frontmost', 'gave up', 'grid color', 'has data items',
231
+ 'has horizontal ruler', 'has horizontal scroller',
232
+ 'has parent data item', 'has resize indicator',
233
+ 'has shadow', 'has sub menu', 'has vertical ruler',
234
+ 'has vertical scroller', 'header cell', 'header view',
235
+ 'hidden', 'hides when deactivated', 'highlights by',
236
+ 'horizontal line scroll', 'horizontal page scroll',
237
+ 'horizontal ruler view', 'horizontally resizable',
238
+ 'icon image', 'id', 'identifier',
239
+ 'ignores multiple clicks',
240
+ 'image( (alignment|dims when disabled|frame style|scaling))?',
241
+ 'imports graphics', 'increment value',
242
+ 'indentation per level', 'indeterminate', 'index',
243
+ 'integer value', 'intercell spacing', 'item height',
244
+ 'key( (code|equivalent( modifier)?|window))?',
245
+ 'knob thickness', 'label', 'last( visible)? column',
246
+ 'leading offset', 'leaf', 'level', 'line scroll',
247
+ 'loaded', 'localized sort', 'location', 'loop mode',
248
+ 'main( (bunde|menu|window))?', 'marker follows cell',
249
+ 'matrix mode', 'maximum( content)? size',
250
+ 'maximum visible columns',
251
+ 'menu( form representation)?', 'miniaturizable',
252
+ 'miniaturized', 'minimized image', 'minimized title',
253
+ 'minimum column width', 'minimum( content)? size',
254
+ 'modal', 'modified', 'mouse down state',
255
+ 'movie( (controller|file|rect))?', 'muted', 'name',
256
+ 'needs display', 'next state', 'next text',
257
+ 'number of tick marks', 'only tick mark values',
258
+ 'opaque', 'open panel', 'option key down',
259
+ 'outline table column', 'page scroll', 'pages across',
260
+ 'pages down', 'palette label', 'pane splitter',
261
+ 'parent data item', 'parent window', 'pasteboard',
262
+ 'path( (names|separator))?', 'playing',
263
+ 'plays every frame', 'plays selection only', 'position',
264
+ 'preferred edge', 'preferred type', 'pressure',
265
+ 'previous text', 'prompt', 'properties',
266
+ 'prototype cell', 'pulls down', 'rate',
267
+ 'released when closed', 'repeated',
268
+ 'requested print time', 'required file type',
269
+ 'resizable', 'resized column', 'resource path',
270
+ 'returns records', 'reuses columns', 'rich text',
271
+ 'roll over', 'row height', 'rulers visible',
272
+ 'save panel', 'scripts path', 'scrollable',
273
+ 'selectable( identifiers)?', 'selected cell',
274
+ 'selected( data)? columns?', 'selected data items?',
275
+ 'selected( data)? rows?', 'selected item identifier',
276
+ 'selection by rect', 'send action on arrow key',
277
+ 'sends action when done editing', 'separates columns',
278
+ 'separator item', 'sequence number', 'services menu',
279
+ 'shared frameworks path', 'shared support path',
280
+ 'sheet', 'shift key down', 'shows alpha',
281
+ 'shows state by', 'size( mode)?',
282
+ 'smart insert delete enabled', 'sort case sensitivity',
283
+ 'sort column', 'sort order', 'sort type',
284
+ 'sorted( data rows)?', 'sound', 'source( mask)?',
285
+ 'spell checking enabled', 'starting page', 'state',
286
+ 'string value', 'sub menu', 'super menu', 'super view',
287
+ 'tab key traverses cells', 'tab state', 'tab type',
288
+ 'tab view', 'table view', 'tag', 'target( printer)?',
289
+ 'text color', 'text container insert',
290
+ 'text container origin', 'text returned',
291
+ 'tick mark position', 'time stamp',
292
+ 'title(d| (cell|font|height|position|rect))?',
293
+ 'tool tip', 'toolbar', 'trailing offset', 'transparent',
294
+ 'treat packages as directories', 'truncated labels',
295
+ 'types', 'unmodified characters', 'update views',
296
+ 'use sort indicator', 'user defaults',
297
+ 'uses data source', 'uses ruler', 'uses threaded animation',
298
+ 'uses title from previous column', 'value wraps', 'version',
299
+ 'vertical( (line scroll|page scroll|ruler view))?', 'vertically resizable', 'view',
300
+ 'visible( document rect)?', 'volume', 'width', 'window',
301
+ 'windows menu', 'wraps', 'zoomable', 'zoomed']
302
+ end
303
+
304
+ operators = %r(\b(#{self.operators.to_a.join('|')})\b)
305
+ classes = %r(\b(as )(#{self.classes.to_a.join('|')})\b)
306
+ literals = %r(\b(#{self.literals.to_a.join('|')})\b)
307
+ commands = %r(\b(#{self.commands.to_a.join('|')})\b)
308
+ controls = %r(\b(#{self.controls.to_a.join('|')})\b)
309
+ declarations = %r(\b(#{self.declarations.to_a.join('|')})\b)
310
+ reserved = %r(\b(#{self.reserved.to_a.join('|')})\b)
311
+ builtins = %r(\b(#{self.builtins.to_a.join('|')})s?\b)
312
+ handler_params = %r(\b(#{self.handler_params.to_a.join('|')})\b)
313
+ references = %r(\b(#{self.references.to_a.join('|')})\b)
314
+ studio_properties = %r(\b(#{self.studio_properties.to_a.join('|')})\b)
315
+ studio_classes = %r(\b(#{self.studio_classes.to_a.join('|')})s?\b)
316
+ studio_commands = %r(\b(#{self.studio_commands.to_a.join('|')})\b)
317
+ identifiers = %r(\b([a-zA-Z]\w*)\b)
318
+
319
+ state :root do
320
+ rule /\s+/, Text::Whitespace
321
+ rule /¬\n/, Literal::String::Escape
322
+ rule /'s\s+/, Text
323
+ rule /(--|#).*?$/, Comment::Single
324
+ rule /\(\*/, Comment::Multiline
325
+ rule /[\(\){}!,.:]/, Punctuation
326
+ rule /(«)([^»]+)(»)/ do |match|
327
+ token Text, match[1]
328
+ token Name::Builtin, match[2]
329
+ token Text, match[3]
330
+ end
331
+ rule /\b((?:considering|ignoring)\s*)(application responses|case|diacriticals|hyphens|numeric strings|punctuation|white space)/ do |match|
332
+ token Keyword, match[1]
333
+ token Name::Builtin, match[2]
334
+ end
335
+ rule /(-|\*|\+|&|≠|>=?|<=?|=|≥|≤|\/|÷|\^)/, Operator
336
+ rule operators, Operator::Word
337
+ rule /^(\s*(?:on|end)\s+)'r'(%s)/ do |match|
338
+ token Keyword, match[1]
339
+ token Name::Function, match[2]
340
+ end
341
+ rule /^(\s*)(in|on|script|to)(\s+)/ do |match|
342
+ token Text, match[1]
343
+ token Keyword, match[2]
344
+ token Text, match[3]
345
+ end
346
+ rule classes do |match|
347
+ token Keyword, match[1]
348
+ token Name::Class, match[2]
349
+ end
350
+ rule commands, Name::Builtin
351
+ rule controls, Keyword
352
+ rule declarations, Keyword
353
+ rule reserved, Name::Builtin
354
+ rule builtins, Name::Builtin
355
+ rule handler_params, Name::Builtin
356
+ rule studio_properties, Name::Attribute
357
+ rule studio_classes, Name::Builtin
358
+ rule studio_commands, Name::Builtin
359
+ rule references, Name::Builtin
360
+ rule /"(\\\\|\\"|[^"])*"/, Literal::String::Double
361
+ rule identifiers, Name::Variable
362
+ rule /[-+]?(\d+\.\d*|\d*\.\d+)(E[-+][0-9]+)?/, Literal::Number::Float
363
+ rule /[-+]?\d+/, Literal::Number::Integer
364
+ end
365
+ end
366
+ end
367
+ end
@@ -0,0 +1,212 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class C < RegexLexer
6
+ tag 'c'
7
+ filenames '*.c', '*.h', '*.idc'
8
+ mimetypes 'text/x-chdr', 'text/x-csrc'
9
+
10
+ title "C"
11
+ desc "The C programming language"
12
+
13
+ # optional comment or whitespace
14
+ ws = %r((?:\s|//.*?\n|/[*].*?[*]/)+)
15
+ id = /[a-zA-Z_][a-zA-Z0-9_]*/
16
+
17
+ def self.keywords
18
+ @keywords ||= Set.new %w(
19
+ auto break case const continue default do else enum extern
20
+ for goto if register restricted return sizeof static struct
21
+ switch typedef union volatile virtual while
22
+ )
23
+ end
24
+
25
+ def self.keywords_type
26
+ @keywords_type ||= Set.new %w(
27
+ int long float short double char unsigned signed void
28
+
29
+ jmp_buf FILE DIR div_t ldiv_t mbstate_t sig_atomic_t fpos_t
30
+ clock_t time_t va_list size_t ssize_t off_t wchar_t ptrdiff_t
31
+ wctrans_t wint_t wctype_t
32
+
33
+ _Bool _Complex int8_t int16_t int32_t int64_t
34
+ uint8_t uint16_t uint32_t uint64_t int_least8_t
35
+ int_least16_t int_least32_t int_least64_t
36
+ uint_least8_t uint_least16_t uint_least32_t
37
+ uint_least64_t int_fast8_t int_fast16_t int_fast32_t
38
+ int_fast64_t uint_fast8_t uint_fast16_t uint_fast32_t
39
+ uint_fast64_t intptr_t uintptr_t intmax_t
40
+ uintmax_t
41
+ )
42
+ end
43
+
44
+ def self.reserved
45
+ @reserved ||= Set.new %w(
46
+ __asm __int8 __based __except __int16 __stdcall __cdecl
47
+ __fastcall __int32 __declspec __finally __int61 __try __leave
48
+ inline _inline __inline naked _naked __naked restrict _restrict
49
+ __restrict thread _thread __thread typename _typename __typename
50
+ )
51
+ end
52
+
53
+ # high priority for filename matches
54
+ def self.analyze_text(*)
55
+ 0.3
56
+ end
57
+
58
+ def self.builtins
59
+ @builtins ||= []
60
+ end
61
+
62
+ start { push :bol }
63
+
64
+ state :expr_bol do
65
+ mixin :inline_whitespace
66
+
67
+ rule /#if\s0/, Comment, :if_0
68
+ rule /#/, Comment::Preproc, :macro
69
+
70
+ rule(//) { pop! }
71
+ end
72
+
73
+ # :expr_bol is the same as :bol but without labels, since
74
+ # labels can only appear at the beginning of a statement.
75
+ state :bol do
76
+ rule /#{id}:(?!:)/, Name::Label
77
+ mixin :expr_bol
78
+ end
79
+
80
+ state :inline_whitespace do
81
+ rule /[ \t\r]+/, Text
82
+ rule /\\\n/, Text # line continuation
83
+ rule %r(/(\\\n)?[*].*?[*](\\\n)?/)m, Comment::Multiline
84
+ end
85
+
86
+ state :whitespace do
87
+ rule /\n+/m, Text, :bol
88
+ rule %r(//(\\.|.)*?\n), Comment::Single, :bol
89
+ mixin :inline_whitespace
90
+ end
91
+
92
+ state :expr_whitespace do
93
+ rule /\n+/m, Text, :expr_bol
94
+ mixin :whitespace
95
+ end
96
+
97
+ state :statements do
98
+ mixin :whitespace
99
+ rule /L?"/, Str, :string
100
+ rule %r(L?'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\'\n])')i, Str::Char
101
+ rule %r((\d+[.]\d*|[.]?\d+)e[+-]?\d+[lu]*)i, Num::Float
102
+ rule %r(\d+e[+-]?\d+[lu]*)i, Num::Float
103
+ rule /0x[0-9a-f]+[lu]*/i, Num::Hex
104
+ rule /0[0-7]+[lu]*/i, Num::Oct
105
+ rule /\d+[lu]*/i, Num::Integer
106
+ rule %r(\*/), Error
107
+ rule %r([~!%^&*+=\|?:<>/-]), Operator
108
+ rule /[()\[\],.]/, Punctuation
109
+ rule /\bcase\b/, Keyword, :case
110
+ rule /(?:true|false|NULL)\b/, Name::Builtin
111
+ rule id do |m|
112
+ name = m[0]
113
+
114
+ if self.class.keywords.include? name
115
+ token Keyword
116
+ elsif self.class.keywords_type.include? name
117
+ token Keyword::Type
118
+ elsif self.class.reserved.include? name
119
+ token Keyword::Reserved
120
+ elsif self.class.builtins.include? name
121
+ token Name::Builtin
122
+ else
123
+ token Name
124
+ end
125
+ end
126
+ end
127
+
128
+ state :case do
129
+ rule /:/, Punctuation, :pop!
130
+ mixin :statements
131
+ end
132
+
133
+ state :root do
134
+ mixin :expr_whitespace
135
+
136
+ # functions
137
+ rule %r(
138
+ ([\w*\s]+?[\s*]) # return arguments
139
+ (#{id}) # function name
140
+ (\s*\([^;]*?\)) # signature
141
+ (#{ws})({) # open brace
142
+ )mx do |m|
143
+ # TODO: do this better.
144
+ recurse m[1]
145
+ token Name::Function, m[2]
146
+ recurse m[3]
147
+ recurse m[4]
148
+ token Punctuation, m[5]
149
+ push :function
150
+ end
151
+
152
+ # function declarations
153
+ rule %r(
154
+ ([\w*\s]+?[\s*]) # return arguments
155
+ (#{id}) # function name
156
+ (\s*\([^;]*?\)) # signature
157
+ (#{ws})(;) # semicolon
158
+ )mx do |m|
159
+ # TODO: do this better.
160
+ recurse m[1]
161
+ token Name::Function, m[2]
162
+ recurse m[3]
163
+ recurse m[4]
164
+ token Punctuation, m[5]
165
+ push :statement
166
+ end
167
+
168
+ rule(//) { push :statement }
169
+ end
170
+
171
+ state :statement do
172
+ rule /;/, Punctuation, :pop!
173
+ mixin :expr_whitespace
174
+ mixin :statements
175
+ rule /[{}]/, Punctuation
176
+ end
177
+
178
+ state :function do
179
+ mixin :whitespace
180
+ mixin :statements
181
+ rule /;/, Punctuation
182
+ rule /{/, Punctuation, :function
183
+ rule /}/, Punctuation, :pop!
184
+ end
185
+
186
+ state :string do
187
+ rule /"/, Str, :pop!
188
+ rule /\\([\\abfnrtv"']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})/, Str::Escape
189
+ rule /[^\\"\n]+/, Str
190
+ rule /\\\n/, Str
191
+ rule /\\/, Str # stray backslash
192
+ end
193
+
194
+ state :macro do
195
+ # NB: pop! goes back to :bol
196
+ rule /\n/, Comment::Preproc, :pop!
197
+ rule %r([^/\n\\]+), Comment::Preproc
198
+ rule /\\./m, Comment::Preproc
199
+ mixin :inline_whitespace
200
+ rule %r(/), Comment::Preproc
201
+ end
202
+
203
+ state :if_0 do
204
+ # NB: no \b here, to cover #ifdef and #ifndef
205
+ rule /^\s*#if/, Comment, :if_0
206
+ rule /^\s*#\s*el(?:se|if)/, Comment, :pop!
207
+ rule /^\s*#\s*endif\b.*?(?<!\\)\n/m, Comment, :pop!
208
+ rule /.*?\n/, Comment
209
+ end
210
+ end
211
+ end
212
+ end