1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/syck/token.c: preserve newlines prepended to a block.

* ext/syck/implicit.c (syck_match_implicit): added !merge and !default.

* lib/yaml/constants.rb: remove '\z' escape.

* lib/yaml/emitter.rb: ensure reset of @seq_map shortcut flag.

* lib/yaml/encoding.rb: remove Unicode translation methods.

* lib/yaml/rubytypes.rb: improved round-tripping of Strings.
  [ruby-core:1134]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
why 2003-06-10 14:15:27 +00:00
parent 3079dcab4a
commit e921ea2d78
7 changed files with 2019 additions and 1967 deletions

View file

@ -1,3 +1,18 @@
Tue Jun 10 14:26:30 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
* ext/syck/token.c: preserve newlines prepended to a block.
* ext/syck/implicit.c (syck_match_implicit): added !merge and !default.
* lib/yaml/constants.rb: remove '\z' escape.
* lib/yaml/emitter.rb: ensure reset of @seq_map shortcut flag.
* lib/yaml/encoding.rb: remove Unicode translation methods.
* lib/yaml/rubytypes.rb: improved round-tripping of Strings.
[ruby-core:1134]
Tue Jun 10 01:07:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org> Tue Jun 10 01:07:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* lib/irb.rb (IRB::Irb::eval_input): warn and exit if $SAFE >=3 * lib/irb.rb (IRB::Irb::eval_input): warn and exit if $SAFE >=3

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -15,19 +15,19 @@ module YAML
WORD_CHAR = 'A-Za-z0-9' WORD_CHAR = 'A-Za-z0-9'
PRINTABLE_CHAR = '-_A-Za-z0-9!?/()$\'". ' PRINTABLE_CHAR = '-_A-Za-z0-9!?/()$\'". '
NOT_PLAIN_CHAR = '\x7f\x0-\x1f\x80-\x9f' NOT_PLAIN_CHAR = '\x7f\x0-\x1f\x80-\x9f'
ESCAPE_CHAR = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f]' ESCAPE_CHAR = '[\\x00-\\x09\\x0b-\\x1f]'
INDICATOR_CHAR = '*&!|\\\\^@%{}[]=' INDICATOR_CHAR = '*&!|\\\\^@%{}[]='
SPACE_INDICATORS = '-#:,?' SPACE_INDICATORS = '-#:,?'
RESTRICTED_INDICATORS = '#:,}]' RESTRICTED_INDICATORS = '#:,}]'
DNS_COMP_RE = "\\w(?:[-\\w]*\\w)?" DNS_COMP_RE = "\\w(?:[-\\w]*\\w)?"
DNS_NAME_RE = "(?:(?:#{DNS_COMP_RE}\\.)+#{DNS_COMP_RE}|#{DNS_COMP_RE})" DNS_NAME_RE = "(?:(?:#{DNS_COMP_RE}\\.)+#{DNS_COMP_RE}|#{DNS_COMP_RE})"
ESCAPES = %w{\z \x01 \x02 \x03 \x04 \x05 \x06 \a ESCAPES = %w{\x00 \x01 \x02 \x03 \x04 \x05 \x06 \a
\x08 \t \n \v \f \r \x0e \x0f \x08 \t \n \v \f \r \x0e \x0f
\x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17
\x18 \x19 \x1a \e \x1c \x1d \x1e \x1f \x18 \x19 \x1a \e \x1c \x1d \x1e \x1f
} }
UNESCAPES = { UNESCAPES = {
'z' => "\x00", 'a' => "\x07", 'b' => "\x08", 't' => "\x09", 'a' => "\x07", 'b' => "\x08", 't' => "\x09",
'n' => "\x0a", 'v' => "\x0b", 'f' => "\x0c", 'n' => "\x0a", 'v' => "\x0b", 'f' => "\x0c",
'r' => "\x0d", 'e' => "\x1b", '\\' => '\\', 'r' => "\x0d", 'e' => "\x1b", '\\' => '\\',
} }
@ -41,11 +41,5 @@ module YAML
:WidthType => 'absolute', :BestWidth => 80, :WidthType => 'absolute', :BestWidth => 80,
:UseBlock => false, :UseFold => false, :Encoding => :None :UseBlock => false, :UseFold => false, :Encoding => :None
} }
TRANSFER_DOMAINS = {
'yaml.org,2002' => {},
'ruby.yaml.org,2002' => {}
}
PRIVATE_TYPES = {}
IMPLICIT_TYPES = [ 'null', 'bool', 'time', 'int', 'float' ]
end end

View file

@ -60,6 +60,7 @@ module YAML
# Emit plain, normal flowing text # Emit plain, normal flowing text
# #
def node_text( value, block = '>' ) def node_text( value, block = '>' )
@seq_map = false
valx = value.dup valx = value.dup
if @options[:UseBlock] if @options[:UseBlock]
block = '|' block = '|'
@ -89,6 +90,7 @@ module YAML
# Emit a simple, unqouted string # Emit a simple, unqouted string
# #
def simple( value ) def simple( value )
@seq_map = false
self << value.to_s self << value.to_s
end end
@ -168,6 +170,7 @@ module YAML
# #
if val.length.zero? if val.length.zero?
self << "{}" self << "{}"
@seq_map = false
else else
if @buffer.length == 1 and @options[:UseHeader] == false and type.length.zero? if @buffer.length == 1 and @options[:UseHeader] == false and type.length.zero?
@headless = 1 @headless = 1
@ -213,6 +216,7 @@ module YAML
# Quick sequence # Quick sequence
# #
def seq( type, &e ) def seq( type, &e )
@seq_map = false
val = Sequence.new val = Sequence.new
e.call( val ) e.call( val )
self << "#{type} " if type.length.nonzero? self << "#{type} " if type.length.nonzero?
@ -282,7 +286,7 @@ module YAML
@buffer.push( "" ) @buffer.push( "" )
#p [ self.id, @level, :END ] #p [ self.id, @level, :END ]
if @level < 0 if @level < 0
YAML.internal_to_utf( header + @buffer.to_s[@headless..-1], @options[:Encoding] ) header + @buffer.to_s[@headless..-1]
end end
end end
end end

View file

@ -4,100 +4,6 @@
module YAML module YAML
#
# Encodings ( $-K to ICONV )
#
CHARSETS = {
'NONE' => 'LATIN1',
'ASCII' => 'US-ASCII',
'UTF-8' => 'UTF-8',
'EUC' => 'EUC-JP',
'SJIS' => 'SHIFT-JIS'
}
#
# YAML documents can be in UTF-8, UTF-16 or UTF-32
# So let's read and write in Unicode
#
@@unicode = false
begin
require 'iconv'
DEFAULTS[:Encoding] = :Utf8
rescue LoadError
end
def YAML.unicode; @@unicode; end
def YAML.unicode=( bool ); @@unicode = bool; end
#
# Unicode conversion
#
def YAML.utf_to_internal( str, from_enc )
return unless str
to_enc = CHARSETS[$-K]
case from_enc
when :Utf32
Iconv.iconv( to_enc, 'UTF-32', str )[0]
when :Utf16
Iconv.iconv( to_enc, 'UTF-16', str )[0]
when :Utf8
Iconv.iconv( to_enc, 'UTF-8', str )[0]
when :None
str
else
raise YAML::Error, ERROR_UNSUPPORTED_ENCODING % from_enc.inspect
end
end
def YAML.internal_to_utf( str, to_enc )
return unless str
from_enc = CHARSETS[$-K]
case to_enc
when :Utf32
Iconv.iconv( 'UTF-32', from_enc, str )[0]
when :Utf16
Iconv.iconv( 'UTF-16', from_enc, str )[0]
when :Utf8
Iconv.iconv( 'UTF-8', from_enc, str )[0]
when :None
str
else
raise YAML::Error, ERROR_UNSUPPORTED_ENCODING % to_enc.inspect
end
end
def YAML.sniff_encoding( str )
unless YAML::unicode
:None
else
case str
when /^\x00\x00\xFE\xFF/ # UTF-32
:Utf32
when /^\xFE\xFF/ # UTF-32BE
:Utf16
else
:Utf8
end
end
end
def YAML.enc_separator( enc )
case enc
when :Utf32
"\000\000\000\n"
when :Utf16
"\000\n"
when :Utf8
"\n"
when :None
"\n"
else
raise YAML::Error, ERROR_UNSUPPORTED_ENCODING % enc.inspect
end
end
# #
# Escape the string, condensing common escapes # Escape the string, condensing common escapes
# #
@ -109,7 +15,7 @@ module YAML
# Unescape the condenses escapes # Unescape the condenses escapes
# #
def YAML.unescape( value ) def YAML.unescape( value )
value.gsub( /\\(?:([nevbr\\fartz])|0?x([0-9a-fA-F]{2})|u([0-9a-fA-F]{4}))/ ) { |x| value.gsub( /\\(?:([nevfbart\\])|0?x([0-9a-fA-F]{2})|u([0-9a-fA-F]{4}))/ ) { |x|
if $3 if $3
["#$3".hex ].pack('U*') ["#$3".hex ].pack('U*')
elsif $2 elsif $2

View file

@ -295,20 +295,21 @@ class String
if complex if complex
if self.is_binary_data? if self.is_binary_data?
out.binary_base64( self ) out.binary_base64( self )
elsif self =~ /^ |#{YAML::ESCAPE_CHAR}| $/
complex = false
else else
out.node_text( self ) out.node_text( self )
end end
else end
if not complex
ostr = if out.options[:KeepValue] ostr = if out.options[:KeepValue]
self self
elsif empty? elsif empty?
"''" "''"
elsif self =~ /^[^#{YAML::WORD_CHAR}]|#{YAML::ESCAPE_CHAR}|[#{YAML::SPACE_INDICATORS}]( |$)| $|\n|\'/
"\"#{YAML.escape( self )}\""
elsif YAML.detect_implicit( self ) != 'str' elsif YAML.detect_implicit( self ) != 'str'
"\"#{YAML.escape( self )}\"" "\"#{YAML.escape( self )}\""
elsif self =~ /#{YAML::ESCAPE_CHAR}|[#{YAML::SPACE_INDICATORS}] |\n|\'/
"\"#{YAML.escape( self )}\""
elsif self =~ /^[^#{YAML::WORD_CHAR}]/
"\"#{YAML.escape( self )}\""
else else
self self
end end