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:
parent
3079dcab4a
commit
e921ea2d78
7 changed files with 2019 additions and 1967 deletions
15
ChangeLog
15
ChangeLog
|
@ -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
|
||||||
|
|
2761
ext/syck/implicit.c
2761
ext/syck/implicit.c
File diff suppressed because it is too large
Load diff
1083
ext/syck/token.c
1083
ext/syck/token.c
File diff suppressed because it is too large
Load diff
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue