| 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