Module: Erubis::InterpolationEnhancer
- Included in:
- FastEruby, InterpolationEruby
- Defined in:
- lib/erubis/enhancer.rb
Overview
convert “<h1><%=title%></h1>” into “_buf << %Q`<h1>#title</h1>‘”
this is only for Eruby.
Class Method Summary collapse
-
.desc ⇒ Object
:nodoc:.
Instance Method Summary collapse
- #_add_text_to_str(str, text) ⇒ Object
- #add_expr_escaped(str, code) ⇒ Object
- #add_expr_literal(str, code) ⇒ Object
- #add_text(src, text) ⇒ Object
- #convert_input(src, input) ⇒ Object
Class Method Details
.desc ⇒ Object
:nodoc:
637 638 639 |
# File 'lib/erubis/enhancer.rb', line 637 def self.desc # :nodoc: "convert '<p><%=text%></p>' into '_buf << %Q`<p>\#{text}</p>`'" end |
Instance Method Details
#_add_text_to_str(str, text) ⇒ Object
707 708 709 710 |
# File 'lib/erubis/enhancer.rb', line 707 def _add_text_to_str(str, text) return if !text || text.empty? str << text.gsub(/[`\#\\]/, '\\\\\&') end |
#add_expr_escaped(str, code) ⇒ Object
712 713 714 |
# File 'lib/erubis/enhancer.rb', line 712 def add_expr_escaped(str, code) str << "\#{#{escaped_expr(code)}}" end |
#add_expr_literal(str, code) ⇒ Object
716 717 718 |
# File 'lib/erubis/enhancer.rb', line 716 def add_expr_literal(str, code) str << "\#{#{code}}" end |
#add_text(src, text) ⇒ Object
696 697 698 699 700 701 702 703 704 705 |
# File 'lib/erubis/enhancer.rb', line 696 def add_text(src, text) return if !text || text.empty? #src << " _buf << %Q`" << text << "`;" if text[-1] == ?\n text[-1] = "\\n" src << " #{@bufvar} << %Q`#{text}`\n" else src << " #{@bufvar} << %Q`#{text}`;" end end |
#convert_input(src, input) ⇒ Object
641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 |
# File 'lib/erubis/enhancer.rb', line 641 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 |