Module: Erubis::InterpolationEnhancer

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

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

this is only for Eruby.

### Methods

_add_text_to_str add_expr_escaped add_expr_literal add_text convert_input

### Public Instance methods

_add_text_to_str(str, text)

[Source]

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

add_expr_escaped(str, code)

[Source]

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

add_expr_literal(str, code)

[Source]

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

add_text(src, text)

[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

convert_input(src, input)

[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]