File: M000008.html

package info (click to toggle)
htree 0.7-5
  • links: PTS
  • area: main
  • in suites: squeeze, wheezy
  • size: 1,360 kB
  • ctags: 930
  • sloc: ruby: 5,770; makefile: 69
file content (45 lines) | stat: -rw-r--r-- 5,770 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
  <title>expand_template (HTree)</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
</head>
<body class="standalone-code">
  <pre><span class="ruby-comment cmt"># File htree/template.rb, line 341</span>
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">HTree</span>.<span class="ruby-identifier">expand_template</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
  <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block</span>
    <span class="ruby-identifier">template</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>
    <span class="ruby-identifier">binding</span> = <span class="ruby-identifier">block</span>.<span class="ruby-identifier">binding</span>
  <span class="ruby-keyword kw">else</span>
    <span class="ruby-identifier">pathname</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-value">0</span>) { <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;pathname not given&quot;</span> }
    <span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span>
    <span class="ruby-identifier">obj</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-value">0</span>) { <span class="ruby-constant">Object</span>.<span class="ruby-identifier">new</span> }
    <span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span>
    <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pathname</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-identifier">:read</span>
      <span class="ruby-identifier">template</span> = <span class="ruby-identifier">pathname</span>.<span class="ruby-identifier">read</span>.<span class="ruby-identifier">untaint</span>
      <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">template</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-identifier">:charset</span>
        <span class="ruby-identifier">template</span> = <span class="ruby-constant">Iconv</span>.<span class="ruby-identifier">conv</span>(<span class="ruby-constant">HTree</span><span class="ruby-operator">::</span><span class="ruby-constant">Encoder</span>.<span class="ruby-identifier">internal_charset</span>, <span class="ruby-identifier">template</span>.<span class="ruby-identifier">charset</span>, <span class="ruby-identifier">template</span>)
      <span class="ruby-keyword kw">end</span>
    <span class="ruby-keyword kw">else</span>
      <span class="ruby-identifier">template</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">pathname</span>).<span class="ruby-identifier">untaint</span>
    <span class="ruby-keyword kw">end</span>
    <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>[<span class="ruby-identifier">:htree_expand_template_obj</span>] = <span class="ruby-identifier">obj</span>
    <span class="ruby-identifier">binding</span> = <span class="ruby-identifier">eval</span>(<span class="ruby-value str">&quot;Thread.current[:htree_expand_template_obj].class.class_eval &lt;&lt;-'EE'\nThread.current[:htree_expand_template_obj].instance_eval { binding }\nEE\n&quot;</span>,
      <span class="ruby-constant">HTree</span><span class="ruby-operator">::</span><span class="ruby-constant">EmptyBindingObject</span>.<span class="ruby-identifier">empty_binding</span>, <span class="ruby-node">&quot;(eval:#{__FILE__}:#{__LINE__})&quot;</span>)
    <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>[<span class="ruby-identifier">:htree_expand_template_obj</span>] = <span class="ruby-keyword kw">nil</span>
  <span class="ruby-keyword kw">end</span>

  <span class="ruby-identifier">out</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">$stdout</span>
  <span class="ruby-identifier">encoding</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span> <span class="ruby-operator">||</span> <span class="ruby-constant">HTree</span><span class="ruby-operator">::</span><span class="ruby-constant">Encoder</span>.<span class="ruby-identifier">internal_charset</span>
  <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">args</span>.<span class="ruby-identifier">empty?</span>
    <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;wrong number of arguments&quot;</span> 
  <span class="ruby-keyword kw">end</span>
  <span class="ruby-constant">HTree</span><span class="ruby-operator">::</span><span class="ruby-constant">TemplateCompiler</span>.<span class="ruby-identifier">new</span>.<span class="ruby-identifier">expand_template</span>(<span class="ruby-identifier">template</span>, <span class="ruby-identifier">out</span>, <span class="ruby-identifier">encoding</span>, <span class="ruby-identifier">binding</span>)
<span class="ruby-keyword kw">end</span></pre>
</body>
</html>