Module CodeRay::Encoders
In: lib/coderay/encoders/page.rb
lib/coderay/encoders/html.rb
lib/coderay/encoders/html/output.rb
lib/coderay/encoders/html/numbering.rb
lib/coderay/encoders/html/css.rb
lib/coderay/encoders/count.rb
lib/coderay/encoders/span.rb
lib/coderay/encoders/json.rb
lib/coderay/encoders/token_kind_filter.rb
lib/coderay/encoders/lines_of_code.rb
lib/coderay/encoders/div.rb
lib/coderay/encoders/comment_filter.rb
lib/coderay/encoders/terminal.rb
lib/coderay/encoders/yaml.rb
lib/coderay/encoders/xml.rb
lib/coderay/encoders/_map.rb
lib/coderay/encoders/text.rb
lib/coderay/encoders/null.rb
lib/coderay/encoders/statistic.rb
lib/coderay/encoders/filter.rb
lib/coderay/encoders/debug.rb
lib/coderay/encoder.rb

This module holds the Encoder class and its subclasses. For example, the HTML encoder is named CodeRay::Encoders::HTML can be found in coderay/encoders/html.

Encoders also provides methods and constants for the register mechanism and the [] method that returns the Encoder class belonging to the given format.

Methods

Classes and Modules

Class CodeRay::Encoders::CommentFilter
Class CodeRay::Encoders::Count
Class CodeRay::Encoders::Debug
Class CodeRay::Encoders::Div
Class CodeRay::Encoders::Encoder
Class CodeRay::Encoders::Filter
Class CodeRay::Encoders::HTML
Class CodeRay::Encoders::JSON
Class CodeRay::Encoders::LinesOfCode
Class CodeRay::Encoders::Null
Class CodeRay::Encoders::Page
Class CodeRay::Encoders::Span
Class CodeRay::Encoders::Statistic
Class CodeRay::Encoders::Terminal
Class CodeRay::Encoders::Text
Class CodeRay::Encoders::TokenKindFilter
Class CodeRay::Encoders::XML
Class CodeRay::Encoders::YAML

Constants

TRANSPARENT_TOKEN_KINDS = Set[ :delimiter, :modifier, :content, :escape, :inline_delimiter, ]

Public Class methods

Generate a hint about the given kinds in a hint style.

hint may be :info, :info_long or :debug.

[Source]

     # File lib/coderay/encoders/html.rb, line 148
148:     def self.token_path_to_hint hint, kinds
149:       kinds = Array kinds
150:       title =
151:         case hint
152:         when :info
153:           kinds = kinds[1..-1] if TRANSPARENT_TOKEN_KINDS.include? kinds.first
154:           TOKEN_KIND_TO_INFO[kinds.first]
155:         when :info_long
156:           kinds.reverse.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/')
157:         when :debug
158:           kinds.inspect
159:         end
160:       title ? " title=\"#{title}\"" : ''
161:     end

Public Instance methods

token groups, eg. strings

[Source]

     # File lib/coderay/encoders/html.rb, line 256
256:     def begin_group kind
257:       @out << (@span_for_kind[@last_opened ? [kind, *@opened] : kind] || '<span>')
258:       @opened << kind
259:       @last_opened = kind if @set_last_opened
260:     end

whole lines to be highlighted, eg. a deleted line in a diff

[Source]

     # File lib/coderay/encoders/html.rb, line 274
274:     def begin_line kind
275:       if style = @span_for_kind[@last_opened ? [kind, *@opened] : kind]
276:         if style['class="']
277:           @out << style.sub('class="', 'class="line ')
278:         else
279:           @out << style.sub('>', ' class="line">')
280:         end
281:       else
282:         @out << '<span class="line">'
283:       end
284:       @opened << kind
285:       @last_opened = kind if @options[:css] == :style
286:     end

[Source]

     # File lib/coderay/encoders/html.rb, line 262
262:     def end_group kind
263:       if $CODERAY_DEBUG && (@opened.empty? || @opened.last != kind)
264:         warn 'Malformed token stream: Trying to close a token (%p) ' \
265:           'that is not open. Open are: %p.' % [kind, @opened[1..-1]]
266:       end
267:       if @opened.pop
268:         @out << '</span>'
269:         @last_opened = @opened.last if @last_opened
270:       end
271:     end

[Source]

     # File lib/coderay/encoders/html.rb, line 288
288:     def end_line kind
289:       if $CODERAY_DEBUG && (@opened.empty? || @opened.last != kind)
290:         warn 'Malformed token stream: Trying to close a line (%p) ' \
291:           'that is not open. Open are: %p.' % [kind, @opened[1..-1]]
292:       end
293:       if @opened.pop
294:         @out << '</span>'
295:         @last_opened = @opened.last if @last_opened
296:       end
297:     end

[Source]

     # File lib/coderay/encoders/html.rb, line 219
219:     def finish options
220:       unless @opened.empty?
221:         warn '%d tokens still open: %p' % [@opened.size, @opened] if $CODERAY_DEBUG
222:         @out << '</span>' while @opened.pop
223:         @last_opened = nil
224:       end
225:       
226:       @out.extend Output
227:       @out.css = @css
228:       if options[:line_numbers]
229:         Numbering.number! @out, options[:line_numbers], options
230:       end
231:       @out.wrap! options[:wrap]
232:       @out.apply_title! options[:title]
233:       
234:       if defined?(@real_out) && @real_out
235:         @real_out << @out
236:         @out = @real_out
237:       end
238:       
239:       super
240:     end

[Source]

     # File lib/coderay/encoders/html.rb, line 163
163:     def setup options
164:       super
165:       
166:       if options[:wrap] || options[:line_numbers]
167:         @real_out = @out
168:         @out = ''
169:       end
170:       
171:       @HTML_ESCAPE = HTML_ESCAPE.dup
172:       @HTML_ESCAPE["\t"] = ' ' * options[:tab_width]
173:       
174:       @opened = []
175:       @last_opened = nil
176:       @css = CSS.new options[:style]
177:       
178:       hint = options[:hint]
179:       if hint && ![:debug, :info, :info_long].include?(hint)
180:         raise ArgumentError, "Unknown value %p for :hint; \
181:           expected :info, :info_long, :debug, false, or nil." % hint
182:       end
183:       
184:       css_classes = TokenKinds
185:       case options[:css]
186:       when :class
187:         @span_for_kind = Hash.new do |h, k|
188:           if k.is_a? ::Symbol
189:             kind = k_dup = k
190:           else
191:             kind = k.first
192:             k_dup = k.dup
193:           end
194:           if kind != :space && (hint || css_class = css_classes[kind])
195:             title = HTML.token_path_to_hint hint, k if hint
196:             css_class ||= css_classes[kind]
197:             h[k_dup] = "<span#{title}#{" class=\"#{css_class}\"" if css_class}>"
198:           else
199:             h[k_dup] = nil
200:           end
201:         end
202:       when :style
203:         @span_for_kind = Hash.new do |h, k|
204:           kind = k.is_a?(Symbol) ? k : k.first
205:           h[k.is_a?(Symbol) ? k : k.dup] =
206:             if kind != :space && (hint || css_classes[kind])
207:               title = HTML.token_path_to_hint hint, k if hint
208:               style = @css.get_style Array(k).map { |c| css_classes[c] }
209:               "<span#{title}#{" style=\"#{style}\"" if style}>"
210:             end
211:         end
212:       else
213:         raise ArgumentError, "Unknown value %p for :css." % options[:css]
214:       end
215:       
216:       @set_last_opened = options[:hint] || options[:css] == :style
217:     end

[Source]

     # File lib/coderay/encoders/html.rb, line 244
244:     def text_token text, kind
245:       if text =~ /#{HTML_ESCAPE_PATTERN}/o
246:         text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] }
247:       end
248:       if style = @span_for_kind[@last_opened ? [kind, *@opened] : kind]
249:         @out << style << text << '</span>'
250:       else
251:         @out << text
252:       end
253:     end

[Validate]