Sha256: 8c1aba4e8910465263ddce8b1db8fd51eb45c993255c9ddb09280de9a104b251

Contents?: true

Size: 1.45 KB

Versions: 28

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true
require 'rouge' unless defined? Rouge.version

module Asciidoctor; module RougeExt; module Formatters
  class HTMLTable < ::Rouge::Formatter
    def initialize delegate, opts
      @delegate = delegate
      @start_line = opts[:start_line] || 1
    end

    def stream tokens
      formatted_code = @delegate.format tokens
      formatted_code += LF unless formatted_code.end_with? LF, HangingEndSpanTagCs
      last_lineno = (first_lineno = @start_line) + (formatted_code.count LF) - 1 # assume number of newlines is constant
      lineno_format = %(%#{(::Math.log10 last_lineno).floor + 1}i)
      formatted_linenos = ((first_lineno..last_lineno).map {|lineno| sprintf lineno_format, lineno } << '').join LF
      yield %(<table class="linenotable"><tbody><tr><td class="linenos gl"><pre class="lineno">#{formatted_linenos}</pre></td><td class="code"><pre>#{formatted_code}</pre></td></tr></tbody></table>)
    end
  end

  class HTMLLineHighlighter < ::Rouge::Formatter
    def initialize delegate, opts
      @delegate = delegate
      @lines = opts[:lines] || []
    end

    def stream tokens
      lineno = 0
      token_lines tokens do |tokens_in_line|
        yield (@lines.include? lineno += 1) ? %(<span class="hll">#{@delegate.format tokens_in_line}#{LF}</span>) : %(#{@delegate.format tokens_in_line}#{LF})
      end
    end
  end

  LF = ?\n
  HangingEndSpanTagCs = %(#{LF}</span>)

  private_constant :HangingEndSpanTagCs, :LF
end; end; end

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
asciidoctor-2.0.22 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.21 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.20 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.19 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.18 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.17 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.16 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.15 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.14 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.13 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.12 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.11 lib/asciidoctor/rouge_ext.rb
metanorma-cli-1.3.4 gems/ruby/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/rouge_ext.rb
metanorma-cli-1.3.3.1 gems/ruby/2.6.0/gems/asciidoctor-2.0.10/lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.10 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.9 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.8 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.7 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.6 lib/asciidoctor/rouge_ext.rb
asciidoctor-2.0.5 lib/asciidoctor/rouge_ext.rb