[#3266] 1.8.2 preview bug? — Chad Fowler <chad@...>
I haven't had time to really investigate this, but I've boiled it down
6 messages
2004/08/10
[#3269] YAML problem, possibly? — Hugh Sasse Staff Elec Eng <hgs@...>
I obtained a largish lump of shallow XML, succcessfully read it with
6 messages
2004/08/10
[#3292] dir.c --- Dir.chdir error handling — Johan Holmberg <holmberg@...>
55 messages
2004/08/21
[#3350] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/06
Hi, Johan,
[#3351] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/06
Hello.
[#3352] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/06
Hi,
[#3353] Re: [PATCH] dir.c --- Dir.chdir error handling
— nobu.nokada@...
2004/09/06
Hi,
[#3354] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/06
Hi,
[#3356] Re: [PATCH] dir.c --- Dir.chdir error handling
— nobu.nokada@...
2004/09/07
Hi,
[#3369] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/09
Sorry for late posting. Typhoon striked me.....
[#3372] Re: [PATCH] dir.c --- Dir.chdir error handling
— nobu.nokada@...
2004/09/10
Hi,
[#3374] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/10
[#3376] Re: [PATCH] dir.c --- Dir.chdir error handling
— nobu.nokada@...
2004/09/10
Hi,
[#3378] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/11
nobu.nokada@softhome.net wrote:
[#3383] Re: [PATCH] dir.c --- Dir.chdir error handling
— nobu.nokada@...
2004/09/12
Hi,
[#3384] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/13
[#3385] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/13
Hi,
[#3386] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/13
[#3387] Re: [PATCH] dir.c --- Dir.chdir error handling
— ts <decoux@...>
2004/09/13
>>>>> "H" == H Yamamoto <ocean@m2.ccsnet.ne.jp> writes:
[#3392] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/14
[#3393] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/14
Hi,
[#3394] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/14
[#3395] Re: [PATCH] dir.c --- Dir.chdir error handling
— ts <decoux@...>
2004/09/14
>>>>> "H" == H Yamamoto <ocean@m2.ccsnet.ne.jp> writes:
[#3399] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/15
[#3403] Re: [PATCH] dir.c --- Dir.chdir error handling
— ts <decoux@...>
2004/09/15
>>>>> "H" == H Yamamoto <ocean@m2.ccsnet.ne.jp> writes:
[#3404] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/15
Hi,
[#3405] Re: [PATCH] dir.c --- Dir.chdir error handling
— ts <decoux@...>
2004/09/15
>>>>> "Y" == Yukihiro Matsumoto <matz@ruby-lang.org> writes:
[#3409] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/16
Hi,
[#3416] Re: [PATCH] dir.c --- Dir.chdir error handling
— ts <decoux@...>
2004/09/16
>>>>> "Y" == Yukihiro Matsumoto <matz@ruby-lang.org> writes:
[#3435] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/17
Hi,
[#3436] Re: [PATCH] dir.c --- Dir.chdir error handling
— ts <decoux@...>
2004/09/17
>>>>> "Y" == Yukihiro Matsumoto <matz@ruby-lang.org> writes:
[#3438] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/17
Hi,
[#3441] European Rubykonf 2004
— Mathieu Bouchard <matju@...>
2004/09/17
[#3402] Re: [PATCH] dir.c --- Dir.chdir error handling
— Yukihiro Matsumoto <matz@...>
2004/09/15
Hi,
[#3410] Re: [PATCH] dir.c --- Dir.chdir error handling
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/09/16
[#3293] 1.8.1 gsub/CGI behavior I can't explain — "David A. Black" <dblack@...>
Hi --
8 messages
2004/08/22
[#3301] Is Ruby 1.8.2 100% Backward compatible — Lothar Scholz <mailinglists@...>
Hello,
6 messages
2004/08/25
[#3345] Re: Is Ruby 1.8.2 100% Backward compatible
— Johan Holmberg <holmberg@...>
2004/09/03
[#3303] URGENT: what's the bug reporting system now? — Dave Thomas <dave@...>
Hello!
14 messages
2004/08/25
[#3304] Re: URGENT: what's the bug reporting system now?
— matz@... (Yukihiro Matsumoto)
2004/08/25
Hi,
[#3306] Re: URGENT: what's the bug reporting system now?
— Daniel Berger <djberg96@...>
2004/08/26
[#3315] Pretty Printing more widely — Hugh Sasse Staff Elec Eng <hgs@...>
May I propose the following patch (done against the 1.9.0 nightly
8 messages
2004/08/26
[#3331] "destructiveness" of delete — "David A. Black" <dblack@...>
Hi --
6 messages
2004/08/31
Re: YAML problem, possibly?
From:
why the lucky stiff <ruby-core@...>
Date:
2004-08-10 17:43:26 UTC
List:
ruby-core #3274
Hugh Sasse Staff Elec Eng wrote:
> I obtained a largish lump of shallow XML, succcessfully read it with
> REXML, and then tried to YAML dump it.
...
> E:\Downloads\AnnaAIML-.7.0\anna_brain>xml_to_yaml.rb
> <aiml> ... </>
> c:/ruby/lib/ruby/1.8/yaml/rubytypes.rb:287:in `is_complex_yaml?':
> stack level t
> o deep (SystemStackError)
With a complex tree like a REXML::Document, dumping to YAML can be
pretty complicated. There's definitely a problem here that needs to be
solved in the emitter. The emitter is due for a rewrite and I've just
finished a batch of fixes to the parser, so I think I have time to work
on this.
In the short term, however, I really don't think you want YAML documents
which contain REXML::Document dumps. If you really want to serialize
the REXML::Document, I'd strongly suggest that you use Marshal. You
won't end up with a readable structure in YAML, so there's no point
using it.
--- however, ---
If you want to filter the AIML documents into a readable YAML format, I
have a script that can help you. I've used this script to convert XML
formats into YAML and just haven't found much of an inclination to turn
it into a serious project. But it works and I was able to convert all
of the valid XML documents in the anna_brain directory into readable YAML.
The attached script uses a basic schema diagram, written in YAML, to
perform the conversion. These AIML files are kinda sketchy, some aren't
valid, some don't follow a very good schema. But here's the barebones:
--- %YAML:1.0
aiml:
xmlns: skip
version: skip
category*:
pattern:
template: html
that: ~
think: ~
topic*:
Place the attached script just above the anna_brain directory and run:
ruby aiml2yaml.rb. It will create 1.yaml, 2.yaml, 3.yaml, etc.
side-by-side with the AIML files.
The schema above is contained in the aiml2yaml.rb file. The schema uses
a bit of notation to help the xml2yaml method translate the file. Each
mapping key represents an element tag. Each key which ends with '*'
allows multiple elements with that tag. (Translating them into an
array.) When a mapping key has a value of '~', then that element is
optional. The 'html' value I use to indicate that the content of a node
should be preserved as it was encoded in the XML. The 'skip' value
ignores those nodes completely.
Since D.aiml, test.aiml, and topics.aiml aren't parseable, I can't test
those files, but the rest convert fine. Alright, well, that's it. Enjoy.
_why
Attachments (1)
aiml2yaml.rb
(2.87 KB, text/x-ruby)
require "date"
require "rexml/document"; include REXML
require "yaml"
anna_schema = YAML::load <<EOY
--- %YAML:1.0
aiml:
xmlns: skip
version: skip
category*:
pattern:
template: html
that: ~
think: ~
topic*:
EOY
class SchemaError < Exception; end
class AnnaDictionary
attr_accessor :categories, :topics
def to_yaml_type
"!annabot.sf.net,2004/dictionary"
end
end
YAML.add_domain_type( 'annabot.sf.net,2004', 'dictionary' ) do |type, val|
YAML.object_maker( AnnaDictionary, {'categories' => val['category'], 'topics' => val['topics']} )
end
def xmltext2yamltext( content, instruct )
if instruct == 'timestamp'
content = YAML::load( "--- #{content}" )
elsif instruct == 'int'
content = content.to_i
else
if content =~ /^(\t+)/
tabs = $1
content.gsub!( /^#{ tabs }/, '' )
end
content.strip!
content.gsub!( /\t/, ' ' )
end
content
end
def xml2yaml( doc, schema, path = '/' )
yaml = {}
ele_log = {}
doc.elements.each do |ele|
ele_name = ele.name
unless schema.has_key? ele_name
ele_name += "*"
unless schema.has_key? ele_name
raise SchemaError, "No schema at #{path} for element `#{ele.name}'"
end
end
ele_schema = schema[ele_name]
# Elements with multiple entries
ele_idx = 0
check_mult = ele_name.match /(\w+)\*$/
if check_mult
ele_name = check_mult[1]
if ele_log.has_key? ele_name
ele_log[ele_name] += 1
else
ele_log[ele_name] = 0
end
ele_idx = ele_log[ele_name]
end
ele_hash = {}
content = nil
if [Hash, Array].include? ele_schema.class
content = xml2yaml( ele, ele_schema, "#{path}#{ele.name}/" )
else
content = ele.children.collect do |child|
child.to_s
end.join( '' )
content = xmltext2yamltext( content, ele_schema )
end
unless ele_schema == 'skip'
ele_hash = content
end
if [Hash, Array].include? ele_schema.class
ele.attributes.each do |name, val|
unless ele_schema.has_key? name
raise SchemaError, "No schema at #{path} for attribute `#{ele.name}.#{name}'"
end
unless [Hash, Array].include? ele_hash.class
raise SchemaError, "String at #{path}: #{ele_hash.inspect}, cannot add attribute `#{ele.name}.#{name}'"
end
next if ele_schema[name] == 'skip'
ele_hash[name] = xmltext2yamltext( val, ele_schema[name] )
end
end
if check_mult
yaml[ele_name] ||= []
yaml[ele_name][ele_idx] = ele_hash
else
yaml[ele_name] = ele_hash
end
end
yaml
end
if __FILE__ == $0
Dir['anna_brain/*.aiml'].each do |file|
puts "*** Processing #{ file }"
doc = Document.new File.new( file )
ymap = xml2yaml( doc.root, anna_schema['aiml'] )
yanna = YAML::object_maker( AnnaDictionary, ymap )
File.open( file.gsub( /aiml/, 'yaml' ), 'w' ) do |yout|
yout.puts yanna.to_yaml( :UseBlock => true )
end
end
end