Class: Rouge::Formatters::HTMLTable

Inherits:
Rouge::Formatter show all
Defined in:
lib/rouge/formatters/html_table.rb

Instance Method Summary collapse

Methods inherited from Rouge::Formatter

disable_escape!, enable_escape!, #escape?, escape_enabled?, #filter_escapes, find, #format, format, #render, tag, #token_lines, with_escape

Constructor Details

#initialize(inner, opts = {}) ⇒ HTMLTable

Returns a new instance of HTMLTable


9
10
11
12
13
14
15
16
# File 'lib/rouge/formatters/html_table.rb', line 9

def initialize(inner, opts={})
  @inner = inner
  @start_line = opts.fetch(:start_line, 1)
  @line_format = opts.fetch(:line_format, '%i')
  @table_class = opts.fetch(:table_class, 'rouge-table')
  @gutter_class = opts.fetch(:gutter_class, 'rouge-gutter')
  @code_class = opts.fetch(:code_class, 'rouge-code')
end

Instance Method Details

#stream(tokens) {|buffer.join| ... } ⇒ Object

Yields:

  • (buffer.join)

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
# File 'lib/rouge/formatters/html_table.rb', line 23

def stream(tokens, &b)
  last_val = nil
  num_lines = tokens.reduce(0) {|count, (_, val)| count + (last_val = val).count(?\n) }
  formatted = @inner.format(tokens)
  unless last_val && last_val.end_with?(?\n)
    num_lines += 1
    formatted << ?\n
  end

  # generate a string of newline-separated line numbers for the gutter>
  formatted_line_numbers = (@start_line..(@start_line + num_lines - 1)).map do |i|
    sprintf(@line_format, i)
  end.join(?\n) << ?\n

  buffer = [%(<table class="#@table_class"><tbody><tr>)]
  # the "gl" class applies the style for Generic.Lineno
  buffer << %(<td class="#@gutter_class gl">)
  buffer << %(<pre class="lineno">#{formatted_line_numbers}</pre>)
  buffer << '</td>'
  buffer << %(<td class="#@code_class"><pre>)
  buffer << formatted
  buffer << '</pre></td>'
  buffer << '</tr></tbody></table>'

  yield buffer.join
end

#style(scope) {|%(#{scope} .rouge-table { border-spacing: 0 })| ... } ⇒ Object

Yields:

  • (%(#{scope} .rouge-table { border-spacing: 0 }))

18
19
20
21
# File 'lib/rouge/formatters/html_table.rb', line 18

def style(scope)
  yield %(#{scope} .rouge-table { border-spacing: 0 })
  yield %(#{scope} .rouge-gutter { text-align: right })
end