
= Amrita ĥ

==  HTMLǤ°ѹ

href="..." Τ褦°ͤѹˡޤ

:

  :include: sample/tour/makeurl.rb


:

   <table border="1">                                                    
     <tr>                                                                
     <th>name</th>                                                       
     <th>author</th>                                                     
     <th>webpage</th>                                                    
     </tr>                                                               
     <tr>                                                                
     <td>Ruby</td>                                                       
     <td>matz</td>                                                       
     <td><a href="http://www.ruby-lang.org/">Ruby Home Page</a></td>     
     </tr>                                                               
     <tr>                                                                
     <td>perl</td>                                                       
     <td>Larry Wall</td>                                                 
     <td><a href="http://www.perl.com/">Perl.com</a></td>                
     </tr>                                                               
     <tr>                                                                
     <td>python</td>                                                     
     <td>Guido van Rossum</td>                                           
     <td><a href="http://www.python.org/">Python Language Website</a></td>
     </tr>                                                               
   </table>                                                              


=== 

Amrita#a() Ȥ᥽åɤ Amrita::AttrArray Ȥ̤ʥ֥Ȥޤ

    a(:href=>"http://www.ruby-lang.org/") { "Ruby Home Page" },

Υ֥ȤǥǡȤƻѤȡHTMLǤ°ѹޤ
㤨СΤ褦ʥƥץ졼ȤˤΥǡͿȤ

    <td><a id="webpage"></a></td>

ϤϼΤ褦ˤʤޤ

    <td><a href="http://www.ruby-lang.org/">Ruby Home Page</a></td>     

docs/XML_ja Ƥ filelist.rb ȤץAttrArrayѤƤޤ

ʤ°Ÿ̤ˡ⤢ޤܤ docs/Tour2 expand_attr 򻲾ȤƤ

---

== Proc֥

ǥǡ+id+°Υޥå󥰤Ȥamritaäˡϡ
ץǸ̤Τ褤ɤǽˤޤ

Τ褦ˡǤϤ줤˽ʤ⵩ˤ¸ߤޤ
+Proc+ ֥ȤǥǡȤͿȡ
³Ū˥ƥץ졼Ȥѹ뤳ȤǤޤ

=== ɤȽ


:

  :include: sample/tour/proc.rb

:

   <ul> 
     <li><font color="black">java</font> </li>
     <li><em><font color="red" size="big">I love Ruby!</font></em> </li>
     <li><font color="blue">perl</font> </li>
     ...
   </ul>

=== 

ǥǡȤ Proc ֥ȤϤȡamrita ϡ
ƥץ졼ŸˡProc ƤӽФޤ
κݡѥ᡼Ȥơб +id+ ΤĤHTMLǤ Amrita::Element ֥ȤȤ
Ϥޤ
ơ Proc η̤ȥƥץ졼Ȥ֤ޤ

 Proc ǡΤ褦ʥ᥽åɤѤƼͳ˥ƥץ졼ȤԽ뤳ȤǤޤ


°ͤ

     elem[:color] = "red" 


Ǥ˥ƥȤꤹ

     elem.set_text("I love Ruby!")

Amrita#e ᥽åɤˤäơHTMLǤ

     e(:em) { elem } 


---

== ¸Υ饹ǥǡȤƻѤ

HashArrayǤʤ
¸Υ饹(Rubyɸ९饹桼Υ饹)Υ֥Ȥ
Τޤޡamrita ΥǥǡȤƻѤǤ

=== ɤȽ

:

  :include: sample/tour/time.rb


:

  2002/7/17

=== 

⤷ǥǡAmrita::ExpandByMember Ȥ⥸塼includeƤ顢
amrita +id+ °ͤ᥽å̾ȸʤơΥ᥽åɤƤӽФޤ

ΥץǤϡ+:time+бǡϡRubyɸTime֥ȤǤ
ExpandByMember ⥸塼 +extend+ Ƥޤ
 +id+°ͤǤ +year+ ᥽å̾Ȥߤʤamrita
+t+ ФƤΥ᥽åɤθƽФԤޤ

η <tt><span id="year"></span></tt> Ȥʬϡ
<tt>t.year</tt>η "2002" Ÿ졢¾ʬƱͤ˽
Τ褦Ÿޤ

  <span><span>2002</span>/<span>7</span>/<span>17</span></span>

amrita  °Τʤ <tt><span></tt> ǤϺޤΤǡǽŪʽϤ

  2002/7/17

Ȥʤޤ

---

== ץꥳѥ

amrita  HTML ƥץ졼Ȥ Ruby Υɤ˥ѥ뤹뤳ȤǤޤ

=== ɤȽ

(table.rb˥ѥѤ뤿ɲäʬ) :

  tmpl = TemplateText.new(TEMPLATE)
  tmpl.use_compiler = true
  tmpl.set_hint_by_sample_data(data) # ɲäȤΥǡ˺Ŭޤ
  tmpl.expand(STDOUT, data)  #
  puts "----code generated by Amrita -----------"
  puts tmpl.src
  puts "----code generated by Amrita end -------"

Ϥtable.rbƱǤ
ѥνϤɤȥ٥ޡɲäƤޤ

Crusoe TM5600ޥ(NEC Lavie MX)ǤνϤϼΤ褦ˤʤޤ

  43.068354 seconds for 1000 times without compiling
  5.078764 seconds for 1000 times with pre-compiled code


=== 

ŪˤϡνɲäǥѥѤǤޤ

  tmpl.use_compiler = true

ʹߡ+expand+ ϥѥ뤵줿RubyɤǼ¹Ԥޤ
prettyprintεǽϥݡȤޤ󤬡ʳƱ̤ˤʤޤ

ץǡѤơŬԤʤˤϼνɲäޤ

And optionally give a sample data to amrita.

  tmpl.set_hint_by_sample_data(data)

amritaΥѥϡΥǡϤRubyɤκŬΤ˻Ѥޤ
äơϤǥǡι¤Ѳ顢١οǡ
+set_hint_by_sample_data+ Ƥɬפޤ

amritaΥѥϡʬŪ˥󥿥ץ꥿⡼ɤޤ뤳ȤǤޤ
ʬŪ˹¤ѲǡФơѥѤϡ
ץǡбʬ(Ѳǡʬ)ˡ+nil+ Ϥɬפޤ

ѥϡElement::expandѤ褦ʥɤбĽޤ

Τ褦ˤơԡɤȽΥȥ졼ɥդͳ˼뤳ȤǤޤ

---

== ˥ -- XSS(ȥץƥ)к

amritaˤϡXSSкȤơAmrita::Sanitizer Ȥ⥸塼뤬ȹޤƤޤ
Amrita::Formatter ϼưŪˤΥ⥸塼Ѥޤ

I will provide interface to controle sanitizer through
Amrita::Template in future release.

=== ɤȽ

  :include: sample/tour/sanitizer.rb

=== 

==== ƥ

xhtml/html ΥƥȤȤƴʸ(<>&) ϼưŪ˥פޤ

    "<abc>" => "&lt;abc&gt;"

==== °

°ͤȤƴʸ(<>&"')ϼưŪ˥פޤ

==== URL°ΰ

<a>Ǥhref°Τ褦ˡURLͤȤƻ°ͤϡ̰ޤ

ɤ°̰ͤ뤫ξܺ٤ˤĤƤ tag.rb 򻲾ȤƤ

°ͤϡΤ褦ˤ˸åޤ

  * °ͤURLȤƵʤʸĤȤϤǤޤ
  * °ͤϵʤ(ץȥ)ĤȤϤǤޤ

ξ˰ȿ顢°ͤnil֤<tt><a href="">....</a></tt>
Τ褦ɽޤ

Τ褦+setup_taginfo+ ᥽åɤ뤳Ȥǡ
ɤ°򤳤Τ褦˰(ʤ)򥫥ޥ뤳ȤǤޤ


    t = TemplateFile.new ...

    def t.setup_taginfo
      ret = TagInfo.new
      ret[:aaa].set_url_attr(:bbb)
      ret
    end

ξϡ +aaa+Ǥ+bbb+°ϡURLȤƥ˥ޤ

==== ˥̵ˤ

Amrita::SanitizedString ֥Ȥǥǡ˴ޤ뤳Ȥǡ
εǽ̵ˤ뤳ȤǤޤ

    t = TemplateText.new '<p id="a">sample_text</p>'
    t.expand(STDOUT, { :a=>"<xxx>" })                  # => <p>&lt;xxx&gt;</p>
    t.expand(result, { :a=>SanitizedString["<xxx>"] }) # => <p><xxx></p>

εǽϡXSSˤĤ򤷤ǡʬդѤƤ

ʤ⤦ҤȤƱͤθ̤ˡȤơ<tt>escape {...} </tt> 
ǥǡϤȤˡ⤢ޤ

---

