1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
|
h1=. CodeRay Version History
p=. _This files lists all changes in the CodeRay library since the 0.9.8 release._
{{toc}}
h2. Changes in 1.0.5
Fixes:
* @autoload@ calls do not depend on @coderay/lib@ being in the load path (GitHub issue #6; thanks to tvon, banister, envygeeks, and ConradIrwin)
* avoid dark blue as terminal color (GitHub issue #9; thanks to shevegen)
h2. Changes in 1.0.4
Fixes in the CSS scanner:
* understands the unit "s" (seconds)
* ignores unexpected curly braces
* code inside of diffs is highlighted correctly
h2. Changes in 1.0.3
New:
* .tmproj files are recognized as XML.
Fixes:
* Removed files are highlighted inside diffs generated by git.
h2. Changes in 1.0.2
Fixes:
* .erb files are recognized as ERB.
h2. Changes in 1.0.1
New:
* YAML scanner allows "-" and "/" in key names
Changes:
* HTML page output has no white border anymore (alpha style)
Fixes:
* fixed warning in the output of "coderay stylesheet"
* fixed additional scrollbar in code when last line contains an eyecatcher
* minor fixes in the tests (issue github-#4)
h2. Changes in 1.0
CodeRay 1.0 is a major rewrite of the library, and incompatible to earlier versions.
The command line and programmer interfaces are similar to 0.9, but the internals have completely changed.
h3. General changes
* *NEW*: The new Diff scanner colorizes code inside of the diff, and highlights inline changes.
* *NEW*: Extended support and usage of HTML5 and CSS 3 features.
* *NEW*: Direct Streaming
* *NEW* scanners: Clojure and HAML
* *CHANGED*: Token classes (used as CSS classes) are readable names; breaks you stylesheet!
* *IMPROVED* documentation
* *IMPROVED* speed: faster startup (using @autoload@), scanning, and encoding
* *IMPROVED* Ruby 1.9 encodings support
* *IMPROVED* Tests: There are more of them now!
h3. Direct Streaming
CodeRay 1.0 introduces _Direct Streaming_ as a faster and simpler alternative to Tokens. It means that all Scanners,
Encoders and Filters had to be rewritten, and that older scanners using the Tokens API are no longer compatible with
this version.
The main benefits of this change are:
* more speed (benchmarks show 10% to 50% more tokens per second compared to CodeRay 0.9)
* the ability to stream output into a pipe on the command line
* a simpler API
* less code
Changes related to the new tokens handling include:
* *CHANGED*: The Scanners now call Encoders directly; tokens are not added to a Tokens array, but are send to the
Encoder as a method call. The Tokens representation (which can be seen as a cache now) is still present, but as a
special case; Tokens just encodes the given tokens into an Array for later use.
* *CHANGED*: The token actions (@text_token@, @begin_group@ etc.) are now public methods of @Encoder@ and @Tokens@.
* *REWRITE* of all Scanners, Encoders, Filters, and Tokens.
* *RENAMED* @:open@ and @:close@ actions to @:begin_group@ and @:end_group@.
* *RENAMED* @open_token@ and @close_token@ methods to @begin_group@ and @end_group@.
* *NEW* method @#tokens@ allows to add several tokens to the stream. @Tokens@ and @Encoders::Encoder@ define this
method.
* *CHANGED* The above name changes also affect the JSON, XML, and YAML encoders. CodeRay 1.0 output will be incompatible
with earlier versions.
* *REMOVED* @TokenStream@ and the @Streamable@ API and all related features like @NotStreamableError@ are now obsolete
and have been removed.
h3. Command Line
The @coderay@ executable was rewritten and has a few new features:
* *NEW* Ability to stream into a pipe; try @coderay file | more -r@
* *NEW* help
* *IMPROVED*: more consistent parameter handling
* *REMOVED* @coderay_stylesheet@ executable; use @coderay stylesheet [name]@.
h3. @Tokens@
* *NEW* methods @count@, @begin_group@, @end_group@, @begin_line@, and @end_line@.
* *REMOVED* methods @#stream?@, @#each_text_token@.
* *REMOVED* methods @#optimize@, @#fix@, @#split_into_lines@ along with their bang! variants.
* *REMOVED* @#text@ and @#text_size@ methods. Use the @Text@ encoder instead.
* *REMOVED* special implementation of @#each@ taking a filter parameter. Use @TokenKindFilter@ instead.
h3. *RENAMED*: @TokenKinds@
Renamed from @Tokens::ClassOfKind@ (was also @Tokens::AbbreviationForKind@ for a while).
The term "token class" is no longer used in CodeRay. Instead, tokens have _kinds_.
See "#122":http://odd-eyed-code.org/issues/122.
* *CHANGED* all token CSS classes to readable names.
* *ADDED* token kinds @:filename@, @:namespace@, and @:eyecatcher@.
* *RENAMED* @:pre_constant@ and @:pre_type@ to @:predefined_constant@ and @predefined_type@.
* *RENAMED* @:oct@ and @:bin@ to @:octal@ and @binary@.
* *REMOVED* token kinds @:attribute_name_fat@, @:attribute_value_fat@, @:operator_fat@, @interpreted@,
@:tag_fat@, @tag_special@, @:xml_text@, @:nesting_delimiter@, @:open@, and @:close@.
* *CHANGED*: Don't raise error for unknown token kinds unless in @$CODERAY_DEBUG@ mode.
* *CHANGED* the value for a token kind that is not highlighted from
@:NO_HIGHLIGHT@ to @false@.
h3. @Duo@
* *NEW* method @call@ for allowing code like @CodeRay::Duo[:python => :yaml].(code)@ in Ruby 1.9.
h3. @Encoders::CommentFilter@
* *NEW* alias @:remove_comments@
h3. @Encoders::Filter@
* *NEW* option @tokens@.
* *CHANGED*: Now it simply delegates to the output.
* *REMOVED* @include_text_token?@ and @include_block_token?@ methods.
h3. @Encoders::HTML@
The HTML encoder was cleaned up and simplified.
* *NEW*: HTML5 and CSS 3 compatible.
See "#215":http://odd-eyed-code.org/issues/215.
* *ADDED* support for @:line_number_anchors@.
See "#208":http://odd-eyed-code.org/issues/208.
* *CHANGED* the default style to @:alpha@.
* *CHANGED*: Use double click to toggle line numbers in table mode (as single
click jumps to an anchor.)
* *REMOVED* support for @:line_numbers => :list@.
* *FIXED* splitting of lines for @:line_numbers => :inline@, so that the line
numbers don't get colored, too.
* *RENAMED* @Output#numerize@ to @#number@, which is an actual English word.
h3. @Encoders::LinesOfCode@
* *CHANGED*: @compile@ and @finish@ methods are now protected.
h3. *Renamed*: @Encoders::Terminal@ (was @Encoders::Term@)
* *RENAMED* from @Encoders::Term@, added @:term@ alias.
* *CLEANUP*: Use @#setup@'s @super@, don't use @:procedure@ token class.
* *CHANGED*: @#token@'s second parameter is no longer optional.
* *REMOVED* colors for obsolete token kinds.
* *FIXED* handling of line tokens.
h3. @Encoders::Text@
* *FIXED* default behavior of stripping the trailing newline.
h3. *RENAMED*: @Encoders::TokenKindFilter@ (was @Encoders::TokenClassFilter@)
* *NEW*: Handles token groups.
See "#223":http://odd-eyed-code.org/issues/223.
* *RENAMED* @include_block_token?@ to @include_group?@.
h3. @Encoders::Statistic@
* *CHANGED*: Tokens actions are counted separately.
h3. @Scanners::Scanner@
* *NEW* methods @#file_extension@ and @#encoding@.
* *NEW*: The @#tokenize@ method also takes an Array of Strings as source. The
code is highlighted as one and split into parts of the input lengths
after that using @Tokens#split_into_parts@.
* *NEW* method @#binary_string@
* *REMOVED* helper method @String#to_unix@.
* *REMOVED* method @#streamable?@.
* *REMOVED* @#marshal_load@ and @#marshal_dump@.
* *RENAMED* class method @normify@ to @normalize@; it also deals with encoding now.
* *CHANGED*: @#column@ starts counting with 1 instead of 0
h3. *NEW*: @Scanners::Clojure@
Thanks to Licenser, CodeRay now supports the Clojure language.
h3. @Scanners::CSS@
* *NEW*: Rudimentary support for the @attr@, @counter@, and @counters@ functions.
See "#224":http://odd-eyed-code.org/issues/224.
* *NEW*: Rudimentary support for CSS 3 colors.
* *CHANGED*: Attribute selectors are highlighted as @:attribute_name@ instead of @:string@.
* *CHANGED*: Comments are scanned as one token instead of three.
h3. @Scanners::Debug@
* *NEW*: Support for line tokens (@begin_line@ and @end_line@ represented by @[@ and @]@.)
* *FIXED*: Don't send @:error@ and @nil@ tokens for buggy input any more.
* *FIXED*: Closes unclosed tokens at the end of @scan_tokens@.
* *IMPROVED*: Highlight unknown tokens as @:error@.
* *CHANGED*: Raises an error when trying to end an invalid token group.
h3. @Scanners::Delphi@
* *FIXED*: Closes open string groups.
h3. @Scanners::Diff@
* *NEW*: Highlighting of code based on file names.
See ticket "#52":http://odd-eyed-code.org/issues/52.
Use the @:highlight_code@ option to turn this feature off. It's enabled
by default.
This is a very original feature. It enables multi-language highlighting for
diff files, which is especially helpful for CodeRay development itself. The
updated version of the scanner test suite generated .debug.diff.html files
using this.
Note: This is still experimental. Tokens spanning more than one line
may get highlighted incorrectly. CodeRay tries to keep scanner states
between the lines and changes, but the quality of the results depend on
the scanner.
* *NEW*: Inline change highlighting, as suggested by Eric Thomas.
See ticket "#227":http://odd-eyed-code.org/issues/227 for details.
Use the @:inline_diff@ option to turn this feature off. It's enabled by
default.
For single-line changes (that is, a single deleted line followed by a single
inserted line), this feature surrounds the changed parts with an
@:eyecatcher@ group which appears in a more saturated background color.
The implementation is quite complex, and highly experimental. The problem
with multi-layer tokenizing is that the tokens have to be split into parts.
If the inline change starts, say, in the middle of a string, then additional
@:end_group@ and @:begin_group@ tokens must be inserted to keep the group
nesting intact. The extended @Scanner#tokenize@ method and the new
@Tokens#split_into_parts@ method take care of this.
* *NEW*: Highlight the file name in the change headers as @:filename@.
* *CHANGED*: Highlight unknown lines as @:comment@ instead of @:head@.
* *IMPROVED*: Background colors for Diff output have been optimized.
h3. *RENAMED*: @Scanners::ERB@ (was @Scanners::RHTML@)
h3. *NEW*: @Scanners::HAML@
It uses the new :state options of the HTML and Ruby scanners.
Some rare cases are not considered (like @#{...}@ snippets inside of :javascript blocks),
but it highlights pretty well.
h3. @Scanners::HTML@
* *FIXED*: Closes open string groups.
h3. @Scanners::JavaScript@
* *IMPROVED*: Added @NaN@ and @Infinity@ to list of predefined constants.
* *IMPROVED* recognition of RegExp literals with leading spaces.
h3. @Scanners::Java@
* *NEW*: Package names are highlighted as @:namespace@.
See "#210":http://odd-eyed-code.org/issues/210.
h3. *REMOVED*: @Scanners::NitroXHTML@
Nitro is "dead":http://www.nitrohq.com/.
h3. *RENAMED*: @Scanners::Text@ (was @Scanners::Plaintext@)
* *IMPROVED*: Just returns the string without scanning (faster).
This is much faster than scanning until @/\z/@ in Ruby 1.8.
h3. @Scanners::Python@
* *CHANGED*: Docstrings are highlighted as @:comment@.
See "#190":http://odd-eyed-code.org/issues/190.
h3. *NEW*: @Scanners::Raydebug@
Copied from @Scanners::Debug@, highlights the token dump instead of importing it. It also reacts to the @.raydebug@ file
name suffix now.
h3. @Scanners::Ruby@
* *ADDED* more predefined keywords (see http://murfy.de/ruby-constants).
* *IMPROVED* support for singleton method definitions.
See "#147":http://odd-eyed-code.org/issues/147.
* *FIXED*: Don't highlight methods with a capital letter as constants
(eg. @GL.PushMatrix@).
* *NEW*: Highlight buggy floats (like .5) as @:error@.
* *CLEANUP* of documentation, names of constants and variables, state handling.
Moved @StringState@ class from @patterns.rb@ into a separate file.
* *NEW*: Complicated rule for recognition of @foo=@ style method names.
* *NEW*: Handles @:keep_state@ option (a bit; experimental).
Actually, Ruby checks if there is @[~>=]@, but not @=>@ following the name.
* *REMOVED* @EncodingError@
h3. *REMOVED* @Scanners::Scheme@
* It is too buggy, and nobody was using it. To be added again when it's fixed.
See "#59":http://odd-eyed-code.org/issues/59.
h3. @Scanners::SQL@
* *IMPROVED*: Extended list of keywords and functions (thanks to
Joshua Galvez, Etienne Massip, and others).
See "#221":http://odd-eyed-code.org/issues/221.
* *FIXED*: Closes open string groups.
* *FIXED*: Words after @.@ are always recognized as @:ident@.
h3. @Scanners::YAML@
* *FIXED*: Allow spaces before colon in mappings.
See "#231":http://odd-eyed-code.org/issues/231.
h3. *NEW*: @Styles::Alpha@
A style that uses transparent HSLA colors as defined in CSS 3. See "#199":http://odd-eyed-code.org/issues/199.
It also uses the CSS 3 property @user-select: none@ to keep the user from selecting the line numbers. This is especially
nice for @:inline@ line numbers. See "#226":http://odd-eyed-code.org/issues/226.
h3. @WordList@
Stripped down to 19 LOC.
* *RENAMED* @CaseIgnoringWordList@ to @WordList::CaseIgnoring@.
* *REMOVED* caching option because it creates memory leaks.
* *REMOVED* block option.
h3. @FileType@
* *NEW*: Recognizes @.gemspec@, @.rjs@, @.rpdf@ extensions, @Gemfile@, and @Capfile@ as Ruby.
Thanks to the authors of the TextMate Ruby bundle!
* *REMOVED* @FileType#shebang@ is a protected method now.
h3. @Plugin@
* *IMPROVED*: @register_for@ sets the @plugin_id@; it can now be a @Symbol@.
* *ADDED* @PluginHost#const_missing@ method: Plugins are loaded automatically.
Using @Scanners::JavaScript@ in your code loads @scanners/java_script.rb@.
* *ADDED* @#all_plugins@ method to simplify getting
information about all available plugins (suggested by bnhymn).
* *CHANGED* the default plugin key from @nil@ to @:default@.
h3. @GZip@
* *MOVED* into @CodeRay@ namespace.
* *MOVED* file from @gzip_simple.rb@ to @gzip.rb@.
* *REMOVED* @String@ extensions.
h3. More API changes
* *FIXED* @Encoders::HTML#token@'s second parameter is no longer optional.
* *CHANGED* @Encoders::HTML::Output@'s API.
* *REMOVED* lots of unused methods.
The helper classes were cleaned up; see above for details.
* *CHANGED* @Plugin@ API was simplified and stripped of all unnecessary features.
* *CHANGED* Moved @GZip@ and @FileType@ libraries into @CodeRay@; cleaned them up.
|