[#5809] mod_ruby-0.0.7 — Shugo Maeda <shugo@...>

前田です。

63 messages 1999/03/01
[#5845] Re: mod_ruby-0.0.7 — Shugo Maeda <shugo@...> 1999/03/01

前田です。

[#5860] Re: mod_ruby-0.0.7 — moochan <moochan@...> 1999/03/02

moochan です.

[#5892] Re: mod_ruby-0.0.7 — Shugo Maeda <shugo@...> 1999/03/02

前田です。

[#5855] Re: mod_ruby-0.0.7 — Shugo Maeda <shugo@...> 1999/03/01

前田です。

[#5919] Re: mod_ruby-0.0.7 — Shugo Maeda <shugo@...> 1999/03/03

前田です。

[#5895] [REQ] 中置の def — EGUCHI Osamu <eguchi@...>

えぐち@エスアンドイーです。

18 messages 1999/03/02
[#5907] Re: [REQ] 中置の def — EGUCHI Osamu <eguchi@...> 1999/03/03

えぐち@エスアンドイー です。

[#5965] Re: Precision in Mathematica (Re: Bigfloat) — keiju@... (石塚圭樹 )

けいじゅ@日本ラショナルソフトウェアです.

28 messages 1999/03/04
[#5981] Re: Precision in Mathematica (Re: Bigfloat) — gotoken@... (GOTO Kentaro) 1999/03/04

ごとけん

[#6053] Re: Precision in Mathematica (Re: Bigfloat) — matz@... (Yukihiro Matsumoto) 1999/03/06

まつもと ゆきひろです

[#6150] Re: Precision in Mathematica (Re: Bigfloat) — matz@... (Yukihiro Matsumoto) 1999/03/09

まつもと ゆきひろです

[#6159] Re: Precision in Mathematica (Re: Bigfloat) — EGUCHI Osamu <eguchi@...> 1999/03/09

えぐち@エスアンドイー です。

[#6197] Re: Precision in Mathematica (Re: Bigfloat) — keiju@... (石塚圭樹 ) 1999/03/10

けいじゅ@日本ラショナルソフトウェアです.

[#6203] Re: Precision in Mathematica (Re: Bigfloat) — EGUCHI Osamu <eguchi@...> 1999/03/10

えぐち@エスアンドイー です。

[#6224] Re: Precision in Mathematica (Re: Bigfloat) — keiju@... (石塚圭樹 ) 1999/03/11

けいじゅ@日本ラショナルソフトウェアです.

[#6238] Re: Precision in Mathematica (Re: Bigfloat) — EGUCHI Osamu <eguchi@...> 1999/03/11

えぐち@エスアンドイー です。

[#6302] Re: Precision in Mathematica (Re: Bigfloat) — keiju@... (石塚圭樹 ) 1999/03/12

けいじゅ@日本ラショナルソフトウェアです.

[#6304] Re: Precision in Mathematica (Re: Bigfloat) — EGUCHI Osamu <eguchi@...> 1999/03/12

えぐち@エスアンドイー です。

[#5970] [REQ] variable of regex — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

43 messages 1999/03/04

[#6090] Thread#kill — Shugo Maeda <shugo@...>

前田です。

24 messages 1999/03/08

[#6328] Re: Ruby 1.3.1-990315 — WATANABE Hirofumi <watanabe@...>

わたなべです.

41 messages 1999/03/15
[#6329] Re: Ruby 1.3.1-990315 — matz@... (Yukihiro Matsumoto) 1999/03/15

まつもと ゆきひろです

[#6331] Re: Ruby 1.3.1-990315 — Wakou Aoyama <wakou@...> 1999/03/15

青山です。

[#6338] Re: Ruby 1.3.1-990315 — matz@... (Yukihiro Matsumoto) 1999/03/16

まつもと ゆきひろです

[#6347] Re: Ruby 1.3.1-990315 — Wakou Aoyama <wakou@...> 1999/03/16

青山です。

[#6348] Re: Ruby 1.3.1-990315 — matz@... (Yukihiro Matsumoto) 1999/03/16

まつもと ゆきひろです

[#6350] Re: Ruby 1.3.1-990315 — Wakou Aoyama <wakou@...> 1999/03/16

青山です。

[#6353] Re: Ruby 1.3.1-990315 — matz@... (Yukihiro Matsumoto) 1999/03/16

まつもと ゆきひろです

[#6354] Re: Ruby 1.3.1-990315 — Wakou Aoyama <wakou@...> 1999/03/16

青山です。

[#6434] Time#+ — Koji Arai <JCA02266@...>

新井です。

19 messages 1999/03/22
[#6442] Re: Time#+ — matz@... (Yukihiro Matsumoto) 1999/03/22

まつもと ゆきひろです

[ruby-dev:6162] Re: eRuby (Re: htmlelem.rb)

From: Masatoshi SEKI <m_seki@...>
Date: 1999-03-09 14:42:27 UTC
List: ruby-dev #6162
咳といいます。

From: matz@netlab.co.jp (Yukihiro Matsumoto)

> あ,私の頭の中にあったのとの違いは以下の3点だけですね.
> 
>   * <% ... %>中にprintがあれば,それも一緒に出力される
> 
>     つまり一度文字列に変換し,出力するのではなく,逐次出力す
>     るイメージ

この項目がいまいちよくわかりませんでした。これであってるのなぁ。


とりあえず、作ってみました。
単体で起動したときは標準入力から eRuby スクリプトを読んで
Ruby スクリプトを出力します。

ヒアドキュメント中の文字列ってなにかエスケープしておかないと
だめだと思うんですがそのままにしてあります。

そうそう
ヒアドキュメントだと eval できないんですね。


ところで、これって実際にはどのように使うのですか?
ファイルに一旦出力して手で再編集して使うのかなぁ?


-----
#!/usr/local/bin/ruby
# $Id: erb.rb,v 1.7 1999/03/09 14:39:09 mas Exp $
# $Author: mas $
# Copyright (c) 1999 Masatoshi SEKI

require 'enumre.rb'	# http://www2a.biglobe.ne.jp/%7Eseki/ruby/enumre.rb

class ERb
  def pre_compile(s)
    list = []
    s.each_line do |line|
      line.gsub!(/(<%#)|(<%=)|(<% )|( %>)/) do |m|
      "\n#{m}\n"
      end
      list += line.split("\n")
      list.push("\n")
    end
    # list からコメントを取り除く
    list = @comment.gsub(list) { nil }
    # print に置換
    list = @print.gsub(list) {
      v = @print.matching_data[1].join
      ['<% ', "print #{v}", ' %>']
    }
  end
  module_function :pre_compile
  private :pre_compile

  def compile(s)
    cmdlist = []
    str_table = []
    list = pre_compile(s)
    list = @compile.gsub(list) {
      match = @compile.matching_data
      str = match[0].join
      cmd = match[2].join

      if str.size > 0
	cmdlist.push("print <<END_OF_ERB\n#{str}\nEND_OF_ERB")
      end
      cmdlist.push(cmd)
      nil
    }
    str = list.join
    if str.size > 0
      cmdlist.push("print <<END_OF_ERB\n#{str}\nEND_OF_ERB")
    end
    cmdlist.join("\n")
  end
  module_function :compile
  private :compile

  def setup_compiler
    stag = REEq.new('<% ')
    etag = REEq.new(' %>')
    commenttag = REEq.new('<%#')
    printtag = REEq.new('<%=')
    any = REAny.new.repeat(0,-1).greedy(false)
    @comment = RE.new([commenttag, any, etag])
    @print = RE.new([printtag, any, etag])
    @compile = RE.new([any, stag, any, etag])
  end
  module_function :setup_compiler
  private :setup_compiler

  def initialize(str)
    @src = ERb.compile(str)
  end
  attr :src

  setup_compiler
end


if __FILE__ == $0
  str = $stdin.read
  puts ERb.new(str).src
end

In This Thread