Module | Erubis::HeaderFooterEnhancer |
In: |
lib/erubis/enhancer.rb
|
ex.
==================== ## without header and footer $ cat ex1.eruby <% def list_items(list) %> <% for item in list %> <li><%= item %></li> <% end %> <% end %> $ erubis -s ex1.eruby _buf = []; def list_items(list) ; for item in list ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li> '; end ; end ; _buf.join ## with header and footer $ cat ex2.eruby <!--#header: def list_items(list) #--> <% for item in list %> <li><%= item %></li> <% end %> <!--#footer: end #--> $ erubis -s -c HeaderFooterEruby ex4.eruby def list_items(list) _buf = []; _buf << ' '; for item in list ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li> '; end ; _buf << ' '; _buf.join end ====================
this is language-independent.
HEADER_FOOTER_PATTERN | = | /(.*?)(^[ \t]*)?<!--\#(\w+):(.*?)\#-->([ \t]*\r?\n)?/m |
footer | [RW] | |
header | [RW] |
# File lib/erubis/enhancer.rb, line 542 542: def add_text(src, text) 543: m = nil 544: text.scan(HEADER_FOOTER_PATTERN) do |txt, lspace, word, content, rspace| 545: m = Regexp.last_match 546: flag_trim = @trim && lspace && rspace 547: super(src, txt) 548: content = "#{lspace}#{content}#{rspace}" if flag_trim 549: super(src, lspace) if !flag_trim && lspace 550: instance_variable_set("@#{word}", content) 551: super(src, rspace) if !flag_trim && rspace 552: end 553: #rest = $' || text # ruby1.8 554: rest = m ? text[m.end(0)..-1] : text # ruby1.9 555: super(src, rest) 556: end