RbYAML 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/rbyaml.rb +14 -256
- data/lib/rbyaml.rb.~1.2.~ +383 -0
- data/lib/rbyaml/composer.rb +9 -11
- data/lib/rbyaml/{composer.rb.~1.2.~ → composer.rb.~1.3.~} +28 -25
- data/lib/rbyaml/constants.rb +95 -0
- data/lib/rbyaml/constructor.rb +180 -89
- data/lib/rbyaml/{constructor.rb.~1.2.~ → constructor.rb.~1.9.~} +137 -95
- data/lib/rbyaml/dumper.rb +12 -9
- data/lib/rbyaml/dumper.rb.~1.3.~ +36 -0
- data/lib/rbyaml/emitter.rb +14 -28
- data/lib/rbyaml/{emitter.rb.~1.2.~ → emitter.rb.~1.6.~} +22 -33
- data/lib/rbyaml/error.rb +4 -57
- data/lib/rbyaml/error.rb.~1.2.~ +75 -0
- data/lib/rbyaml/events.rb +8 -14
- data/lib/rbyaml/{events.rb.~1.2.~ → events.rb.~1.4.~} +29 -6
- data/lib/rbyaml/nodes.rb +5 -5
- data/lib/rbyaml/{nodes.rb.~1.2.~ → nodes.rb.~1.3.~} +13 -9
- data/lib/rbyaml/parser.rb +70 -108
- data/lib/rbyaml/parser.rb.~1.4.~ +632 -0
- data/lib/rbyaml/representer.rb +19 -157
- data/lib/rbyaml/representer.rb.old +317 -0
- data/lib/rbyaml/{representer.rb.~1.2.~ → representer.rb.~1.5.~} +60 -26
- data/lib/rbyaml/resolver.rb +6 -6
- data/lib/rbyaml/{resolver.rb.~1.1.~ → resolver.rb.~1.6.~} +20 -20
- data/lib/rbyaml/rubytypes.rb +391 -0
- data/lib/rbyaml/scanner.rb +123 -225
- data/lib/rbyaml/{scanner.rb.~1.2.~ → scanner.rb.~1.5.~} +466 -378
- data/lib/rbyaml/serializer.rb +9 -9
- data/lib/rbyaml/{serializer.rb.~1.2.~ → serializer.rb.~1.4.~} +19 -17
- data/lib/rbyaml/stream.rb +48 -0
- data/lib/rbyaml/tag.rb +72 -0
- data/lib/rbyaml/tokens.rb +22 -16
- data/lib/rbyaml/{tokens.rb.~1.2.~ → tokens.rb.~1.3.~} +44 -4
- data/lib/rbyaml/types.rb +146 -0
- data/lib/rbyaml/util.rb.~1.3.~ +38 -0
- data/lib/rbyaml/yaml.rb +22 -32
- data/lib/rbyaml/{yaml.rb.~1.2.~ → yaml.rb.~1.5.~} +17 -17
- data/test/load_one.rb +6 -0
- data/test/load_one_yaml.rb +6 -0
- data/test/output_events.rb +9 -0
- data/test/test_add_ctor.rb +51 -0
- data/test/test_add_ctor.rb.~1.1.~ +30 -0
- data/test/test_bm.rb +2 -2
- data/test/test_bm.rb.~1.1.~ +28 -0
- data/test/test_gems.rb +10 -0
- data/test/test_one.rb.~1.1.~ +5 -0
- data/test/test_one_syck.rb +5 -0
- data/test/test_rbyaml.rb +63 -32
- data/test/test_rbyaml.rb.~1.6.~ +59 -0
- data/test/{test_rbyaml.rb.~1.2.~ → test_rbyaml_old.rb} +13 -4
- data/test/test_time_events.rb +24 -0
- data/test/test_time_nodes.rb +24 -0
- data/test/test_time_tokens.rb +24 -0
- data/test/yaml/gems_new.yml +147456 -0
- data/test/yaml/test1.rb +8 -0
- data/test/yaml/test10.rb +14 -0
- data/test/yaml/test11.rb +13 -0
- data/test/yaml/test12.rb +9 -0
- data/test/yaml/test13.rb +9 -0
- data/test/yaml/test14.rb +13 -0
- data/test/yaml/test15.rb +12 -0
- data/test/yaml/test16.rb +11 -0
- data/test/yaml/test16.rb.~1.1.~ +11 -0
- data/test/yaml/test17.rb +10 -0
- data/test/yaml/test18.rb +13 -0
- data/test/yaml/test19.rb +9 -0
- data/test/yaml/test19.yml +1 -1
- data/test/yaml/test2.rb +8 -0
- data/test/yaml/test20.rb +11 -0
- data/test/yaml/test20.rb.~1.1.~ +9 -0
- data/test/yaml/test20.yml +1 -1
- data/test/yaml/test3.rb +13 -0
- data/test/yaml/test4.rb +13 -0
- data/test/yaml/test5.rb +8 -0
- data/test/yaml/test6.rb +10 -0
- data/test/yaml/test7.rb +15 -0
- data/test/yaml/test8.rb +15 -0
- data/test/yaml/test9.rb +13 -0
- metadata +61 -16
- data/lib/rbyaml/dumper.rb.~1.2.~ +0 -43
- data/lib/rbyaml/parser.rb.~1.2.~ +0 -494
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rbyaml/emitter'
|
2
|
+
require 'rbyaml/serializer'
|
3
|
+
require 'rbyaml/representer'
|
4
|
+
require 'rbyaml/resolver'
|
5
|
+
|
6
|
+
module RbYAML
|
7
|
+
class CommonDumper
|
8
|
+
attr_accessor :emitter, :serializer, :representer, :resolver
|
9
|
+
def initialize(stream,default_style=nil,default_flow_style=nil,canonical=nil,indent=nil,width=nil,line_break=nil,explicit_start=nil,explicit_end=nil,version=nil,tags=nil,emitter=Emitter,serializer=Serializer,representer=Representer,resolver=Resolver)
|
10
|
+
super()
|
11
|
+
@emitter = emitter.new(stream,canonical,indent,width,line_break)
|
12
|
+
@resolver = resolver.new
|
13
|
+
@serializer = serializer.new(@emitter,@resolver,explicit_start,explicit_end,version,tags)
|
14
|
+
@representer = representer.new(@serializer,default_style,default_flow_style)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class BaseDumper < CommonDumper
|
19
|
+
attr_accessor
|
20
|
+
def initialize(stream,default_style=nil,default_flow_style=nil,canonical=nil,indent=nil,width=nil,line_break=nil,explicit_start=nil,explicit_end=nil,version=nil,tags=nil,emitter=Emitter,serializer=Serializer,representer=BaseRepresenter,resolver=BaseResolver)
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class SafeDumper < CommonDumper
|
26
|
+
def initialize(stream,default_style=nil,default_flow_style=nil,canonical=nil,indent=nil,width=nil,line_break=nil,explicit_start=nil,explicit_end=nil,version=nil,tags=nil,emitter=Emitter,serializer=Serializer,representer=SafeRepresenter,resolver=Resolver)
|
27
|
+
super
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Dumper < CommonDumper
|
32
|
+
def initialize(stream,default_style=nil,default_flow_style=nil,canonical=nil,indent=nil,width=nil,line_break=nil,explicit_start=nil,explicit_end=nil,version=nil,tags=nil,emitter=Emitter,serializer=Serializer,representer=Representer,resolver=Resolver)
|
33
|
+
super
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/rbyaml/emitter.rb
CHANGED
@@ -20,9 +20,10 @@ module RbYAML
|
|
20
20
|
"tag:yaml.org,2002:" => "!!"
|
21
21
|
}
|
22
22
|
|
23
|
-
def initialize(stream,
|
23
|
+
def initialize(stream, opts={})
|
24
24
|
# The stream should have the methods `write` and possibly `flush`.
|
25
25
|
@stream = stream
|
26
|
+
@options = opts
|
26
27
|
|
27
28
|
# Emitter is a state machine with a stack of states to handle nested
|
28
29
|
# structures.
|
@@ -57,15 +58,14 @@ module RbYAML
|
|
57
58
|
@indention = true
|
58
59
|
|
59
60
|
# Formatting details.
|
60
|
-
@canonical =
|
61
|
+
@canonical = opts[:Canonical]
|
61
62
|
@best_indent = 2
|
62
|
-
@best_indent =
|
63
|
+
@best_indent = opts[:Indent] if 2...10 === opts[:Indent]
|
63
64
|
|
64
65
|
@best_width = 80
|
65
|
-
@best_width =
|
66
|
+
@best_width = opts[:BestWidth] if opts[:BestWidth] != 0 && opts[:BestWidth] > @best_indent*2
|
66
67
|
|
67
68
|
@best_line_break = "\n"
|
68
|
-
@best_line_break = line_break if ["\r", "\n", "\r\n"].include?(line_break)
|
69
69
|
|
70
70
|
# Tag prefixes.
|
71
71
|
@tag_prefixes = nil
|
@@ -178,7 +178,7 @@ module RbYAML
|
|
178
178
|
implicit = first && !@event.explicit && !@canonical && !@event.version && !@event.tags && !check_empty_document
|
179
179
|
if !implicit
|
180
180
|
write_indent
|
181
|
-
write_indicator("---",true)
|
181
|
+
write_indicator("--- ",true,true)
|
182
182
|
if @canonical
|
183
183
|
write_indent
|
184
184
|
end
|
@@ -349,14 +349,14 @@ module RbYAML
|
|
349
349
|
end
|
350
350
|
|
351
351
|
def expect_flow_mapping_simple_value
|
352
|
-
write_indicator(":", false)
|
352
|
+
write_indicator(": ", false,true)
|
353
353
|
@states << :expect_flow_mapping_key
|
354
354
|
expect_node(false,false,true)
|
355
355
|
end
|
356
356
|
|
357
357
|
def expect_flow_mapping_value
|
358
358
|
write_indent if @canonical || @column > @best_width
|
359
|
-
write_indicator(":", true)
|
359
|
+
write_indicator(": ", false,true)
|
360
360
|
@states << :expect_flow_mapping_key
|
361
361
|
expect_node(false,false,true)
|
362
362
|
end
|
@@ -414,14 +414,14 @@ module RbYAML
|
|
414
414
|
end
|
415
415
|
|
416
416
|
def expect_block_mapping_simple_value
|
417
|
-
write_indicator(":", false)
|
417
|
+
write_indicator(": ", false,true)
|
418
418
|
@states << :expect_block_mapping_key
|
419
419
|
expect_node(false,false,true)
|
420
420
|
end
|
421
421
|
|
422
422
|
def expect_block_mapping_value
|
423
423
|
write_indent
|
424
|
-
write_indicator(":",true,
|
424
|
+
write_indicator(": ",true,true,true)
|
425
425
|
@states << :expect_block_mapping_key
|
426
426
|
expect_node(false,false,true)
|
427
427
|
end
|
@@ -506,7 +506,6 @@ module RbYAML
|
|
506
506
|
return ""
|
507
507
|
end
|
508
508
|
end
|
509
|
-
|
510
509
|
if !@event.style && @event.implicit && (!(@simple_key_context && (@analysis.empty || @analysis.multiline)) &&
|
511
510
|
(@flow_level!=0 && @analysis.allow_flow_plain || (@flow_level==0 && @analysis.allow_block_plain)))
|
512
511
|
return ""
|
@@ -758,6 +757,10 @@ module RbYAML
|
|
758
757
|
# allowed for double quoted scalars.
|
759
758
|
allow_flow_plain = allow_block_plain = allow_single_quoted = allow_block = false if mixed_breaks_spaces || special_characters
|
760
759
|
|
760
|
+
# This seem to have been missed...
|
761
|
+
allow_flow_plain = allow_block_plain = allow_single_quoted = false if inline_breaks
|
762
|
+
allow_single_quoted = false if trailing_breaks
|
763
|
+
|
761
764
|
# We don't emit multiline plain scalars.
|
762
765
|
allow_flow_plain = allow_block_plain = false if line_breaks
|
763
766
|
|
@@ -852,7 +855,6 @@ module RbYAML
|
|
852
855
|
end
|
853
856
|
elsif breaks
|
854
857
|
if ch.nil? or !"\n\x85".include?(ch)
|
855
|
-
write_line_break if text[start] == ?\n
|
856
858
|
(text[start...ending]).each_byte { |br|
|
857
859
|
if br == ?\n
|
858
860
|
write_line_break
|
@@ -890,22 +892,6 @@ module RbYAML
|
|
890
892
|
write_indicator("'", false)
|
891
893
|
end
|
892
894
|
|
893
|
-
ESCAPE_REPLACEMENTS = {
|
894
|
-
?\0 => "0",
|
895
|
-
?\x07 => "a",
|
896
|
-
?\x08 => "b",
|
897
|
-
?\x09 => "t",
|
898
|
-
?\x0A => "n",
|
899
|
-
?\x0B => "v",
|
900
|
-
?\x0C => "f",
|
901
|
-
?\x0D => "r",
|
902
|
-
?\x1B => "e",
|
903
|
-
?" => "\"",
|
904
|
-
?\\ => "\\",
|
905
|
-
?\x85 => "N",
|
906
|
-
?\xA0 => "_"
|
907
|
-
}
|
908
|
-
|
909
895
|
def write_double_quoted(text, split=true)
|
910
896
|
write_indicator('"', true)
|
911
897
|
start = ending = 0
|
@@ -12,27 +12,15 @@ module RbYAML
|
|
12
12
|
class EmitterError < YAMLError
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
attr_accessor :scalar,:empty,:multiline,:allow_flow_plain,:allow_block_plain,:allow_single_quoted,:allow_double_quoted,:allow_block
|
17
|
-
def initialize(scalar,empty,multiline,allow_flow_plain, allow_block_plain,allow_single_quoted, allow_double_quoted,allow_block)
|
18
|
-
@scalar = scalar
|
19
|
-
@empty = empty
|
20
|
-
@multiline = multiline
|
21
|
-
@allow_flow_plain = allow_flow_plain
|
22
|
-
@allow_block_plain = allow_block_plain
|
23
|
-
@allow_single_quoted = allow_single_quoted
|
24
|
-
@allow_double_quoted = allow_double_quoted
|
25
|
-
@allow_block = allow_block
|
26
|
-
end
|
27
|
-
end
|
15
|
+
ScalarAnalysis = Struct.new(:scalar,:empty,:multiline,:allow_flow_plain,:allow_block_plain,:allow_single_quoted,:allow_double_quoted,:allow_block)
|
28
16
|
|
29
|
-
|
17
|
+
class Emitter
|
30
18
|
DEFAULT_TAG_PREFIXES = {
|
31
19
|
"!" => "!",
|
32
20
|
"tag:yaml.org,2002:" => "!!"
|
33
21
|
}
|
34
22
|
|
35
|
-
def
|
23
|
+
def initialize(stream, canonical=nil, indent=nil, width=nil,line_break=nil)
|
36
24
|
# The stream should have the methods `write` and possibly `flush`.
|
37
25
|
@stream = stream
|
38
26
|
|
@@ -190,7 +178,7 @@ module RbYAML
|
|
190
178
|
implicit = first && !@event.explicit && !@canonical && !@event.version && !@event.tags && !check_empty_document
|
191
179
|
if !implicit
|
192
180
|
write_indent
|
193
|
-
write_indicator("---",true)
|
181
|
+
write_indicator("--- ",true,true)
|
194
182
|
if @canonical
|
195
183
|
write_indent
|
196
184
|
end
|
@@ -361,14 +349,14 @@ module RbYAML
|
|
361
349
|
end
|
362
350
|
|
363
351
|
def expect_flow_mapping_simple_value
|
364
|
-
write_indicator(":", false)
|
352
|
+
write_indicator(": ", false,true)
|
365
353
|
@states << :expect_flow_mapping_key
|
366
354
|
expect_node(false,false,true)
|
367
355
|
end
|
368
356
|
|
369
357
|
def expect_flow_mapping_value
|
370
358
|
write_indent if @canonical || @column > @best_width
|
371
|
-
write_indicator(":", true)
|
359
|
+
write_indicator(": ", false,true)
|
372
360
|
@states << :expect_flow_mapping_key
|
373
361
|
expect_node(false,false,true)
|
374
362
|
end
|
@@ -426,14 +414,14 @@ module RbYAML
|
|
426
414
|
end
|
427
415
|
|
428
416
|
def expect_block_mapping_simple_value
|
429
|
-
write_indicator(":", false)
|
417
|
+
write_indicator(": ", false,true)
|
430
418
|
@states << :expect_block_mapping_key
|
431
419
|
expect_node(false,false,true)
|
432
420
|
end
|
433
421
|
|
434
422
|
def expect_block_mapping_value
|
435
423
|
write_indent
|
436
|
-
write_indicator(":",true,
|
424
|
+
write_indicator(": ",true,true,true)
|
437
425
|
@states << :expect_block_mapping_key
|
438
426
|
expect_node(false,false,true)
|
439
427
|
end
|
@@ -441,36 +429,35 @@ module RbYAML
|
|
441
429
|
# Checkers.
|
442
430
|
|
443
431
|
def check_empty_sequence
|
444
|
-
|
432
|
+
@event.__is_sequence_start && !@events.empty? && @events.first.__is_sequence_end
|
445
433
|
end
|
446
434
|
|
447
435
|
def check_empty_mapping
|
448
|
-
|
436
|
+
@event.__is_mapping_start && !@events.empty? && @events.first.__is_mapping_end
|
449
437
|
end
|
450
438
|
|
451
439
|
def check_empty_document
|
452
|
-
return false if
|
440
|
+
return false if !@event.__is_document_start || @events.empty?
|
453
441
|
event = @events.first
|
454
|
-
|
442
|
+
event.__is_scalar && event.anchor.nil? && event.tag.nil? && event.implicit && event.value == ""
|
455
443
|
end
|
456
444
|
|
457
445
|
def check_simple_key
|
458
446
|
length = 0
|
459
|
-
if
|
447
|
+
if @event.__is_node && !@event.anchor.nil?
|
460
448
|
@prepared_anchor = prepare_anchor(@event.anchor) if @prepared_anchor.nil?
|
461
449
|
length += @prepared_anchor.length
|
462
450
|
end
|
463
|
-
if (
|
451
|
+
if (@event.__is_scalar || @event.__is_collection_start) && !@event.tag.nil?
|
464
452
|
@prepared_tag = prepare_tag(@event.tag) if @prepared_tag.nil?
|
465
453
|
length += @prepared_tag.length
|
466
454
|
end
|
467
|
-
if
|
455
|
+
if @event.__is_scalar
|
468
456
|
@analysis = analyze_scalar(@event.value) if @analysis.nil?
|
469
457
|
length += @analysis.scalar.length
|
470
458
|
end
|
471
459
|
|
472
|
-
(length < 128 && (
|
473
|
-
(ScalarEvent === @event && !@analysis.empty && !@analysis.multiline) ||
|
460
|
+
(length < 128 && (@event.__is_alias || (@event.__is_scalar && !@analysis.empty && !@analysis.multiline) ||
|
474
461
|
check_empty_sequence || check_empty_mapping))
|
475
462
|
end
|
476
463
|
|
@@ -519,7 +506,6 @@ module RbYAML
|
|
519
506
|
return ""
|
520
507
|
end
|
521
508
|
end
|
522
|
-
|
523
509
|
if !@event.style && @event.implicit && (!(@simple_key_context && (@analysis.empty || @analysis.multiline)) &&
|
524
510
|
(@flow_level!=0 && @analysis.allow_flow_plain || (@flow_level==0 && @analysis.allow_block_plain)))
|
525
511
|
return ""
|
@@ -570,7 +556,7 @@ module RbYAML
|
|
570
556
|
ending = 1 if prefix[0] == ?!
|
571
557
|
ending += 1 while ending < prefix.length
|
572
558
|
chunks << prefix[start...ending] if start < ending
|
573
|
-
chunks.
|
559
|
+
chunks.to_s
|
574
560
|
end
|
575
561
|
|
576
562
|
def prepare_tag(tag)
|
@@ -588,7 +574,7 @@ module RbYAML
|
|
588
574
|
start = ending = 0
|
589
575
|
ending += 1 while ending < suffix.length
|
590
576
|
chunks << suffix[start...ending] if start < ending
|
591
|
-
suffix_text = chunks.
|
577
|
+
suffix_text = chunks.to_s
|
592
578
|
if handle
|
593
579
|
"#{handle}#{suffix_text}"
|
594
580
|
else
|
@@ -771,6 +757,10 @@ module RbYAML
|
|
771
757
|
# allowed for double quoted scalars.
|
772
758
|
allow_flow_plain = allow_block_plain = allow_single_quoted = allow_block = false if mixed_breaks_spaces || special_characters
|
773
759
|
|
760
|
+
# This seem to have been missed...
|
761
|
+
allow_flow_plain = allow_block_plain = allow_single_quoted = false if inline_breaks
|
762
|
+
allow_single_quoted = false if trailing_breaks
|
763
|
+
|
774
764
|
# We don't emit multiline plain scalars.
|
775
765
|
allow_flow_plain = allow_block_plain = false if line_breaks
|
776
766
|
|
@@ -865,7 +855,6 @@ module RbYAML
|
|
865
855
|
end
|
866
856
|
elsif breaks
|
867
857
|
if ch.nil? or !"\n\x85".include?(ch)
|
868
|
-
write_line_break if text[start] == ?\n
|
869
858
|
(text[start...ending]).each_byte { |br|
|
870
859
|
if br == ?\n
|
871
860
|
write_line_break
|
data/lib/rbyaml/error.rb
CHANGED
@@ -1,75 +1,22 @@
|
|
1
1
|
|
2
2
|
module RbYAML
|
3
|
-
Mark = Struct.new(:name,:column,:buffer,:pointer)
|
4
|
-
class Mark
|
5
|
-
def get_snippet(indent=4, max_length=75)
|
6
|
-
return nil if buffer.nil?
|
7
|
-
head = ""
|
8
|
-
start = pointer
|
9
|
-
while start > 0 && !"\0\r\n\x85".include?(buffer[start-1])
|
10
|
-
start -= 1
|
11
|
-
if pointer-start > max_length/2-1
|
12
|
-
head = " ... "
|
13
|
-
start += 5
|
14
|
-
break
|
15
|
-
end
|
16
|
-
end
|
17
|
-
tail = ""
|
18
|
-
tend = pointer
|
19
|
-
while tend < buffer.length && !"\0\r\n\x85".include?(buffer[tend])
|
20
|
-
tend += 1
|
21
|
-
if tend-pointer > max_length/2-1
|
22
|
-
tail = " ... "
|
23
|
-
tend -= 5
|
24
|
-
break
|
25
|
-
end
|
26
|
-
end
|
27
|
-
snippet = buffer[start..tend]
|
28
|
-
' ' * indent + "#{head}#{snippet}#{tail}\n" + ' '*(indent+pointer-start+head.length) + ' '
|
29
|
-
end
|
30
|
-
|
31
|
-
def to_s
|
32
|
-
snippet = get_snippet()
|
33
|
-
where = " in \"#{name}\", line ?, column #{column+1}"
|
34
|
-
if snippet
|
35
|
-
where << ":\n" << snippet
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def hash
|
40
|
-
object_id
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
3
|
class YAMLError < StandardError
|
45
|
-
|
46
|
-
|
47
|
-
class TypeError < YAMLError
|
48
|
-
end
|
49
|
-
|
50
|
-
class MarkedYAMLError < YAMLError
|
51
|
-
def initialize(context=nil, context_mark=nil, problem=nil, problem_mark=nil, note=nil)
|
4
|
+
def initialize(context=nil, problem=nil, note=nil)
|
52
5
|
super()
|
53
6
|
@context = context
|
54
|
-
@context_mark = context_mark
|
55
7
|
@problem = problem
|
56
|
-
@problem_mark = problem_mark
|
57
8
|
@note = note
|
58
9
|
end
|
59
10
|
|
60
11
|
def to_s
|
61
12
|
lines = []
|
62
|
-
|
63
13
|
lines << @context if @context
|
64
|
-
if @context_mark && (@problem.nil? || @problem_mark.nil? ||
|
65
|
-
@context_mark.name != @problem_mark.name ||
|
66
|
-
@context_mark.column != @problem_mark.column)
|
67
|
-
lines << @context_mark.to_s
|
68
|
-
end
|
69
14
|
lines << @problem if @problem
|
70
|
-
lines << @problem_mark.to_s if @problem_mark
|
71
15
|
lines << @note if @note
|
72
16
|
lines.join("\n")
|
73
17
|
end
|
74
18
|
end
|
19
|
+
|
20
|
+
class TypeError < YAMLError
|
21
|
+
end
|
75
22
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
module RbYAML
|
3
|
+
Mark = Struct.new(:name,:column,:buffer,:pointer)
|
4
|
+
class Mark
|
5
|
+
def get_snippet(indent=4, max_length=75)
|
6
|
+
return nil if buffer.nil?
|
7
|
+
head = ""
|
8
|
+
start = pointer
|
9
|
+
while start > 0 && !"\0\r\n\x85".include?(buffer[start-1])
|
10
|
+
start -= 1
|
11
|
+
if pointer-start > max_length/2-1
|
12
|
+
head = " ... "
|
13
|
+
start += 5
|
14
|
+
break
|
15
|
+
end
|
16
|
+
end
|
17
|
+
tail = ""
|
18
|
+
tend = pointer
|
19
|
+
while tend < buffer.length && !"\0\r\n\x85".include?(buffer[tend])
|
20
|
+
tend += 1
|
21
|
+
if tend-pointer > max_length/2-1
|
22
|
+
tail = " ... "
|
23
|
+
tend -= 5
|
24
|
+
break
|
25
|
+
end
|
26
|
+
end
|
27
|
+
snippet = buffer[start..tend]
|
28
|
+
' ' * indent + "#{head}#{snippet}#{tail}\n" + ' '*(indent+pointer-start+head.length) + ' '
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_s
|
32
|
+
snippet = get_snippet()
|
33
|
+
where = " in \"#{name}\", line ?, column #{column+1}"
|
34
|
+
if snippet
|
35
|
+
where << ":\n" << snippet
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def hash
|
40
|
+
object_id
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class YAMLError < StandardError
|
45
|
+
end
|
46
|
+
|
47
|
+
class TypeError < YAMLError
|
48
|
+
end
|
49
|
+
|
50
|
+
class MarkedYAMLError < YAMLError
|
51
|
+
def initialize(context=nil, context_mark=nil, problem=nil, problem_mark=nil, note=nil)
|
52
|
+
super()
|
53
|
+
@context = context
|
54
|
+
@context_mark = context_mark
|
55
|
+
@problem = problem
|
56
|
+
@problem_mark = problem_mark
|
57
|
+
@note = note
|
58
|
+
end
|
59
|
+
|
60
|
+
def to_s
|
61
|
+
lines = []
|
62
|
+
|
63
|
+
lines << @context if @context
|
64
|
+
if @context_mark && (@problem.nil? || @problem_mark.nil? ||
|
65
|
+
@context_mark.name != @problem_mark.name ||
|
66
|
+
@context_mark.column != @problem_mark.column)
|
67
|
+
lines << @context_mark.to_s
|
68
|
+
end
|
69
|
+
lines << @problem if @problem
|
70
|
+
lines << @problem_mark.to_s if @problem_mark
|
71
|
+
lines << @note if @note
|
72
|
+
lines.join("\n")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|