Module Erubis::InterpolationEnhancer
In: erubis/enhancer.rb

convert "<h1><%=title%></h1>" into "_buf << %Q`<h1>#{title}</h1>`"

this is only for Eruby.

Methods

Public Instance methods

[Source]

# File erubis/enhancer.rb, line 663
    def _add_text_to_str(str, text)
      return if !text || text.empty?
      text.gsub!(/[`\#\\]/, '\\\\\&')
      str << text
    end

[Source]

# File erubis/enhancer.rb, line 669
    def add_expr_escaped(str, code)
      str << "\#{#{escaped_expr(code)}}"
    end

[Source]

# File erubis/enhancer.rb, line 673
    def add_expr_literal(str, code)
      str << "\#{#{code}}"
    end

[Source]

# File erubis/enhancer.rb, line 652
    def add_text(src, text)
      return if !text || text.empty?
      #src << " _buf << %Q`" << text << "`;"
      if text[-1] == ?\n
        text[-1] = "\\n"
        src << " _buf << %Q`" << text << "`\n"
      else
        src << " _buf << %Q`" << text << "`;"
      end
    end

[Source]

# File erubis/enhancer.rb, line 597
    def convert_input(src, input)
      pat = @pattern
      regexp = pat.nil? || pat == '<% %>' ? Basic::Converter::DEFAULT_REGEXP : pattern_regexp(pat)
      pos = 0
      is_bol = true     # is beginning of line
      str = ''
      input.scan(regexp) do |indicator, code, tailch, rspace|
        match = Regexp.last_match()
        len  = match.begin(0) - pos
        text = input[pos, len]
        pos  = match.end(0)
        ch   = indicator ? indicator[0] : nil
        lspace = ch == ?= ? nil : detect_spaces_at_bol(text, is_bol)
        is_bol = rspace ? true : false
        _add_text_to_str(str, text)
        ## * when '<%= %>', do nothing
        ## * when '<% %>' or '<%# %>', delete spaces iff only spaces are around '<% %>'
        if ch == ?=              # <%= %>
          rspace = nil if tailch && !tailch.empty?
          str << lspace if lspace
          add_expr(str, code, indicator)
          str << rspace if rspace
        elsif ch == ?\#          # <%# %>
          n = code.count("\n") + (rspace ? 1 : 0)
          if @trim && lspace && rspace
            add_text(src, str)
            str = ''
            add_stmt(src, "\n" * n)
          else
            str << lspace if lspace
            add_text(src, str)
            str = ''
            add_stmt(src, "\n" * n)
            str << rspace if rspace
          end
        else                     # <% %>
          if @trim && lspace && rspace
            add_text(src, str)
            str = ''
            add_stmt(src, "#{lspace}#{code}#{rspace}")
          else
            str << lspace if lspace
            add_text(src, str)
            str = ''
            add_stmt(src, code)
            str << rspace if rspace
          end
        end
      end
      #rest = $' || input                       # ruby1.8
      rest = pos == 0 ? input : input[pos..-1]  # ruby1.9
      _add_text_to_str(str, rest)
      add_text(src, str)
    end

[Validate]