Parent

Included Modules

Class/Module Index [+]

Quicksearch

Albino::Multi

Wrapper for a custom multipygmentize script. Passes multiple code fragments in STDIN to Python. This assumes both Python and pygments are installed.

Use like so:

@syntaxer = Albino::Multi.new([ [:ruby, File.open("/some/file.rb")] ])
puts @syntaxer.colorize

It takes an Array of two-element arrays [lexer, code].

You can also use Albino::Multi as a drop-in replacement. It currently has a few limitations however:

The default lexer is ‘text’. You need to specify a lexer yourself; because we are using STDIN there is no auto-detect.

To see all lexers and formatters available, run `pygmentize -L`.

Constants

SEPARATOR

Attributes

bin[RW]
timeout_threshold[RW]

Public Class Methods

colorize(*args) click to toggle source

Initializes a new Albino::Multi and runs colorize.

# File lib/albino/multi.rb, line 36
def self.colorize(*args)
  new(*args).colorize
end
new(target, lexer = :text, *args) click to toggle source

This method accepts two forms of input:

DEFAULT

target - The Array of two-element [lexer, code] Arrays:

lexer - The String lexer for the upcoming block of code.
code  - The String block of code to highlight.

LEGACY

target - The String block of code to highlight. lexer - The String lexer for the block of code.

Albino#initialize also takes format and encoding which are ignored.

# File lib/albino/multi.rb, line 54
def initialize(target, lexer = :text, *args)
  @spec = case target
    when Array
      @multi = true
      target
    else
      [[lexer, target]]
  end
end

Public Instance Methods

colorize(options = {}) click to toggle source

Colorizes the code blocks.

options - Specify options for the child process:

timeout - A Fixnum timeout for the child process.

Returns an Array of HTML highlighted code block Strings if an array of targets are given to initialize, or just a single HTML highlighted code block String.

# File lib/albino/multi.rb, line 72
def colorize(options = {})
  options[:timeout] ||= self.class.timeout_threshold
  options[:input]     = @spec.inject([]) do |memo, (lexer, code)|
    memo << lexer << SEPARATOR

    if code.respond_to?(:read)
      out = code.read
      code.close
      code = out
    end

    memo << code << SEPARATOR
  end.join("")

  child  = Child.new(self.class.bin, options)
  pieces = child.out.split(SEPARATOR).each do |code|
    # markdown requires block elements on their own line
    code.sub!(%{</pre></div>\Z}, "</pre>\n</div>")

    # albino::multi assumes utf8 encoding
    code.force_encoding('UTF-8') if code.respond_to?(:force_encoding)
  end
  @multi ? pieces : pieces.first
end
Also aliased as: to_s
to_s(options = {}) click to toggle source
Alias for: colorize

[Validate]

Generated with the Darkfish Rdoc Generator 2.