[#34988] BigFloat の to_i メソッドについて — Sako Hiroshi <sakoh@...2.so-net.ne.jp>
[#34989] mailing list archive? — maili31s@... (SugHimsi == SUGIHARA Hiroshi)
すぎむし。
[#34991] a = 4 ; p((a < 3) or (a > 5)) — Take_tk <ggb03124@...>
次のものがエラーになるのは何故なんでしょうか?
新井です。
たけ(tk)です。
まつもと ゆきひろです
newです.
[#35005] FILE_READPTR — Daisuke Aoki <dai@...>
青木@横浜です。
[#35028] win32.c 中の my* 関数について — 小西 弘将 <konishih@...6.so-net.ne.jp>
小西 弘将です。
なかだです。
小西 弘将です。
小西 弘将です。
こんにちは、なかむら(う)です。
なかだです。
小西 弘将です。
なかだです。
小西 弘将です。
小西 弘将です。
なかだです。
小西 弘将です。
なかだです。
[#35052] ruby_lib/html/ — Wakou Aoyama <wakou@...>
青山です。
まつもと ゆきひろです
にょにょると申します。(ここハンドル投稿ダメなのでしょうか?ダメなら本
青山です。
にょにょるです。オンラインではずっとこれを使っているので、これでいきま
青山です。
はじめまして。Siena. と申します。
青山です。
Siena.%なんだか毎度長いなぁ --; です。
[#35054] 「 Ruby/GTK プログラミング入門」 — Noritsugu Nakamura <nnakamur@...>
なかだです。
むとうです。
[#35058] Y Combinator — sinara@...
"Y Combinator" とは何かというと
続いて、ちょっと数学っぽい解釈をします。先の
At Sun, 12 May 2002 13:59:51 +0900,
At Sun, 12 May 2002 16:37:27 +0900,
[#35081] ISO 8601 と Time#wday — Take_tk <ggb03124@...>
Delphi の日付時刻ルーチンを Ruby にポートしようと思っているのですが、次
[#35087] Re: Y Combinator — 正木 功 <GEC01122@...>
正木です。
[#35102] ANNOUNCE: REXML のドキュメントの和訳を公開しました。 — Kouhei Sutou (須藤功平) <kou@...>
はじめまして、須藤です。
なひです。
須藤です。
なひです。
須藤です。
なかだです。
高橋征義です。
なひです。
なひです。
まつもと ゆきひろです
須藤です。
なひです。
Siena. です。
なひです。
[#35109] DOS プロンプトからリダイレクションつきの system — TOYOFUKU Chikanobu <toyofuku@...>
豊福です。
[#35113] Re: Marshallers summary — "NAKAMURA, Hiroshi" <nakahiro@...>
なかひろです。
[#35134] 朝、トーストを食べていると不意に — Shin-ichiro HARA <sinara@...>
「来年から Perl が高校の授業で必修になるってホント?」って
[#35207] tar.gz の展開 — "NAKANO Kouichi" <knuckle@...8.dion.ne.jp>
はじめまして、なかのともうします。
[#35215] ruby-shell-mode — "Shirai,Kaoru" <shirai@...1jp.com>
白井です。
[#35252] ((Time.now)..(Time.now+60)) — Take_tk <ggb03124@...>
たけ(tk)です。
[#35253] ((1.2)..(3.4)).to_a — Take_tk <ggb03124@...>
1.2..3.4 を配列にすると、その範囲に属しない整数「1」が含まれるという点に
まつもと ゆきひろです
たけ(tk)です。
Siena. です。
まつもと ゆきひろです
Siena. です。
青山です。
[#35264] HTML generation library — Wakou Aoyama <wakou@...>
青山です。
[ruby-list:35174] Re: ANNOUNCE: REXML のドキュメント
Siena. です。
▼ [ruby-list:35170] < 須藤功平 さん
》> readline して(*)、encoding を見て、rewind して、readlines して、
》> 必要なら $_[0] の XML 宣言を 'utf-8' に書き換えて、join して、
》> uconv (or iconv) して、StringIO でラップして、parse_stream する、と。
》こんな風にREXMLに渡す前にコード変換するラッパークラス
》(REXML::JDocument)がREXMLに取り込まれたら、日本語処理の問題は解決です
》か?
むりやりごまかしているので、取り込まれるのは危険ですねぇ。
それと、Iconv が使いこなせなくて、NKF と Uconv のキメラな
{ shift_jis, euc-jp, iso-2022-jp, utf-8, utf-16, ucs-4 } の
相互変換ライブラリを使ってます。汚いですし、効率も悪いですし。
日本語以外の XML 文書を扱おうとすると、むしろ不幸になります ^^;
》もしよければ、Sienaさんが使ってらっしゃるラッパークラスを見せて頂けま
》せんか?
では、お目汚しをば。
Wrapper はモジュールでなくクラスにして、REXML::Document と
同じインターフェイスを持つようにするのが筋とは思いますが、
何分、やっつけ仕事で作ったまま使い回してますので ^^;
# って、ラッパー *クラス* じゃないじゃん >> Siena.
# ... あとで作り直そう ^^;
^--- xmloader.rb
#! ruby -Ks
## REXML_Wrapper モジュール
## update 2001/??/?? v.0.1 : 初
module Siena
CONF_USE_ICONV = false ## Iconv を正しく使えるようになってから ;_;
end
if( Siena::CONF_USE_ICONV )
require 'iconv'
else
require 'codeconv'
end
require 'rexml/document'
require 'rexml/xmldecl'
require 'stringio'
module Siena
module REXML_Wrapper
DEFAULT_ENCODING = 'utf-8'
def self.xmldecl( path, close_file = true )
file = ver = enc = nil
begin
file = File.open( path )
line = file.readline()
pat = line.scan( /^<\?\s*xml(\s+version=["'](\d+\.\d+)["'])?(\s+encoding=["']([^"']+)["'])?\s*\?>\s*$/ )[ 0 ]
ver = pat[ 1 ] || '1.0'
enc = pat[ 3 ] ## nil if encoding is not specified
rescue
raise
ensure
if( file != nil )
if( close_file )
file.close()
file = nil
else
file.rewind()
end
end
end
return ver, enc, file
end
def self.load( path )
doc = file = nil
begin
ver, enc, file = xmldecl( path, false )
doc = file.readlines()
if( enc != nil )
pat = /encoding=("[^"]*"|'[^']*')/
doc[ 0 ] = doc[ 0 ].sub( pat, 'encoding="' + DEFAULT_ENCODING + '"' )
end
if( CONF_USE_ICONV )
doc = Iconv.iconv( DEFAULT_ENCODING, enc, doc.join() )
## 次の Document.new( doc ) でパースエラー (--;? @ REXML v.2.3.3
## |T:/lib/ruby/site_ruby/1.6/rexml/document.rb:224:
## |in `parse': undefined method `empty?' for nil (REXML::ParseException)
else
doc = CodeConv.conv( doc.join(), enc, DEFAULT_ENCODING )
end
raise if( doc == nil )
doc = REXML::Document.new( doc )
rescue
raise
ensure
file.close() if( file != nil )
end
return doc
end
def self.save( doc, file, enc = nil )
if( ( enc != nil ) \
&& ( doc.xml_decl.encoding.downcase() != enc.downcase() ) )
result = ''
## XML 宣言の encoding を整合させるため、一時的にすり替え
## write 中に XMLDecl#encoding を参照しない事を前提とする
## REXML の仕様変更に注意
doc_enc = doc.xml_decl.encoding
doc.xml_decl.encoding = enc
doc.write( StringIO.new( result ) )
if( CONF_USE_ICONV )
result = Iconv.iconv( enc, doc_enc, result )
else
result = CodeConv.conv( result, doc_enc, enc )
end
file.puts( result )
doc.xml_decl.encoding = doc_enc
else
doc.write( file )
end
end
end
end
if( $0 == __FILE__ )
include Siena
doc = REXML_Wrapper::load( ARGV[ 0 ] )
REXML_Wrapper::save( doc, File.new( 'testout.utf8.xml', 'w' ), 'utf-8' )
REXML_Wrapper::save( doc, File.new( 'testout.sjis.xml', 'w' ), 'shift_jis' )
REXML_Wrapper::save( doc, File.new( 'testout.euc.xml', 'w' ), 'euc-jp' )
REXML_Wrapper::save( doc, File.new( 'testout.jis.xml', 'w' ), 'iso-2022-jp' )
end
$---
^--- codeconv.rb # 中田さんの codeconv.rb とファイル名がかぶってます ^^;
#! ruby -Ks
require 'uconv'
require 'nkf'
## CodeConv モジュール
## update 2001/??/?? v.0.1 : 初
module Siena
class CodeConv
extend Uconv
extend NKF
@@ENCODING_ID = { 'euc-jp' => 0, 'shift_jis' => 1, 'iso-2022-jp' => 2,
'utf-8' => 3, 'utf-16' => 4, 'ucs-4' => 5 }
@@ENCODING_MAP = [
[ 'isomorph', 'nkf "-Esm0",', 'nkf "-Ejm0",',
'euctou8', 'euctou16', 'u8tou4 euctou8' ],
[ 'nkf "-Sem0",', 'isomorph', 'nkf "-Sjm0",',
'sjistou8', 'sjistou16', 'u8tou4 sjistou8' ],
[ 'nkf "-Jem0",', 'nkf "-Jsm0",', 'isomorph',
'sjistou8 nkf "-Jsm0",', 'sjistou16 nkf "-Jsm0",',
'u8tou4 sjistou8 nkf "-Jsm0",' ],
[ 'u8toeuc', 'u8tosjis', 'nkf "-Sjm0", u8tosjis',
'isomorph', 'u8tou16', 'u8tou4' ],
[ 'u16toeuc', 'u16tosjis', 'nkf "-Sjm0", u16tosjis',
'u16tou8', 'u16swap', 'u16tou4' ],
[ 'u8toeuc u4tou8', 'u8tosjis u4tou8', 'nkf "-Sjm0", u8tosjis u4tou8',
'u4tou8', 'u4tou16', 'u4swap' ]
]
def self.isomorph( str )
str
end
def self.encid( enc )
@@ENCODING_ID[ enc.downcase() ]
end
def self.conv( str, inenc, outenc )
eval( @@ENCODING_MAP[ encid( inenc ) ][ encid( outenc ) ] + ' str' )
end
attr_accessor :source_encoding, :result_encoding
def initialize( inenc, outenc )
@source_encoding = inenc
@result_encoding = outenc
end
def conv( str, inenc = @source_encoding, outenc = @result_encoding )
CodeConv.conv( str, inenc, outenc )
end
end
end
if( $0 == __FILE__ )
include Siena
def test_codeconv( text, enc )
puts( '[ => ' + enc + ' ] ' + text )
[ 'shift_jis', 'euc-jp', 'iso-2022-jp',
'utf-8', 'utf-16', 'ucs-4' ].each do |src|
puts( CodeConv.conv( text, enc, src ) )
end
puts( '' )
end
msg = ARGV[ 0 ] || 'あれこれ書いてみようかな'
src = 'shift_jis'; msg = NKF.nkf( '-s', msg )
enc = 'shift_jis'; test_codeconv( msg, enc )
enc = 'euc-jp'; test_codeconv( NKF.nkf( '-Se', msg ), enc )
enc = 'iso-2022-jp'; test_codeconv( NKF.nkf( '-Sj', msg ), enc )
src = 'utf-8'; msg = CodeConv.conv( msg, 'shift_jis', 'utf-8' )
enc = 'utf-8'; test_codeconv( msg, enc )
enc = 'utf-16'; test_codeconv( CodeConv.conv( msg, src, enc ), enc )
enc = 'ucs-4'; test_codeconv( CodeConv.conv( msg, src, enc ), enc )
end
$---
---
Siena. <mailto:siena@cr.chiba-u.ac.jp>