\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/chef.upgrade/embedded/lib/ruby/gems/2.3.0/gems/coderay-1.1.1/lib/coderay/scanners/

Viewing File: haml.rb

module CodeRay
module Scanners
  
  load :ruby
  load :html
  load :java_script
  
  class HAML < Scanner
    
    register_for :haml
    title 'HAML Template'
    
    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
    
  protected
    
    def setup
      super
      @ruby_scanner          = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
      @embedded_ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true, :state => @ruby_scanner.interpreted_string_state
      @html_scanner          = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true
    end
    
    def scan_tokens encoder, options
      
      match = nil
      code = ''
      
      until eos?
        
        if bol?
          if match = scan(/!!!.*/)
            encoder.text_token match, :doctype
            next
          end
          
          if match = scan(/(?>( *)(\/(?!\[if)|-\#|:javascript|:ruby|:\w+) *)(?=\n)/)
            encoder.text_token match, :comment
            
            code = self[2]
            if match = scan(/(?:\n+#{self[1]} .*)+/)
              case code
              when '/', '-#'
                encoder.text_token match, :comment
              when ':javascript'
                # TODO: recognize #{...} snippets inside JavaScript
                @java_script_scanner ||= CodeRay.scanner :java_script, :tokens => @tokens, :keep_tokens => true
                @java_script_scanner.tokenize match, :tokens => encoder
              when ':ruby'
                @ruby_scanner.tokenize match, :tokens => encoder
              when /:\w+/
                encoder.text_token match, :comment
              else
                raise 'else-case reached: %p' % [code]
              end
            end
          end
          
          if match = scan(/ +/)
            encoder.text_token match, :space
          end
          
          if match = scan(/\/.*/)
            encoder.text_token match, :comment
            next
          end
          
          if match = scan(/\\/)
            encoder.text_token match, :plain
            if match = scan(/.+/)
              @html_scanner.tokenize match, :tokens => encoder
            end
            next
          end
          
          tag = false
          
          if match = scan(/%[\w:]+\/?/)
            encoder.text_token match, :tag
            # if match = scan(/( +)(.+)/)
            #   encoder.text_token self[1], :space
            #   @embedded_ruby_scanner.tokenize self[2], :tokens => encoder
            # end
            tag = true
          end
          
          while match = scan(/([.#])[-\w]*\w/)
            encoder.text_token match, self[1] == '#' ? :constant : :class
            tag = true
          end
          
          if tag && match = scan(/(\()([^)]+)?(\))?/)
            # TODO: recognize title=@title, class="widget_#{@widget.number}"
            encoder.text_token self[1], :plain
            @html_scanner.tokenize self[2], :tokens => encoder, :state => :attribute if self[2]
            encoder.text_token self[3], :plain if self[3]
          end
          
          if tag && match = scan(/\{/)
            encoder.text_token match, :plain
            
            code = ''
            level = 1
            while true
              code << scan(/([^\{\},\n]|, *\n?)*/)
              case match = getch
              when '{'
                level += 1
                code << match
              when '}'
                level -= 1
                if level > 0
                  code << match
                else
                  break
                end
              when "\n", ",", nil
                break
              end
            end
            @ruby_scanner.tokenize code, :tokens => encoder unless code.empty?
            
            encoder.text_token match, :plain if match
          end
          
          if tag && match = scan(/(\[)([^\]\n]+)?(\])?/)
            encoder.text_token self[1], :plain
            @ruby_scanner.tokenize self[2], :tokens => encoder if self[2]
            encoder.text_token self[3], :plain if self[3]
          end
          
          if tag && match = scan(/\//)
            encoder.text_token match, :tag
          end
          
          if scan(/(>?<?[-=]|[&!]=|(& |!)|~)( *)([^,\n\|]+(?:(, *|\|(?=.|\n.*\|$))\n?[^,\n\|]*)*)?/)
            encoder.text_token self[1] + self[3], :plain
            if self[4]
              if self[2]
                @embedded_ruby_scanner.tokenize self[4], :tokens => encoder
              else
                @ruby_scanner.tokenize self[4], :tokens => encoder
              end
            end
          elsif match = scan(/((?:<|><?)(?![!?\/\w]))?(.+)?/)
            encoder.text_token self[1], :plain if self[1]
            # TODO: recognize #{...} snippets
            @html_scanner.tokenize self[2], :tokens => encoder if self[2]
          end
          
        elsif match = scan(/.+/)
          @html_scanner.tokenize match, :tokens => encoder
          
        end
        
        if match = scan(/\n/)
          encoder.text_token match, :space
        end
      end
      
      encoder
      
    end
    
  end
  
end
end