Sha256: 29610f4d46b533a7c2933a800efd7bf7660d21fa0564d6d8a36c2f26a5d2f76a
Contents?: true
Size: 1.18 KB
Versions: 3
Compression:
Stored size: 1.18 KB
Contents
module Rouge module Lexers class Session < TemplateLexer desc 'an interactive session of another language' tag 'session' default_options :prompt => /(\A|\n)[^$#]+[$#]/ default_options :parent => 'shell' def prompt_regex @prompt_regex ||= option(:prompt).tap do |prompt| Regexp === prompt ? prompt : Regexp.new(prompt) end end def stream_tokens(str, &b) scanner = StringScanner.new(str) until scanner.eos? if scanner.scan(prompt_regex) debug { "prompt: #{scanner[0].inspect}" } yield Token['Generic.Heading'], scanner[0] scanner.scan(line_regex) debug { "line: #{scanner[0].inspect}" } parent.lex(scanner[0], :continue => true, &b) end scanner.scan(until_prompt_regex) debug { "(#{until_prompt_regex.inspect}: #{scanner[0].inspect}" } yield Token['Generic.Output'], scanner[0] end end private def line_regex @line_regex ||= /(\\.|.)*?\n/ end def until_prompt_regex @until_prompt_regex ||= /.*?(?=#{prompt_regex})|.*/m end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rouge-0.2.12 | lib/rouge/lexers/session.rb |
rouge-0.2.11 | lib/rouge/lexers/session.rb |
rouge-0.2.10 | lib/rouge/lexers/session.rb |