Class: Rouge::Formatter
- Inherits:
-
Object
- Object
- Rouge::Formatter
- Defined in:
- lib/rouge/formatter.rb
Overview
A Formatter takes a token stream and formats it for human viewing.
Direct Known Subclasses
Rouge::Formatters::HTML, Rouge::Formatters::HTMLLegacy, Rouge::Formatters::HTMLLineHighlighter, Rouge::Formatters::HTMLLineTable, Rouge::Formatters::HTMLLinewise, Rouge::Formatters::HTMLPygments, Rouge::Formatters::HTMLTable, Rouge::Formatters::Null, Rouge::Formatters::Terminal256, Rouge::Formatters::Tex
Class Method Summary collapse
- .disable_escape! ⇒ Object
- .enable_escape! ⇒ Object
- .escape_enabled? ⇒ Boolean
-
.find(tag) ⇒ Object
Find a formatter class given a unique tag.
-
.format(tokens, *args, **kwargs, &b) ⇒ Object
Format a token stream.
-
.tag(tag = nil) ⇒ Object
Specify or get the unique tag for this formatter.
- .with_escape ⇒ Object
Instance Method Summary collapse
- #escape?(tok) ⇒ Boolean
- #filter_escapes(tokens) ⇒ Object
-
#format(tokens, &b) ⇒ Object
Format a token stream.
-
#initialize(opts = {}) ⇒ Formatter
constructor
A new instance of Formatter.
-
#render(tokens) ⇒ Object
deprecated
Deprecated.
Use #format instead.
-
#stream(tokens, &b) ⇒ Object
abstract
yield strings that, when concatenated, form the formatted output.
- #token_lines(tokens) {|out| ... } ⇒ Object protected
Constructor Details
#initialize(opts = {}) ⇒ Formatter
Returns a new instance of Formatter.
49 50 51 |
# File 'lib/rouge/formatter.rb', line 49 def initialize(opts={}) # pass end |
Class Method Details
.disable_escape! ⇒ Object
39 40 41 42 |
# File 'lib/rouge/formatter.rb', line 39 def self.disable_escape! @escape_enabled = false Thread.current[:'rouge/with-escape'] = false end |
.enable_escape! ⇒ Object
35 36 37 |
# File 'lib/rouge/formatter.rb', line 35 def self.enable_escape! @escape_enabled = true end |
.escape_enabled? ⇒ Boolean
31 32 33 |
# File 'lib/rouge/formatter.rb', line 31 def self.escape_enabled? !!(((defined? @escape_enabled) && @escape_enabled) || Thread.current[:'rouge/with-escape']) end |
.find(tag) ⇒ Object
Find a formatter class given a unique tag.
20 21 22 |
# File 'lib/rouge/formatter.rb', line 20 def self.find(tag) REGISTRY[tag] end |
.format(tokens, *args, **kwargs, &b) ⇒ Object
Format a token stream. Delegates to #format.
45 46 47 |
# File 'lib/rouge/formatter.rb', line 45 def self.format(tokens, *args, **kwargs, &b) new(*args, **kwargs).format(tokens, &b) end |
.tag(tag = nil) ⇒ Object
Specify or get the unique tag for this formatter. This is used
for specifying a formatter in rougify
.
12 13 14 15 16 17 |
# File 'lib/rouge/formatter.rb', line 12 def self.tag(tag=nil) return @tag unless tag REGISTRY[tag] = self @tag = tag end |
.with_escape ⇒ Object
24 25 26 27 28 29 |
# File 'lib/rouge/formatter.rb', line 24 def self.with_escape Thread.current[:'rouge/with-escape'] = true yield ensure Thread.current[:'rouge/with-escape'] = false end |
Instance Method Details
#escape?(tok) ⇒ Boolean
53 54 55 |
# File 'lib/rouge/formatter.rb', line 53 def escape?(tok) tok == Token::Tokens::Escape end |
#filter_escapes(tokens) ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/rouge/formatter.rb', line 57 def filter_escapes(tokens) tokens.each do |t, v| if t == Token::Tokens::Escape yield Token::Tokens::Error, v else yield t, v end end end |
#format(tokens, &b) ⇒ Object
Format a token stream.
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/rouge/formatter.rb', line 68 def format(tokens, &b) tokens = enum_for(:filter_escapes, tokens) unless Formatter.escape_enabled? return stream(tokens, &b) if block_given? out = String.new('') stream(tokens) { |piece| out << piece } out end |
#render(tokens) ⇒ Object
Use #format instead.
80 81 82 83 |
# File 'lib/rouge/formatter.rb', line 80 def render(tokens) warn 'Formatter#render is deprecated, use #format instead.' format(tokens) end |
#stream(tokens, &b) ⇒ Object
yield strings that, when concatenated, form the formatted output
87 88 89 |
# File 'lib/rouge/formatter.rb', line 87 def stream(tokens, &b) raise 'abstract' end |
#token_lines(tokens) {|out| ... } ⇒ Object (protected)
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/rouge/formatter.rb', line 92 def token_lines(tokens, &b) return enum_for(:token_lines, tokens) unless block_given? out = [] tokens.each do |tok, val| val.scan %r/\n|[^\n]+/ do |s| if s == "\n" yield out out = [] else out << [tok, s] end end end # for inputs not ending in a newline yield out if out.any? end |