Sha256: f032694068220a43c50759090192a7928e36233f60c7a24fd96cf6176914443e

Contents?: true

Size: 934 Bytes

Versions: 7

Compression:

Stored size: 934 Bytes

Contents

module Ruco
  module SyntaxParser
    # textpow only offers certain syntax
    TEXTPOW_CONVERT = {
      'html+erb' => 'text.html.ruby',
      'rhtml' => 'text.html.ruby',
    }

    def self.syntax_for_line(line, languages)
      syntax_for_lines([line], languages).first
    end
    cmemoize :syntax_for_line

    def self.syntax_for_lines(lines, languages)
      if syntax = syntax_node(languages)
        begin
          processor = syntax.parse(lines.join("\n"),  Ruco::ArrayProcessor.new)
          processor.lines
        rescue RegexpError, ArgumentError
          $stderr.puts $!
          []
        end
      else
        []
      end
    end

    def self.syntax_node(languages)
      found = nil
      fallbacks = languages.map{|l| TEXTPOW_CONVERT[l] }.compact

      (languages + fallbacks).detect do |language|
        found = Textpow.syntax(language)
      end

      found
    end
    cmemoize :syntax_node
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ruco-0.4.0 lib/ruco/syntax_parser.rb
ruco-0.3.0 lib/ruco/syntax_parser.rb
ruco-0.2.23 lib/ruco/syntax_parser.rb
ruco-0.2.22 lib/ruco/syntax_parser.rb
ruco-0.2.21 lib/ruco/syntax_parser.rb
ruco-0.2.20 lib/ruco/syntax_parser.rb
ruco-0.2.19 lib/ruco/syntax_parser.rb