Sha256: e47b0799dc028ba0b0f30d37a8d9105492882bd943e1339935fc6eefd6fa1185

Contents?: true

Size: 909 Bytes

Versions: 1

Compression:

Stored size: 909 Bytes

Contents

module Ruco
  module SyntaxParser
    # textpow only offers certain syntax
    TEXTPOW_CONVERT = {
      'scss' => 'sass',
      'html+erb' => 'html_rails',
    }

    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)
        processor = syntax.parse(lines.join("\n"),  Ruco::ArrayProcessor.new)
        processor.lines
      else
        []
      end
    end

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

      (languages + fallbacks).detect do |language|
        syntax = File.join(Textpow.syntax_path, "#{language}.syntax")
        found = Textpow::SyntaxNode.load(syntax) if File.exist?(syntax)
      end

      found
    end
    cmemoize :syntax_node
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruco-0.2.0.beta12 lib/ruco/syntax_parser.rb