psychgus 1.2.0 → 1.3.4
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.
- checksums.yaml +4 -4
- data/.yardopts +4 -0
- data/CHANGELOG.md +58 -3
- data/Gemfile +0 -18
- data/README.md +38 -43
- data/Rakefile +33 -126
- data/lib/psychgus.rb +178 -186
- data/lib/psychgus/blueberry.rb +28 -39
- data/lib/psychgus/ext.rb +6 -17
- data/lib/psychgus/ext/core_ext.rb +17 -28
- data/lib/psychgus/ext/node_ext.rb +13 -24
- data/lib/psychgus/ext/yaml_tree_ext.rb +23 -34
- data/lib/psychgus/stylables.rb +78 -89
- data/lib/psychgus/styled_document_stream.rb +14 -25
- data/lib/psychgus/styled_tree_builder.rb +90 -101
- data/lib/psychgus/styler.rb +33 -44
- data/lib/psychgus/stylers.rb +67 -78
- data/lib/psychgus/super_sniffer.rb +128 -138
- data/lib/psychgus/super_sniffer/parent.rb +48 -149
- data/lib/psychgus/version.rb +4 -16
- data/psychgus.gemspec +46 -49
- data/test/blueberry_test.rb +30 -41
- data/test/psychgus_test.rb +73 -54
- data/test/psychgus_tester.rb +23 -31
- data/test/sniffer_test.rb +18 -32
- data/test/styler_test.rb +20 -31
- data/test/stylers_test.rb +32 -43
- metadata +38 -23
data/lib/psychgus/stylables.rb
CHANGED
@@ -1,22 +1,11 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
4
|
#--
|
5
5
|
# This file is part of Psychgus.
|
6
|
-
# Copyright (c) 2019 Jonathan Bradley Whited
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# it under the terms of the GNU Lesser General Public License as published by
|
10
|
-
# the Free Software Foundation, either version 3 of the License, or
|
11
|
-
# (at your option) any later version.
|
12
|
-
#
|
13
|
-
# Psychgus is distributed in the hope that it will be useful,
|
14
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
-
# GNU Lesser General Public License for more details.
|
17
|
-
#
|
18
|
-
# You should have received a copy of the GNU Lesser General Public License
|
19
|
-
# along with Psychgus. If not, see <http://www.gnu.org/licenses/>.
|
6
|
+
# Copyright (c) 2019-2021 Jonathan Bradley Whited
|
7
|
+
#
|
8
|
+
# SPDX-License-Identifier: LGPL-3.0-or-later
|
20
9
|
#++
|
21
10
|
|
22
11
|
|
@@ -29,27 +18,27 @@ module Psychgus
|
|
29
18
|
###
|
30
19
|
# A collection of commonly-used {Styler} mixins
|
31
20
|
# that can be included in a class instead of {Styler}.
|
32
|
-
#
|
33
|
-
# @author Jonathan Bradley Whited
|
21
|
+
#
|
22
|
+
# @author Jonathan Bradley Whited
|
34
23
|
# @since 1.2.0
|
35
|
-
#
|
24
|
+
#
|
36
25
|
# @see Stylers
|
37
26
|
# @see Styler
|
38
27
|
###
|
39
28
|
module Stylables
|
40
29
|
###
|
41
30
|
# A helper mixin for Stylables that change a node's style.
|
42
|
-
#
|
31
|
+
#
|
43
32
|
# There is no max level, because a parent's style will override all of its children.
|
44
33
|
###
|
45
34
|
module StyleStylable
|
46
35
|
include Styler
|
47
|
-
|
36
|
+
|
48
37
|
attr_accessor :min_level # @return [Integer] the minimum level (inclusive) to style
|
49
38
|
attr_accessor :new_style # @return [Integer] the new style to set the nodes to
|
50
|
-
|
39
|
+
|
51
40
|
# +max_level+ is not defined because a parent's style will override all of its children.
|
52
|
-
#
|
41
|
+
#
|
53
42
|
# @param min_level [Integer] the minimum level (inclusive) to style
|
54
43
|
# @param new_style [Integer] the new style to set the nodes to
|
55
44
|
# @param kargs [Hash] capture extra keyword args, so no error for undefined args
|
@@ -57,212 +46,212 @@ module Psychgus
|
|
57
46
|
@min_level = min_level
|
58
47
|
@new_style = new_style
|
59
48
|
end
|
60
|
-
|
49
|
+
|
61
50
|
# Change the style of +node+ to {new_style} if it is >= {min_level}.
|
62
51
|
def change_style(sniffer,node)
|
63
52
|
return unless node.respond_to?(:style=)
|
64
|
-
|
53
|
+
|
65
54
|
node.style = @new_style if sniffer.level >= @min_level
|
66
55
|
end
|
67
56
|
end
|
68
57
|
end
|
69
|
-
|
58
|
+
|
70
59
|
module Stylables
|
71
60
|
###
|
72
61
|
# (see Stylers::CapStyler)
|
73
62
|
###
|
74
63
|
module CapStylable
|
75
64
|
include Styler
|
76
|
-
|
65
|
+
|
77
66
|
attr_reader :delim # @return [String,Regexp] the delimiter to split on
|
78
67
|
attr_accessor :each_word # @return [true,false] whether to capitalize each word separated by {delim}
|
79
68
|
attr_accessor :new_delim # @return [nil,String] the replacement for each {delim} if not nil
|
80
|
-
|
69
|
+
|
81
70
|
# @param each_word [true,false] whether to capitalize each word separated by +delim+
|
82
71
|
# @param new_delim [nil,String] the replacement for each +delim+ if not nil
|
83
72
|
# @param delim [String,Regexp] the delimiter to split on
|
84
73
|
# @param kargs [Hash] capture extra keyword args, so no error for undefined args
|
85
74
|
def initialize(each_word: true,new_delim: nil,delim: /[\s_\-]/,**kargs)
|
86
|
-
delim = Regexp.quote(delim.to_s
|
87
|
-
|
88
|
-
@delim = Regexp.new("(#{delim
|
75
|
+
delim = Regexp.quote(delim.to_s) unless delim.is_a?(Regexp)
|
76
|
+
|
77
|
+
@delim = Regexp.new("(#{delim})")
|
89
78
|
@each_word = each_word
|
90
79
|
@new_delim = new_delim
|
91
80
|
end
|
92
|
-
|
81
|
+
|
93
82
|
# Capitalize an individual word (not words).
|
94
|
-
#
|
83
|
+
#
|
95
84
|
# This method can safely be overridden with a new implementation.
|
96
|
-
#
|
85
|
+
#
|
97
86
|
# @param word [nil,String] the word to capitalize
|
98
|
-
#
|
87
|
+
#
|
99
88
|
# @return [String] the capitalized word
|
100
89
|
def cap_word(word)
|
101
|
-
return word if word.nil?
|
102
|
-
|
90
|
+
return word if word.nil? || word.empty?
|
91
|
+
|
103
92
|
# Already capitalized, good for all-capitalized words, like 'BBQ'
|
104
|
-
return word if word[0] == word[0].upcase
|
105
|
-
|
106
|
-
return word.capitalize
|
93
|
+
return word if word[0] == word[0].upcase
|
94
|
+
|
95
|
+
return word.capitalize
|
107
96
|
end
|
108
|
-
|
97
|
+
|
109
98
|
# Capitalize +node.value+.
|
110
|
-
#
|
99
|
+
#
|
111
100
|
# @see cap_word
|
112
101
|
# @see Styler#style_scalar
|
113
102
|
def style_scalar(sniffer,node)
|
114
|
-
if !@each_word || node.value.nil?
|
103
|
+
if !@each_word || node.value.nil? || node.value.empty?
|
115
104
|
node.value = cap_word(node.value)
|
116
105
|
return
|
117
106
|
end
|
118
|
-
|
107
|
+
|
119
108
|
is_delim = false
|
120
|
-
|
121
|
-
node.value = node.value.split(@delim).map
|
109
|
+
|
110
|
+
node.value = node.value.split(@delim).map do |v|
|
122
111
|
if is_delim
|
123
|
-
v = @new_delim unless @new_delim.nil?
|
112
|
+
v = @new_delim unless @new_delim.nil?
|
124
113
|
else
|
125
114
|
v = cap_word(v)
|
126
115
|
end
|
127
|
-
|
116
|
+
|
128
117
|
is_delim = !is_delim
|
129
118
|
v
|
130
|
-
end.join
|
119
|
+
end.join
|
131
120
|
end
|
132
121
|
end
|
133
|
-
|
122
|
+
|
134
123
|
###
|
135
124
|
# (see Stylers::HierarchyStyler)
|
136
125
|
###
|
137
126
|
module HierarchyStylable
|
138
127
|
include Styler
|
139
|
-
|
128
|
+
|
140
129
|
attr_accessor :io # @return [IO] the IO to write to; defaults to StringIO
|
141
130
|
attr_accessor :verbose # @return [true,false] whether to be more verbose (e.g., write child info)
|
142
|
-
|
131
|
+
|
143
132
|
# @param io [IO] the IO to write to
|
144
133
|
# @param verbose [true,false] whether to be more verbose (e.g., write child info)
|
145
134
|
# @param kargs [Hash] capture extra keyword args, so no error for undefined args
|
146
|
-
def initialize(io: StringIO.new
|
135
|
+
def initialize(io: StringIO.new,verbose: false,**kargs)
|
147
136
|
@io = io
|
148
137
|
@verbose = verbose
|
149
138
|
end
|
150
|
-
|
139
|
+
|
151
140
|
# Write the hierarchy of +node+ to {io}.
|
152
|
-
#
|
141
|
+
#
|
153
142
|
# @see Styler#style
|
154
143
|
def style(sniffer,node)
|
155
|
-
@io.print
|
156
|
-
|
144
|
+
@io.print(' ' * (sniffer.level - 1))
|
145
|
+
|
157
146
|
name = node.respond_to?(:value) ? node.value : node.class.name
|
158
147
|
parent = sniffer.parent
|
159
|
-
|
148
|
+
|
160
149
|
@io.print "(#{sniffer.level}:#{sniffer.position}):#{name} - "
|
161
|
-
|
150
|
+
|
162
151
|
if @verbose
|
163
152
|
@io.print parent
|
164
153
|
else
|
165
154
|
@io.print "<#{parent.debug_tag}:(#{parent.level}:#{parent.position})>"
|
166
155
|
end
|
167
|
-
|
156
|
+
|
168
157
|
@io.puts
|
169
158
|
end
|
170
|
-
|
159
|
+
|
171
160
|
# Convert {io} to a String if possible (e.g., StringIO).
|
172
|
-
#
|
161
|
+
#
|
173
162
|
# @return [String] the IO String result or just {io} as a String
|
174
|
-
def to_s
|
175
|
-
return @io.respond_to?(:string) ? @io.string : @io.to_s
|
163
|
+
def to_s
|
164
|
+
return @io.respond_to?(:string) ? @io.string : @io.to_s
|
176
165
|
end
|
177
166
|
end
|
178
|
-
|
167
|
+
|
179
168
|
###
|
180
169
|
# (see Stylers::MapFlowStyler)
|
181
170
|
###
|
182
171
|
module MapFlowStylable
|
183
172
|
include StyleStylable
|
184
|
-
|
173
|
+
|
185
174
|
# (see StyleStylable#initialize)
|
186
175
|
# @!method initialize(min_level=0,new_style: nil,**kargs)
|
187
|
-
#
|
176
|
+
#
|
188
177
|
# If +new_style+ is nil (the default), then {MAPPING_FLOW} will be used.
|
189
178
|
def initialize(*)
|
190
179
|
super
|
191
|
-
|
192
|
-
@new_style = MAPPING_FLOW if @new_style.nil?
|
180
|
+
|
181
|
+
@new_style = MAPPING_FLOW if @new_style.nil?
|
193
182
|
end
|
194
|
-
|
183
|
+
|
195
184
|
# Change the style of a Mapping to FLOW (or to the value of {new_style})
|
196
185
|
# if it is >= {min_level}.
|
197
|
-
#
|
186
|
+
#
|
198
187
|
# @see change_style
|
199
188
|
# @see Styler#style_mapping
|
200
189
|
def style_mapping(sniffer,node)
|
201
190
|
change_style(sniffer,node)
|
202
191
|
end
|
203
192
|
end
|
204
|
-
|
193
|
+
|
205
194
|
###
|
206
195
|
# (see Stylers::NoSymStyler)
|
207
196
|
###
|
208
197
|
module NoSymStylable
|
209
198
|
include Styler
|
210
|
-
|
199
|
+
|
211
200
|
attr_accessor :cap # @return [true,false] whether to capitalize the symbol
|
212
|
-
|
201
|
+
|
213
202
|
alias_method :cap?,:cap
|
214
|
-
|
203
|
+
|
215
204
|
# @param cap [true,false] whether to capitalize the symbol
|
216
205
|
# @param kargs [Hash] capture extra keyword args, so no error for undefined args
|
217
206
|
def initialize(cap: true,**kargs)
|
218
207
|
@cap = cap
|
219
208
|
end
|
220
|
-
|
209
|
+
|
221
210
|
# If +node.value+ is a symbol, change it into a string and capitalize it.
|
222
|
-
#
|
211
|
+
#
|
223
212
|
# @see Styler#style_scalar
|
224
213
|
def style_scalar(sniffer,node)
|
225
|
-
return if node.value.nil?
|
214
|
+
return if node.value.nil? || node.value.empty?
|
226
215
|
return if node.value[0] != ':'
|
227
|
-
|
216
|
+
|
228
217
|
node.value = node.value[1..-1]
|
229
|
-
node.value = node.value.capitalize
|
218
|
+
node.value = node.value.capitalize if @cap
|
230
219
|
end
|
231
220
|
end
|
232
|
-
|
221
|
+
|
233
222
|
###
|
234
223
|
# (see Stylers::NoTagStyler)
|
235
224
|
###
|
236
225
|
module NoTagStylable
|
237
226
|
include Styler
|
238
|
-
|
227
|
+
|
239
228
|
# If +node.tag+ is settable, set it to nil.
|
240
|
-
#
|
229
|
+
#
|
241
230
|
# @see Styler#style
|
242
231
|
def style(sniffer,node)
|
243
232
|
node.tag = nil if node.respond_to?(:tag=)
|
244
233
|
end
|
245
234
|
end
|
246
|
-
|
235
|
+
|
247
236
|
###
|
248
237
|
# (see Stylers::SeqFlowStyler)
|
249
238
|
###
|
250
239
|
module SeqFlowStylable
|
251
240
|
include StyleStylable
|
252
|
-
|
241
|
+
|
253
242
|
# (see StyleStylable#initialize)
|
254
243
|
# @!method initialize(min_level=0,new_style: nil,**kargs)
|
255
|
-
#
|
244
|
+
#
|
256
245
|
# If +new_style+ is nil (the default), then {SEQUENCE_FLOW} will be used.
|
257
246
|
def initialize(*)
|
258
247
|
super
|
259
|
-
|
260
|
-
@new_style = SEQUENCE_FLOW if @new_style.nil?
|
248
|
+
|
249
|
+
@new_style = SEQUENCE_FLOW if @new_style.nil?
|
261
250
|
end
|
262
|
-
|
251
|
+
|
263
252
|
# Change the style of a Sequence to FLOW (or to the value of {new_style})
|
264
253
|
# if it is >= {min_level}.
|
265
|
-
#
|
254
|
+
#
|
266
255
|
# @see change_style
|
267
256
|
# @see Styler#style_sequence
|
268
257
|
def style_sequence(sniffer,node)
|
@@ -1,22 +1,11 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
4
|
#--
|
5
5
|
# This file is part of Psychgus.
|
6
|
-
# Copyright (c) 2019 Jonathan Bradley Whited
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# it under the terms of the GNU Lesser General Public License as published by
|
10
|
-
# the Free Software Foundation, either version 3 of the License, or
|
11
|
-
# (at your option) any later version.
|
12
|
-
#
|
13
|
-
# Psychgus is distributed in the hope that it will be useful,
|
14
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
-
# GNU Lesser General Public License for more details.
|
17
|
-
#
|
18
|
-
# You should have received a copy of the GNU Lesser General Public License
|
19
|
-
# along with Psychgus. If not, see <http://www.gnu.org/licenses/>.
|
6
|
+
# Copyright (c) 2019-2021 Jonathan Bradley Whited
|
7
|
+
#
|
8
|
+
# SPDX-License-Identifier: LGPL-3.0-or-later
|
20
9
|
#++
|
21
10
|
|
22
11
|
|
@@ -27,36 +16,36 @@ require 'psychgus/styled_tree_builder'
|
|
27
16
|
module Psychgus
|
28
17
|
###
|
29
18
|
# Use this wherever Psych::Handlers::DocumentStream would have been used, to enable styling.
|
30
|
-
#
|
31
|
-
# @author Jonathan Bradley Whited
|
19
|
+
#
|
20
|
+
# @author Jonathan Bradley Whited
|
32
21
|
# @since 1.0.0
|
33
|
-
#
|
22
|
+
#
|
34
23
|
# @see Psychgus.parse_stream Psychgus.parse_stream
|
35
24
|
# @see Psych::Handlers::DocumentStream
|
36
25
|
###
|
37
26
|
class StyledDocumentStream < StyledTreeBuilder
|
38
27
|
# Initialize this class with {Styler}(s) and a block.
|
39
|
-
#
|
28
|
+
#
|
40
29
|
# @param stylers [Styler] {Styler}(s) to use for styling this DocumentStream
|
41
30
|
# @param deref_aliases [true,false] whether to dereference aliases; output the actual value
|
42
31
|
# instead of the alias
|
43
32
|
# @param block [Proc] a block to call in {#end_document} to denote a new YAML document
|
44
33
|
def initialize(*stylers,deref_aliases: false,**options,&block)
|
45
34
|
super(*stylers,deref_aliases: deref_aliases,**options)
|
46
|
-
|
35
|
+
|
47
36
|
@block = block
|
48
37
|
end
|
49
|
-
|
38
|
+
|
50
39
|
# This mimics the behavior of Psych::Handlers::DocumentStream#end_document.
|
51
|
-
#
|
40
|
+
#
|
52
41
|
# @see Psych::Handlers::DocumentStream#end_document
|
53
|
-
def end_document(implicit_end=!streaming?
|
42
|
+
def end_document(implicit_end=!streaming?)
|
54
43
|
@last.implicit_end = implicit_end
|
55
44
|
@block.call(pop)
|
56
45
|
end
|
57
|
-
|
46
|
+
|
58
47
|
# This mimics the behavior of Psych::Handlers::DocumentStream#start_document.
|
59
|
-
#
|
48
|
+
#
|
60
49
|
# @see Psych::Handlers::DocumentStream#start_document
|
61
50
|
def start_document(version,tag_directives,implicit)
|
62
51
|
node = Psych::Nodes::Document.new(version,tag_directives,implicit)
|
@@ -1,22 +1,11 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
4
|
#--
|
5
5
|
# This file is part of Psychgus.
|
6
|
-
# Copyright (c) 2019 Jonathan Bradley Whited
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# it under the terms of the GNU Lesser General Public License as published by
|
10
|
-
# the Free Software Foundation, either version 3 of the License, or
|
11
|
-
# (at your option) any later version.
|
12
|
-
#
|
13
|
-
# Psychgus is distributed in the hope that it will be useful,
|
14
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
-
# GNU Lesser General Public License for more details.
|
17
|
-
#
|
18
|
-
# You should have received a copy of the GNU Lesser General Public License
|
19
|
-
# along with Psychgus. If not, see <http://www.gnu.org/licenses/>.
|
6
|
+
# Copyright (c) 2019-2021 Jonathan Bradley Whited
|
7
|
+
#
|
8
|
+
# SPDX-License-Identifier: LGPL-3.0-or-later
|
20
9
|
#++
|
21
10
|
|
22
11
|
|
@@ -28,10 +17,10 @@ require 'psychgus/super_sniffer'
|
|
28
17
|
module Psychgus
|
29
18
|
###
|
30
19
|
# Use this wherever Psych::TreeBuilder would have been used, to enable styling.
|
31
|
-
#
|
32
|
-
# @author Jonathan Bradley Whited
|
20
|
+
#
|
21
|
+
# @author Jonathan Bradley Whited
|
33
22
|
# @since 1.0.0
|
34
|
-
#
|
23
|
+
#
|
35
24
|
# @see Psychgus.parser Psychgus.parser
|
36
25
|
# @see Psychgus.dump_stream Psychgus.dump_stream
|
37
26
|
# @see Psych::TreeBuilder
|
@@ -40,254 +29,254 @@ module Psychgus
|
|
40
29
|
# @return [true,false] whether to dereference aliases; output the actual value instead of the alias
|
41
30
|
attr_accessor :deref_aliases
|
42
31
|
alias_method :deref_aliases?,:deref_aliases
|
43
|
-
|
32
|
+
|
44
33
|
# @return [SuperSniffer] the {SuperSniffer} being used to sniff the YAML nodes, level, etc.
|
45
34
|
attr_reader :sniffer
|
46
|
-
|
35
|
+
|
47
36
|
# @return [Array<Stylers>] the {Styler}(s) being used to style the YAML nodes
|
48
37
|
attr_reader :stylers
|
49
|
-
|
38
|
+
|
50
39
|
# Initialize this class with {Styler}(s).
|
51
|
-
#
|
40
|
+
#
|
52
41
|
# @param stylers [Styler] {Styler}(s) to use for styling this TreeBuilder
|
53
42
|
# @param deref_aliases [true,false] whether to dereference aliases; output the actual value
|
54
43
|
# instead of the alias
|
55
44
|
def initialize(*stylers,deref_aliases: false,**options)
|
56
45
|
super()
|
57
|
-
|
46
|
+
|
58
47
|
@deref_aliases = deref_aliases
|
59
|
-
@sniffer = SuperSniffer.new
|
48
|
+
@sniffer = SuperSniffer.new
|
60
49
|
@stylers = []
|
61
|
-
|
50
|
+
|
62
51
|
add_styler(*stylers)
|
63
52
|
end
|
64
|
-
|
53
|
+
|
65
54
|
# Add {Styler}(s) onto the end of the data structure.
|
66
|
-
#
|
55
|
+
#
|
67
56
|
# @param stylers [Styler] {Styler}(s) to add
|
68
|
-
#
|
57
|
+
#
|
69
58
|
# @return [self] this class
|
70
59
|
def add_styler(*stylers)
|
71
60
|
@stylers.push(*stylers)
|
72
|
-
|
61
|
+
|
73
62
|
return self
|
74
63
|
end
|
75
|
-
|
64
|
+
|
76
65
|
# Calls super, styler(s), and sniffer.
|
77
|
-
#
|
66
|
+
#
|
78
67
|
# @see Psych::TreeBuilder#alias
|
79
68
|
# @see Styler#style
|
80
69
|
# @see Styler#style_alias
|
81
70
|
# @see SuperSniffer#add_alias
|
82
|
-
#
|
71
|
+
#
|
83
72
|
# @return [Psych::Nodes::Alias] the alias node created
|
84
73
|
def alias(*)
|
85
74
|
node = super
|
86
|
-
|
75
|
+
|
87
76
|
@stylers.each do |styler|
|
88
77
|
styler.style(sniffer,node)
|
89
78
|
styler.style_alias(sniffer,node)
|
90
79
|
end
|
91
|
-
|
80
|
+
|
92
81
|
@sniffer.add_alias(node)
|
93
|
-
|
82
|
+
|
94
83
|
return node
|
95
84
|
end
|
96
|
-
|
85
|
+
|
97
86
|
# Calls super and sniffer.
|
98
|
-
#
|
87
|
+
#
|
99
88
|
# @see Psych::TreeBuilder#end_document
|
100
89
|
# @see SuperSniffer#end_document
|
101
90
|
def end_document(*)
|
102
91
|
result = super
|
103
|
-
|
104
|
-
@sniffer.end_document
|
105
|
-
|
92
|
+
|
93
|
+
@sniffer.end_document
|
94
|
+
|
106
95
|
return result
|
107
96
|
end
|
108
|
-
|
97
|
+
|
109
98
|
# Calls super and sniffer.
|
110
|
-
#
|
99
|
+
#
|
111
100
|
# @see Psych::TreeBuilder#end_mapping
|
112
101
|
# @see SuperSniffer#end_mapping
|
113
102
|
def end_mapping(*)
|
114
103
|
result = super
|
115
|
-
|
116
|
-
@sniffer.end_mapping
|
117
|
-
|
104
|
+
|
105
|
+
@sniffer.end_mapping
|
106
|
+
|
118
107
|
return result
|
119
108
|
end
|
120
|
-
|
109
|
+
|
121
110
|
# Calls super and sniffer.
|
122
|
-
#
|
111
|
+
#
|
123
112
|
# @see Psych::TreeBuilder#end_sequence
|
124
113
|
# @see SuperSniffer#end_sequence
|
125
114
|
def end_sequence(*)
|
126
115
|
result = super
|
127
|
-
|
128
|
-
@sniffer.end_sequence
|
129
|
-
|
116
|
+
|
117
|
+
@sniffer.end_sequence
|
118
|
+
|
130
119
|
return result
|
131
120
|
end
|
132
|
-
|
121
|
+
|
133
122
|
# Calls super and sniffer.
|
134
|
-
#
|
123
|
+
#
|
135
124
|
# @see Psych::TreeBuilder#end_stream
|
136
125
|
# @see SuperSniffer#end_stream
|
137
126
|
def end_stream(*)
|
138
127
|
result = super
|
139
|
-
|
140
|
-
@sniffer.end_stream
|
141
|
-
|
128
|
+
|
129
|
+
@sniffer.end_stream
|
130
|
+
|
142
131
|
return result
|
143
132
|
end
|
144
|
-
|
133
|
+
|
145
134
|
# Insert {Styler}(s) at +index+ into the data structure.
|
146
|
-
#
|
135
|
+
#
|
147
136
|
# @param stylers [Styler] {Styler}(s) to insert
|
148
|
-
#
|
137
|
+
#
|
149
138
|
# @return [self] this class
|
150
139
|
def insert_styler(index,*stylers)
|
151
140
|
@stylers.insert(index,*stylers)
|
152
|
-
|
141
|
+
|
153
142
|
return self
|
154
143
|
end
|
155
|
-
|
144
|
+
|
156
145
|
# Remove the last {Styler}(s) from the data structure.
|
157
|
-
#
|
146
|
+
#
|
158
147
|
# @param count [Integer] the optional amount of tail elements to pop
|
159
|
-
#
|
148
|
+
#
|
160
149
|
# @return [Styler,Array<Styler>,nil] the last {Styler}(s), or if empty or count==0, nil
|
161
150
|
def pop_styler(count=1)
|
162
151
|
return nil if count == 0
|
163
|
-
return @stylers.pop
|
164
|
-
|
152
|
+
return @stylers.pop if count == 1
|
153
|
+
|
165
154
|
return @stylers.pop(count)
|
166
155
|
end
|
167
|
-
|
156
|
+
|
168
157
|
# Remove the {Styler} that matches +styler+ from the data structure.
|
169
|
-
#
|
158
|
+
#
|
170
159
|
# An optional +block+ can return a default value if not found.
|
171
|
-
#
|
160
|
+
#
|
172
161
|
# @param styler [Styler] the {Styler} to find and remove
|
173
162
|
# @param block [Proc] an optional block to call when +styler+ is not found
|
174
|
-
#
|
163
|
+
#
|
175
164
|
# @return [Styler,nil] the last {Styler}, or if not found, nil or the result of +block+
|
176
165
|
def remove_styler(styler,&block)
|
177
166
|
return @stylers.delete(styler,&block)
|
178
167
|
end
|
179
|
-
|
168
|
+
|
180
169
|
# Remove the {Styler} at +index+ from the data structure.
|
181
|
-
#
|
170
|
+
#
|
182
171
|
# @param index [Integer] the index of the {Styler} to remove
|
183
|
-
#
|
172
|
+
#
|
184
173
|
# @return [Styler,nil] the {Styler} removed or nil if empty
|
185
174
|
def remove_styler_at(index)
|
186
175
|
return @stylers.delete_at(index)
|
187
176
|
end
|
188
|
-
|
177
|
+
|
189
178
|
# Calls super, styler(s), and sniffer.
|
190
|
-
#
|
179
|
+
#
|
191
180
|
# @see Psych::TreeBuilder#scalar
|
192
181
|
# @see Styler#style
|
193
182
|
# @see Styler#style_scalar
|
194
183
|
# @see SuperSniffer#add_scalar
|
195
|
-
#
|
184
|
+
#
|
196
185
|
# @return [Psych::Nodes::Scalar] the scalar node created
|
197
186
|
def scalar(*)
|
198
187
|
node = super
|
199
|
-
|
188
|
+
|
200
189
|
@stylers.each do |styler|
|
201
190
|
styler.style(sniffer,node)
|
202
191
|
styler.style_scalar(sniffer,node)
|
203
192
|
end
|
204
|
-
|
193
|
+
|
205
194
|
@sniffer.add_scalar(node)
|
206
|
-
|
195
|
+
|
207
196
|
return node
|
208
197
|
end
|
209
|
-
|
198
|
+
|
210
199
|
# Calls super, styler(s), and sniffer.
|
211
|
-
#
|
200
|
+
#
|
212
201
|
# @see Psych::TreeBuilder#start_document
|
213
202
|
# @see Styler#style
|
214
203
|
# @see Styler#style_document
|
215
204
|
# @see SuperSniffer#start_document
|
216
|
-
#
|
205
|
+
#
|
217
206
|
# @return [Psych::Nodes::Document] the document node created
|
218
207
|
def start_document(*)
|
219
208
|
node = super
|
220
|
-
|
209
|
+
|
221
210
|
@stylers.each do |styler|
|
222
211
|
styler.style(sniffer,node)
|
223
212
|
styler.style_document(sniffer,node)
|
224
213
|
end
|
225
|
-
|
214
|
+
|
226
215
|
@sniffer.start_document(node)
|
227
|
-
|
216
|
+
|
228
217
|
return node
|
229
218
|
end
|
230
|
-
|
219
|
+
|
231
220
|
# Calls super, styler(s), and sniffer.
|
232
|
-
#
|
221
|
+
#
|
233
222
|
# @see Psych::TreeBuilder#start_mapping
|
234
223
|
# @see Styler#style
|
235
224
|
# @see Styler#style_mapping
|
236
225
|
# @see SuperSniffer#start_mapping
|
237
|
-
#
|
226
|
+
#
|
238
227
|
# @return [Psych::Nodes::Mapping] the mapping node created
|
239
228
|
def start_mapping(*)
|
240
229
|
node = super
|
241
|
-
|
230
|
+
|
242
231
|
@stylers.each do |styler|
|
243
232
|
styler.style(sniffer,node)
|
244
233
|
styler.style_mapping(sniffer,node)
|
245
234
|
end
|
246
|
-
|
235
|
+
|
247
236
|
@sniffer.start_mapping(node)
|
248
|
-
|
237
|
+
|
249
238
|
return node
|
250
239
|
end
|
251
|
-
|
240
|
+
|
252
241
|
# Calls super, styler(s), and sniffer.
|
253
|
-
#
|
242
|
+
#
|
254
243
|
# @see Psych::TreeBuilder#start_sequence
|
255
244
|
# @see Styler#style
|
256
245
|
# @see Styler#style_sequence
|
257
246
|
# @see SuperSniffer#start_sequence
|
258
|
-
#
|
247
|
+
#
|
259
248
|
# @return [Psych::Nodes::Sequence] the sequence node created
|
260
249
|
def start_sequence(*)
|
261
250
|
node = super
|
262
|
-
|
251
|
+
|
263
252
|
@stylers.each do |styler|
|
264
253
|
styler.style(sniffer,node)
|
265
254
|
styler.style_sequence(sniffer,node)
|
266
255
|
end
|
267
|
-
|
256
|
+
|
268
257
|
@sniffer.start_sequence(node)
|
269
|
-
|
258
|
+
|
270
259
|
return node
|
271
260
|
end
|
272
|
-
|
261
|
+
|
273
262
|
# Calls super, styler(s), and sniffer.
|
274
|
-
#
|
263
|
+
#
|
275
264
|
# @see Psych::TreeBuilder#start_stream
|
276
265
|
# @see Styler#style
|
277
266
|
# @see Styler#style_stream
|
278
267
|
# @see SuperSniffer#start_stream
|
279
|
-
#
|
268
|
+
#
|
280
269
|
# @return [Psych::Nodes::Stream] the stream node created
|
281
270
|
def start_stream(*)
|
282
271
|
node = super
|
283
|
-
|
272
|
+
|
284
273
|
@stylers.each do |styler|
|
285
274
|
styler.style(sniffer,node)
|
286
275
|
styler.style_stream(sniffer,node)
|
287
276
|
end
|
288
|
-
|
277
|
+
|
289
278
|
@sniffer.start_stream(node)
|
290
|
-
|
279
|
+
|
291
280
|
return node
|
292
281
|
end
|
293
282
|
end
|