[#34991] a = 4 ; p((a < 3) or (a > 5)) — Take_tk <ggb03124@...>

 次のものがエラーになるのは何故なんでしょうか?

12 messages 2002/05/06

[#35028] win32.c 中の my* 関数について — 小西 弘将 <konishih@...6.so-net.ne.jp>

小西 弘将です。

20 messages 2002/05/09
[#35034] Re: win32.c 中の my* 関数について — nobu.nakada@... 2002/05/10

なかだです。

[#35042] Re: win32.c 中の my* 関数について — 小西 弘将 <konishih@...6.so-net.ne.jp> 2002/05/11

 小西 弘将です。

[#35044] Re: win32.c 中の my* 関数について — 小西 弘将 <konishih@...6.so-net.ne.jp> 2002/05/11

 小西 弘将です。

[#35045] Re: win32.c 中の my* 関数について — "U.Nakamura" <usa@...> 2002/05/11

こんにちは、なかむら(う)です。

[#35046] Re: win32.c 中の my* 関数について — nobu.nakada@... 2002/05/11

なかだです。

[#35047] Re: win32.c 中の my* 関数について — 小西 弘将 <konishih@...6.so-net.ne.jp> 2002/05/11

 小西 弘将です。

[#35048] Re: win32.c 中の my* 関数について — nobu.nakada@... 2002/05/11

なかだです。

[#35062] Re: win32.c 中の my* 関数について — 小西 弘将 <konishih@...6.so-net.ne.jp> 2002/05/12

 小西 弘将です。

[#35052] ruby_lib/html/ — Wakou Aoyama <wakou@...>

青山です。

32 messages 2002/05/11
[#35057] Re: ruby_lib/html/ — TN <nyonyoru@...> 2002/05/12

 にょにょると申します。(ここハンドル投稿ダメなのでしょうか?ダメなら本

[#35063] Re: ruby_lib/html/ — Wakou Aoyama <wakou@...> 2002/05/12

青山です。

[#35074] Re: ruby_lib/html/ — nnr <nyonyoru@...> 2002/05/12

 にょにょるです。オンラインではずっとこれを使っているので、これでいきま

[#35054] 「 Ruby/GTK プログラミング入門」 — Noritsugu Nakamura <nnakamur@...>

14 messages 2002/05/12

[#35102] ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — Kouhei Sutou (須藤功平) <kou@...>

はじめまして、須藤です。

57 messages 2002/05/13
[#35115] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — "NAKAMURA, Hiroshi" <nakahiro@...> 2002/05/14

なひです。

[#35125] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — Kouhei Sutou (須藤功平) <kou@...> 2002/05/14

須藤です。

[#35130] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — "NAKAMURA, Hiroshi" <nakahiro@...> 2002/05/15

なひです。

[#35140] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — Kouhei Sutou (須藤功平) <kou@...> 2002/05/15

須藤です。

[#35141] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — nobu.nakada@... 2002/05/15

なかだです。

[#35157] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — TAKAHASHI Masayoshi <maki@...> 2002/05/15

高橋征義です。

[#35159] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — "NAKAMURA, Hiroshi" <nakahiro@...> 2002/05/16

なひです。

[#35160] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — "NAKAMURA, Hiroshi" <nakahiro@...> 2002/05/16

なひです。

[#35162] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — matz@... (Yukihiro Matsumoto) 2002/05/16

まつもと ゆきひろです

[#35186] Re: ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — "NAKAMURA, Hiroshi" <nakahiro@...> 2002/05/17

なひです。

[#35192] Re: ANNOUNCE: REXML のドキュメント — siena@... (Siena.) 2002/05/17

Siena. です。

[#35253] ((1.2)..(3.4)).to_a — Take_tk <ggb03124@...>

1.2..3.4 を配列にすると、その範囲に属しない整数「1」が含まれるという点に

29 messages 2002/05/25
[#35257] Re: ((1.2)..(3.4)).to_a — matz@... (Yukihiro Matsumoto) 2002/05/25

まつもと ゆきひろです

[#35265] Re: ((1.2)..(3.4)).to_a — Take_tk <ggb03124@...> 2002/05/27

たけ(tk)です。

[#35272] Re: ((1.2)..(3.4)).to_a — siena@... (Siena.) 2002/05/27

Siena. です。

[#35279] Re: ((1.2)..(3.4)).to_a — matz@... (Yukihiro Matsumoto) 2002/05/28

まつもと ゆきひろです

[ruby-list:35107] Re: ruby_lib/html/

From: siena@... (SHINAGAWA, Norihide / Siena.)
Date: 2002-05-13 22:13:15 UTC
List: ruby-list #35107
はじめまして。Siena. と申します。
どうぞよろしくお願いします。

# どこに繋げたら良いのか迷いましたが、とりあえずこの辺りに

今回の分離で、HTML 生成部分がどの程度変更されるのかなど、
よく分かってないのですが、個人的に次のような事を思っていました。

* HTML 関連の様々な API があって、覚えにくいし、組み合わせて使いにくい
* 生成した HTML オブジェクトをいじるのは面倒そう
* XML API と同じインターフェイスで扱えると何かと便利そう
* Ruby での標準 XML API は REXML っぽい

という事で、REXML オブジェクト群を拡張して HTML 用の
メソッドを追加するというアプローチもあるかなぁ、と。
DOM Core と DOM HTML の関係のような感じですね。
XPath が使えたりと、オブジェクトをいじくるのは楽そうです。

ただ、REXML 自体がそう単純なライブラリというわけでも
ありませんから、どうしても軽量である事が重要といった
要求が強いのであれば、選択肢にはならないかもしれません。
また、実装モデルが従来のものと大きく変わってしまうので、
再実装の手間も大きいという問題もありますね。

ともかく雰囲気を見てみるため、例に挙げられていたくらいの
HTML 文書を生成できるものをでっちあげてみたりしていました。
ほんとに階層構造を作るだけでして、cgi.rb にあるような
便利なメソッドは一切用意していません。
# そのわりに、コードが長いような --;

》> ところで、かっこの閉じ忘れをRubyがチェックしてくれるのなら、ついでに子要
》> 素の制限(<body>要素内にインライン要素は配置できない、等)も(できればコ
》> ンパイル時に)チェックしてほしい、と言うのはちょっと酷でしょうか?これが

》これは私も思っていました。こんなのは面白いかなあ、と。
》
》html.p() do |html|
》  html.head(){}    # NoMethodError
》end

ついでに、これもできるようにしてみたりしてみました。
チェックは文書要素の階層構造だけで、属性にまではしていません。
HTML 4.01 Strict DTD から、一通りの要素型の階層構造を定義して
しまいましたが、そこを簡略化したものを添付させていただきます。
とりあえず動くという程度で、まだまだ実用には程遠いですし、
コードもお世辞にもきれいとはいえないので恥ずかしいですが ^^;
add とか << とかも、見た目がすっきりするので使いたかったけれど、
REXML で定義済みで、その仕様の変更が必要になりそうなので諦めました。
テキスト追加の add_text は REXML のそれをそのまま使っています。
面白いところはないと思いますが、おかしなところなどは
たくさん ^^; あると思いますので、ご指摘いただければ幸いです。

えぇと。うちの動作確認環境は次の通り。
ruby 1.6.4 (2001-06-04) [i386-os2_emx]
REXML 2.1.3

# REXML を使う上での問題点は、文字列が UTF-8 か ASCII である事を
# 前提に造られている事ですね ...って、このコード、大丈夫かしら ^^;?

それでは、今後ともよろしくお願い致します ^^=

^--- testhtml.rb
#! ruby -Ks

require 'html'
include HTML

## おためし
encoding = 'Shift_JIS'
doc = HTML::Html4Strict.new( encoding )
doc.html do |html|
  html.head() do |h|
    h.meta( 'http-equiv' => 'Content-Type',
            'content'    => 'text/html;charset=%s' % encoding )
    h.title( 'タイトル' )  ## {←内容テキスト,↑属性}だけを指定
#   h.h1( 'えらー' )       ## 未定義
  end
  html.body do |b|
    b.h1().em( '見出し' )  ## 内容が単一要素ならこんな略記もできる
    b.p( '文章ですよぉ' )  ## 実は b.p{ |p| p.add_text( '...' ) } の略記
    b.form do |f|          ## ↓構造が複雑な時、テキストの指定が面倒かも
      f.add_text( 'コメント: ' )
      f.textarea( { 'name' => 'field_name' }, '何か書いてね' )
      f.br()               ## ↑属性と内容テキストの同時指定
      f.button( 'type' => 'submit' )
    end
    b.br()
    ## ↓REXML API を直接使って標準的でない構造も作り込める
    ##   いかにも非標準という感じのコードになる
    r = b.add_element( 'ruby' )
    r.add_element( 'rb' ).add_text( 'ルビ' )
    r.add_element( 'rt' ).add_text( 'るび' )
    b.add_text( 'とか振ってみる' )
  end
end
puts doc
$--- testhtml.rb

^--- html/html.rb
#! ruby -Ks

require 'rexml/document'
require 'rexml/element'
require 'jcode'

module HTML
module NodeHelper
  ## REXML::Document.add_element をブロック付きで呼べるようオーバーライド
  def add_element( elem = nil, attr = nil )
    result = super( elem, attr )
    yield( self ) if( block_given? )
    result
  end
  ## elemtype クラスの文書要素を自分の子に追加
  def add_child_element( elemtype, attr = nil, &content )
    e = elemtype.new( self, @context, &content )
    add_element( e, attr )
  end
end

## Element と Document にだけ、とりあえずな定義をしてみる
class Element  < REXML::Element
  include NodeHelper
end
class Document < REXML::Document
  include NodeHelper
  def self.html_param_entity()
    @html_param_entity ||= Hash.new( [] )
  end
  def self.define_param_entity( name, *content_model )
    name = name.id2name()  if( name.instance_of? Symbol )
    html_param_entity()[ name ] += content_model
  end
  def self.expand_content_model( *content_model )
    result = []
    content_model.each do |c|
      c = c.id2name()  if( c.instance_of? Symbol )
      entity = html_param_entity()
      if( entity.key? c )
        result += expand_content_model( *entity[ c ] )
      else
        result << c
      end
    end
    result
  end
  ## 文書要素型クラスの定義
  def self.define_element_type( name, *content_model )
    name = name.id2name if( name.instance_of? Symbol )
    ## 子要素追加メソッドの定義
    content_model = expand_content_model( *content_model )
    content_model = content_model.collect{ |cont|
      cont = cont.id2name if( cont.instance_of? Symbol )
      <<-EOS
        def #{cont}( attr = nil, text = nil, &content )
          text, attr = attr, nil  if( attr.instance_of? String )
          e = add_child_element( #{cont.capitalize}, attr, &content )
          e.add_text( text )
        end
      EOS
    }
    ## クラス定義
    module_eval <<-EOS
      class #{name.capitalize} < Element
        def initialize( parent = nil, ctxt = nil, &content )
          super( "#{name}", parent, ctxt )
          content.call( self ) if( content != nil )
        end
        #{content_model}
      end
    EOS
  end
  ## 空文書要素型クラスの定義
  def self.define_empty_element_type( name )
    name = name.id2name if( name.instance_of? Symbol )
    ## クラス定義
    module_eval <<-EOS
      class #{name.capitalize} < Element
        def initialize( parent = nil, ctxt = nil )
          super( "#{name}", parent, ctxt )
        end
        ## 終了タグを出力しないようにオーバーライド
        def write( writer, indent = -1 )
          indent( writer, indent )
          writer << '<' << expanded_name()
            @attributes.each_attribute do |attr|
              writer << " "
              attr.write( writer, indent )
            end unless @attributes.empty?
          writer << '>'
        end
      end
    EOS
  end
end

class Html4Strict < Document
  ## 文書要素型定義 (デモ用簡易版)
  define_param_entity :inline, :em, :b  ## <!ENTITY % inline "em|b">   相当
  define_element_type :em
  define_element_type :b
  define_element_type :p,  :inline      ## <!ELEMENT p - - (%inline;)> 相当
  define_element_type :h1, :inline      ##         (終了タグは常に出力 ^^;)
  define_empty_element_type :br         ## <!ELEMENT br - O EMPTY> 相当
  define_param_entity :formctrl, :button, :textarea
  define_empty_element_type :button
  define_element_type :textarea
  define_element_type :form, :formctrl, :br
  define_element_type :body, :h1, :p, :form, :br
  define_empty_element_type :meta
  define_element_type :title
  define_element_type :head, :meta, :title
  define_element_type :html, :head, :body

  attr_accessor :html_encoding
  def initialize( encoding = 'iso-8859-1' )
    super()
    @html_encoding = encoding
    self << REXML::DocType.new( 'html', '"-//W3C//DTD HTML 4.01//EN"'  \
                         + ' "http://www.w3.org/TR/html4/strict.dtd"' )
  end
  def html( attr = nil, &content )
    add_child_element( Html, attr, &content )
    self
  end
end

end ## module HTML
$--- html.rb

In This Thread