meteor 0.9.31 → 0.9.33
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/ChangeLog +8 -0
- data/Gemfile.lock +1 -1
- data/demo/xhtml.rb +3 -3
- data/demo/xhtml4.rb +3 -3
- data/lib/meteor/attribute_map.rb +6 -6
- data/lib/meteor/core/kernel.rb +287 -287
- data/lib/meteor/core/util/pattern_cache.rb +6 -6
- data/lib/meteor/element.rb +10 -10
- data/lib/meteor/exception/no_such_element_exception.rb +15 -15
- data/lib/meteor/ml/html/parser_impl.rb +15 -15
- data/lib/meteor/ml/html4/parser_impl.rb +52 -52
- data/lib/meteor/ml/xhtml/parser_impl.rb +14 -14
- data/lib/meteor/ml/xhtml4/parser_impl.rb +18 -18
- data/lib/meteor/ml/xml/parser_impl.rb +6 -6
- data/lib/meteor/parsers.rb +43 -43
- data/lib/meteor.rb +3 -3
- metadata +1 -1
data/lib/meteor/core/kernel.rb
CHANGED
|
@@ -17,33 +17,33 @@ module Meteor
|
|
|
17
17
|
class Kernel < Meteor::Parser
|
|
18
18
|
# find
|
|
19
19
|
# E
|
|
20
|
-
|
|
20
|
+
PATTERN_FIND_one = '^([^,\\[\\]#\\.]+)$'
|
|
21
21
|
# # id_attribute_value
|
|
22
|
-
|
|
22
|
+
PATTERN_FIND_two_one = '^#([^\\.,\\[\\]#][^,\\[\\]#]*)$'
|
|
23
23
|
# .class_attribute_value
|
|
24
|
-
|
|
24
|
+
PATTERN_FIND_two_two = '^\\.([^\\.,\\[\\]#][^,\\[\\]#]*)$'
|
|
25
25
|
# [attribute_name=attribute_value]
|
|
26
|
-
|
|
26
|
+
PATTERN_FIND_two_three = '^\\[([^\\[\\],]+)=([^\\[\\],]+)\\]$'
|
|
27
27
|
# E[attribute_name=attribute_value]
|
|
28
|
-
|
|
28
|
+
PATTERN_FIND_three_one = '^([^\\.,\\[\\]#][^,\\[\\]#]+)\\[([^,\\[\\]]+)=([^,\\[\\]]+)\\]$'
|
|
29
29
|
# E# id_attribute_value
|
|
30
|
-
|
|
30
|
+
PATTERN_FIND_three_two = '^([^\\.,\\[\\]#][^,\\[\\]#]+)#([^\\.,\\[\\]#][^,\\[\\]#]*)$'
|
|
31
31
|
# E.class_attribute_value
|
|
32
|
-
|
|
32
|
+
PATTERN_FIND_three_three = '^([^\\.,\\[\\]#][^,\\[\\]#]+)\\.([^\\.,\\[\\]#][^,\\[\\]#]*)$'
|
|
33
33
|
# [attribute_name1=attribute_value1][attribute_name2=attribute_value2]
|
|
34
|
-
|
|
34
|
+
PATTERN_FIND_four = '^\\[([^,]+)=([^,]+)\\]\\[([^,]+)=([^,]+)\\]$'
|
|
35
35
|
# E[attribute_name1=attribute_value1][attribute_name2=attribute_value2]
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
@@
|
|
39
|
-
@@
|
|
40
|
-
@@
|
|
41
|
-
@@
|
|
42
|
-
@@
|
|
43
|
-
@@
|
|
44
|
-
@@
|
|
45
|
-
@@
|
|
46
|
-
@@
|
|
36
|
+
PATTERN_FIND_five = '^([^\\.,\\[\\]#][^,\\[\\]#]+)\\[([^,]+)=([^,]+)\\]\\[([^,]+)=([^,]+)\\]$'
|
|
37
|
+
|
|
38
|
+
@@pattern_find_one = Regexp.new(PATTERN_FIND_one)
|
|
39
|
+
@@pattern_find_two_one = Regexp.new(PATTERN_FIND_two_one)
|
|
40
|
+
@@pattern_find_two_two = Regexp.new(PATTERN_FIND_two_two)
|
|
41
|
+
@@pattern_find_two_three = Regexp.new(PATTERN_FIND_two_three)
|
|
42
|
+
@@pattern_find_three_one = Regexp.new(PATTERN_FIND_three_one)
|
|
43
|
+
@@pattern_find_three_two = Regexp.new(PATTERN_FIND_three_two)
|
|
44
|
+
@@pattern_find_three_three = Regexp.new(PATTERN_FIND_three_three)
|
|
45
|
+
@@pattern_find_four = Regexp.new(PATTERN_FIND_four)
|
|
46
|
+
@@pattern_find_five = Regexp.new(PATTERN_FIND_five)
|
|
47
47
|
|
|
48
48
|
@@pattern_set_mono1 = Regexp.new('\\A[^<>]*\\Z')
|
|
49
49
|
|
|
@@ -83,7 +83,7 @@ module Meteor
|
|
|
83
83
|
|
|
84
84
|
PATTERN_UNESCAPE = '&(amp|quot|apos|gt|lt|nbsp);'
|
|
85
85
|
@@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
|
|
86
|
-
@@
|
|
86
|
+
@@pattern_br_two = Regexp.new(BR_RE)
|
|
87
87
|
|
|
88
88
|
attr_accessor :element_cache, :doc_type, :document_hook, :element_hook
|
|
89
89
|
|
|
@@ -225,16 +225,16 @@ module Meteor
|
|
|
225
225
|
if !attrs
|
|
226
226
|
case elm
|
|
227
227
|
when String, Symbol
|
|
228
|
-
|
|
228
|
+
element_one(elm.to_s)
|
|
229
229
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
230
230
|
when Meteor::Element
|
|
231
231
|
shadow(elm)
|
|
232
232
|
when Hash
|
|
233
233
|
if elm.size == ONE
|
|
234
|
-
|
|
234
|
+
element_two(elm.keys[0].to_s, elm.values[0])
|
|
235
235
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
236
236
|
elsif elm.size == TWO
|
|
237
|
-
|
|
237
|
+
element_four(elm.keys[0].to_s, elm.values[0], elm.keys[1].to_s, elm.values[1])
|
|
238
238
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
239
239
|
else
|
|
240
240
|
raise ArgumentError
|
|
@@ -244,10 +244,10 @@ module Meteor
|
|
|
244
244
|
end
|
|
245
245
|
elsif attrs.is_a?(Hash)
|
|
246
246
|
if attrs.size == ONE
|
|
247
|
-
|
|
247
|
+
element_three(elm.to_s, attrs.keys[0].to_s, attrs.values[0])
|
|
248
248
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
249
249
|
elsif attrs.size == TWO
|
|
250
|
-
|
|
250
|
+
element_five(elm.to_s, attrs.keys[0].to_s, attrs.values[0], attrs.keys[1].to_s, attrs.values[1])
|
|
251
251
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
252
252
|
else
|
|
253
253
|
@elm_ = nil
|
|
@@ -256,17 +256,17 @@ module Meteor
|
|
|
256
256
|
elsif attrs.is_a?(String) || attrs.is_a?(Symbol)
|
|
257
257
|
case args.length
|
|
258
258
|
when ZERO
|
|
259
|
-
|
|
259
|
+
element_two(elm.to_s, attrs.to_s)
|
|
260
260
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
261
261
|
|
|
262
262
|
when ONE
|
|
263
|
-
|
|
263
|
+
element_three(elm.to_s, attrs.to_s, args[0])
|
|
264
264
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
265
265
|
when TWO
|
|
266
|
-
|
|
266
|
+
element_four(elm.to_s, attrs.to_s, args[0].to_s, args[1])
|
|
267
267
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
268
268
|
when THREE
|
|
269
|
-
|
|
269
|
+
element_five(elm.to_s, attrs.to_s, args[0], args[1].to_s, args[2])
|
|
270
270
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
271
271
|
else
|
|
272
272
|
@elm_ = nil
|
|
@@ -283,7 +283,7 @@ module Meteor
|
|
|
283
283
|
# @param [String,Symbol] name tag name (タグ名)
|
|
284
284
|
# @return [Meteor::Element] element(要素)
|
|
285
285
|
#
|
|
286
|
-
def
|
|
286
|
+
def element_one(name)
|
|
287
287
|
quote_name(name)
|
|
288
288
|
|
|
289
289
|
# element search pattern (要素検索用パターン)
|
|
@@ -295,10 +295,10 @@ module Meteor
|
|
|
295
295
|
|
|
296
296
|
if @res
|
|
297
297
|
if @res[1]
|
|
298
|
-
|
|
298
|
+
element_void_one(name)
|
|
299
299
|
else
|
|
300
|
-
# puts '---
|
|
301
|
-
|
|
300
|
+
# puts '---element_normal_one'
|
|
301
|
+
element_normal_one(name)
|
|
302
302
|
end
|
|
303
303
|
# else
|
|
304
304
|
end
|
|
@@ -306,9 +306,9 @@ module Meteor
|
|
|
306
306
|
@elm_
|
|
307
307
|
end
|
|
308
308
|
|
|
309
|
-
private :
|
|
309
|
+
private :element_one
|
|
310
310
|
|
|
311
|
-
def
|
|
311
|
+
def element_normal_one(name)
|
|
312
312
|
@elm_ = Meteor::Element.new(name)
|
|
313
313
|
|
|
314
314
|
if @on_search
|
|
@@ -340,9 +340,9 @@ module Meteor
|
|
|
340
340
|
@elm_
|
|
341
341
|
end
|
|
342
342
|
|
|
343
|
-
private :
|
|
343
|
+
private :element_normal_one
|
|
344
344
|
|
|
345
|
-
def
|
|
345
|
+
def element_void_one(name)
|
|
346
346
|
# element (要素)
|
|
347
347
|
@elm_ = Meteor::Element.new(name)
|
|
348
348
|
# attribute (属性)
|
|
@@ -361,7 +361,7 @@ module Meteor
|
|
|
361
361
|
@elm_
|
|
362
362
|
end
|
|
363
363
|
|
|
364
|
-
private :
|
|
364
|
+
private :element_void_one
|
|
365
365
|
|
|
366
366
|
#
|
|
367
367
|
# get element using tag name and attribute(name="value") (要素のタグ名と属性(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -370,21 +370,21 @@ module Meteor
|
|
|
370
370
|
# @param [String] attr_value attribute value (属性値)
|
|
371
371
|
# @param [true,false] quote flag (クオート・フラグ)
|
|
372
372
|
# @return [Meteor::Element] element (要素)
|
|
373
|
-
def
|
|
373
|
+
def element_three(name, attr_name, attr_value, quote = true)
|
|
374
374
|
if quote
|
|
375
|
-
|
|
375
|
+
quote_element_three(name, attr_name, attr_value)
|
|
376
376
|
else
|
|
377
377
|
quote_name(name)
|
|
378
378
|
end
|
|
379
379
|
|
|
380
|
-
@
|
|
380
|
+
@pattern_cc_one = element_pattern_three
|
|
381
381
|
|
|
382
|
-
@pattern = Meteor::Core::Util::PatternCache.get(@
|
|
382
|
+
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_one)
|
|
383
383
|
@res1 = @pattern.match(@root.document)
|
|
384
384
|
|
|
385
385
|
if @res1 && @res1[1] || !@res1
|
|
386
|
-
@res2 =
|
|
387
|
-
@
|
|
386
|
+
@res2 = element_normal_three_two
|
|
387
|
+
@pattern_cc_two = @pattern_cc
|
|
388
388
|
|
|
389
389
|
# puts @res2.captures.length
|
|
390
390
|
# puts @res2.regexp.to_s
|
|
@@ -393,29 +393,29 @@ module Meteor
|
|
|
393
393
|
if @res1 && @res2
|
|
394
394
|
if @res1.begin(0) < @res2.begin(0)
|
|
395
395
|
@res = @res1
|
|
396
|
-
# @pattern_cc = @
|
|
396
|
+
# @pattern_cc = @pattern_cc_one
|
|
397
397
|
if @res[1]
|
|
398
|
-
|
|
398
|
+
element_void_three(name)
|
|
399
399
|
else
|
|
400
|
-
|
|
400
|
+
element_normal_three_one(name)
|
|
401
401
|
end
|
|
402
402
|
elsif @res1.begin(0) > @res2.begin(0)
|
|
403
403
|
@res = @res2
|
|
404
|
-
# @pattern_cc = @
|
|
405
|
-
|
|
404
|
+
# @pattern_cc = @pattern_cc_two
|
|
405
|
+
element_normal_three_one(name)
|
|
406
406
|
end
|
|
407
407
|
elsif @res1 && !@res2
|
|
408
408
|
@res = @res1
|
|
409
|
-
# @pattern_cc = @
|
|
409
|
+
# @pattern_cc = @pattern_cc_one
|
|
410
410
|
if @res[1]
|
|
411
|
-
|
|
411
|
+
element_void_three(name)
|
|
412
412
|
else
|
|
413
|
-
|
|
413
|
+
element_normal_three_one(name)
|
|
414
414
|
end
|
|
415
415
|
elsif @res2 && !@res1
|
|
416
416
|
@res = @res2
|
|
417
|
-
# @pattern_cc = @
|
|
418
|
-
|
|
417
|
+
# @pattern_cc = @pattern_cc_two
|
|
418
|
+
element_normal_three_one(name)
|
|
419
419
|
else
|
|
420
420
|
puts(Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message) if @error_check
|
|
421
421
|
|
|
@@ -425,22 +425,22 @@ module Meteor
|
|
|
425
425
|
@elm_
|
|
426
426
|
end
|
|
427
427
|
|
|
428
|
-
private :
|
|
428
|
+
private :element_three
|
|
429
429
|
|
|
430
|
-
def
|
|
430
|
+
def element_pattern_three
|
|
431
431
|
"<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)\\/>|<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
432
432
|
end
|
|
433
433
|
|
|
434
|
-
private :
|
|
434
|
+
private :element_pattern_three
|
|
435
435
|
|
|
436
|
-
def
|
|
436
|
+
def quote_element_three(name, attr_name, attr_value)
|
|
437
437
|
quote_name(name)
|
|
438
438
|
quote_attribute(attr_name, attr_value)
|
|
439
439
|
end
|
|
440
440
|
|
|
441
|
-
private :
|
|
441
|
+
private :quote_element_three
|
|
442
442
|
|
|
443
|
-
def
|
|
443
|
+
def element_normal_three_one(name)
|
|
444
444
|
# puts @res.captures.length
|
|
445
445
|
case @res.captures.length
|
|
446
446
|
when FOUR
|
|
@@ -488,13 +488,13 @@ module Meteor
|
|
|
488
488
|
# element (要素)
|
|
489
489
|
@elm_ = Meteor::Element.new(name)
|
|
490
490
|
@elm_.attributes = @res[1].chop
|
|
491
|
-
if @on_search
|
|
492
|
-
# attribute (属性)
|
|
493
|
-
# content (内容)
|
|
494
|
-
else
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
end
|
|
491
|
+
# if @on_search
|
|
492
|
+
# # attribute (属性)
|
|
493
|
+
# # content (内容)
|
|
494
|
+
# else
|
|
495
|
+
# # attribute (属性)
|
|
496
|
+
# # content (内容)
|
|
497
|
+
# end
|
|
498
498
|
@elm_.mixed_content = @res[3]
|
|
499
499
|
# document (全体)
|
|
500
500
|
@elm_.document = @res[0]
|
|
@@ -509,10 +509,10 @@ module Meteor
|
|
|
509
509
|
@elm_
|
|
510
510
|
end
|
|
511
511
|
|
|
512
|
-
private :
|
|
512
|
+
private :element_normal_three_one
|
|
513
513
|
|
|
514
|
-
def
|
|
515
|
-
|
|
514
|
+
def element_normal_three_two
|
|
515
|
+
element_pattern_normal_three_two
|
|
516
516
|
|
|
517
517
|
return nil if @sbuf.length == ZERO || @cnt != ZERO
|
|
518
518
|
|
|
@@ -522,34 +522,34 @@ module Meteor
|
|
|
522
522
|
@res
|
|
523
523
|
end
|
|
524
524
|
|
|
525
|
-
private :
|
|
525
|
+
private :element_normal_three_two
|
|
526
526
|
|
|
527
|
-
def
|
|
528
|
-
# @
|
|
529
|
-
# @
|
|
530
|
-
@
|
|
531
|
-
@
|
|
532
|
-
# @
|
|
533
|
-
# @
|
|
534
|
-
# @
|
|
535
|
-
@
|
|
536
|
-
@
|
|
537
|
-
# @
|
|
527
|
+
def element_pattern_normal_three_two
|
|
528
|
+
# @pattern_cc_one = String.new('') << "<" << @_name << '(\\s[^<>]*' << @_attr_name << '="'
|
|
529
|
+
# @pattern_cc_one << @_attr_value << '(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))'
|
|
530
|
+
@pattern_cc_one = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))"
|
|
531
|
+
@pattern_cc_oneb = String.new('') << '<' << @_name << '(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
|
|
532
|
+
# @pattern_cc_oneb = "<#{@_name}(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))"
|
|
533
|
+
# @pattern_cc_one_one = String.new('') << "<" << @_name << '(\\s[^<>]*' << @_attr_name << '="'
|
|
534
|
+
# @pattern_cc_one_one << @_attr_value << '"(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))('
|
|
535
|
+
@pattern_cc_one_one = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
|
|
536
|
+
@pattern_cc_one_two = String.new('') << '.*?<' << @_name << '(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
|
|
537
|
+
# @pattern_cc_one_two = ".*?<#{@_name}(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))"
|
|
538
538
|
|
|
539
|
-
@
|
|
540
|
-
# @
|
|
541
|
-
@
|
|
542
|
-
# @
|
|
543
|
-
@
|
|
544
|
-
# @
|
|
539
|
+
@pattern_cc_two = String.new('') << '<\\/' << @_name << '>'
|
|
540
|
+
# @pattern_cc_two = String.new('') << "<\\/#{@_name}>"
|
|
541
|
+
@pattern_cc_two_one = String.new('') << '.*?<\\/' << @_name << '>'
|
|
542
|
+
# @pattern_cc_two_one = ".*?<\\/#{@_name}>"
|
|
543
|
+
@pattern_cc_two_two = String.new('') << '.*?)<\\/' << @_name << '>'
|
|
544
|
+
# @pattern_cc_two_two = ".*?)<\\/#{@_name}>"
|
|
545
545
|
|
|
546
546
|
# search of normal element (内容あり要素検索)
|
|
547
|
-
@pattern = Meteor::Core::Util::PatternCache.get(@
|
|
547
|
+
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_one)
|
|
548
548
|
|
|
549
549
|
@sbuf = String.new('')
|
|
550
550
|
|
|
551
|
-
@
|
|
552
|
-
@
|
|
551
|
+
@pattern_two = Meteor::Core::Util::PatternCache.get(@pattern_cc_two)
|
|
552
|
+
@pattern_oneb = Meteor::Core::Util::PatternCache.get(@pattern_cc_oneb)
|
|
553
553
|
|
|
554
554
|
@cnt = 0
|
|
555
555
|
|
|
@@ -558,15 +558,15 @@ module Meteor
|
|
|
558
558
|
@pattern_cc = @sbuf
|
|
559
559
|
end
|
|
560
560
|
|
|
561
|
-
private :
|
|
561
|
+
private :element_pattern_normal_three_two
|
|
562
562
|
|
|
563
|
-
def
|
|
564
|
-
|
|
563
|
+
def element_void_three(name)
|
|
564
|
+
element_void_three_one(name, '"[^<>]*)\\/>')
|
|
565
565
|
end
|
|
566
566
|
|
|
567
|
-
private :
|
|
567
|
+
private :element_void_three
|
|
568
568
|
|
|
569
|
-
def
|
|
569
|
+
def element_void_three_one(name, closer)
|
|
570
570
|
# element (要素)
|
|
571
571
|
@elm_ = Meteor::Element.new(name)
|
|
572
572
|
# attribute (属性)
|
|
@@ -582,7 +582,7 @@ module Meteor
|
|
|
582
582
|
@elm_
|
|
583
583
|
end
|
|
584
584
|
|
|
585
|
-
private :
|
|
585
|
+
private :element_void_three_one
|
|
586
586
|
|
|
587
587
|
#
|
|
588
588
|
# get element using attribute(name="value") (属性(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -590,30 +590,30 @@ module Meteor
|
|
|
590
590
|
# @param [String] attr_value attribute value (属性値)
|
|
591
591
|
# @return [Meteor::Element] element (要素)
|
|
592
592
|
#
|
|
593
|
-
def
|
|
593
|
+
def element_two(attr_name, attr_value)
|
|
594
594
|
quote_attribute(attr_name, attr_value)
|
|
595
595
|
|
|
596
|
-
|
|
596
|
+
element_pattern_two
|
|
597
597
|
|
|
598
598
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
|
599
599
|
@res = @pattern.match(@root.document)
|
|
600
600
|
|
|
601
601
|
if @res
|
|
602
|
-
|
|
602
|
+
element_three(@res[1], attr_name, attr_value)
|
|
603
603
|
else
|
|
604
604
|
puts(Meteor::Exception::NoSuchElementException.new(attr_name, attr_value).message) if @error_check
|
|
605
605
|
|
|
606
606
|
@elm_ = nil
|
|
607
607
|
end
|
|
608
608
|
|
|
609
|
-
# @
|
|
609
|
+
# @pattern_cc_one = "<([^<>\"]*)(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)\\/>|<([^<>\"]*)(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)>(((?!(\\3[^<>]*>)).)*)<\\/\\3>"
|
|
610
610
|
#
|
|
611
|
-
# @pattern = Meteor::Core::Util::PatternCache.get(@
|
|
611
|
+
# @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_one)
|
|
612
612
|
# @res1 = @pattern.match(@root.document)
|
|
613
613
|
#
|
|
614
614
|
# if @res1 && @res1[1] || !@res1
|
|
615
|
-
# @res2 =
|
|
616
|
-
# @
|
|
615
|
+
# @res2 = element_normal_two_two
|
|
616
|
+
# @pattern_cc_two = @pattern_cc
|
|
617
617
|
#
|
|
618
618
|
# # puts @res2.captures.length
|
|
619
619
|
# # puts @res2.regexp.to_s
|
|
@@ -622,29 +622,29 @@ module Meteor
|
|
|
622
622
|
# if @res1 && @res2
|
|
623
623
|
# if @res1.begin(0) < @res2.begin(0)
|
|
624
624
|
# @res = @res1
|
|
625
|
-
# # @pattern_cc = @
|
|
625
|
+
# # @pattern_cc = @pattern_cc_one
|
|
626
626
|
# if @res[1]
|
|
627
|
-
#
|
|
627
|
+
# element_void_two
|
|
628
628
|
# else
|
|
629
|
-
#
|
|
629
|
+
# element_normal_two_one
|
|
630
630
|
# end
|
|
631
631
|
# elsif @res1.begin(0) > @res2.begin(0)
|
|
632
632
|
# @res = @res2
|
|
633
|
-
# # @pattern_cc = @
|
|
634
|
-
#
|
|
633
|
+
# # @pattern_cc = @pattern_cc_two
|
|
634
|
+
# element_normal_two_one
|
|
635
635
|
# end
|
|
636
636
|
# elsif @res1 && !@res2
|
|
637
637
|
# @res = @res1
|
|
638
|
-
# # @pattern_cc = @
|
|
638
|
+
# # @pattern_cc = @pattern_cc_one
|
|
639
639
|
# if @res[1]
|
|
640
|
-
#
|
|
640
|
+
# element_void_two
|
|
641
641
|
# else
|
|
642
|
-
#
|
|
642
|
+
# element_normal_two_one
|
|
643
643
|
# end
|
|
644
644
|
# elsif @res2 && !@res1
|
|
645
645
|
# @res = @res2
|
|
646
|
-
# # @pattern_cc = @
|
|
647
|
-
#
|
|
646
|
+
# # @pattern_cc = @pattern_cc_two
|
|
647
|
+
# element_normal_two_one
|
|
648
648
|
# else
|
|
649
649
|
# if @error_check
|
|
650
650
|
# puts Meteor::Exception::NoSuchElementException.new(attr_name, attr_value).message
|
|
@@ -655,7 +655,7 @@ module Meteor
|
|
|
655
655
|
@elm_
|
|
656
656
|
end
|
|
657
657
|
|
|
658
|
-
private :
|
|
658
|
+
private :element_two
|
|
659
659
|
|
|
660
660
|
def quote_name(name)
|
|
661
661
|
@_name = Regexp.quote(name)
|
|
@@ -670,15 +670,15 @@ module Meteor
|
|
|
670
670
|
|
|
671
671
|
private :quote_attribute
|
|
672
672
|
|
|
673
|
-
def
|
|
673
|
+
def element_pattern_two
|
|
674
674
|
# # @pattern_cc = String.new('') << '<([^<>"]*)\\s[^<>]*' << @_attr_name << '="' << @_attr_value << '(?:[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
|
|
675
675
|
# @pattern_cc = String.new('') << '<([^<>"]*)\\s[^<>]*' << @_attr_name << '="' << @_attr_value << '"'
|
|
676
676
|
@pattern_cc = "<([^<>\"]*)\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\""
|
|
677
677
|
end
|
|
678
678
|
|
|
679
|
-
private :
|
|
679
|
+
private :element_pattern_two
|
|
680
680
|
|
|
681
|
-
# def
|
|
681
|
+
# def element_normal_two_one
|
|
682
682
|
# # puts @res.captures.length
|
|
683
683
|
# case @res.captures.length
|
|
684
684
|
# when FOUR
|
|
@@ -740,20 +740,20 @@ module Meteor
|
|
|
740
740
|
# @elm_
|
|
741
741
|
# end
|
|
742
742
|
#
|
|
743
|
-
# private :
|
|
743
|
+
# private :element_normal_two_one
|
|
744
744
|
#
|
|
745
|
-
# def
|
|
746
|
-
# # @
|
|
747
|
-
# # @
|
|
748
|
-
# @
|
|
745
|
+
# def element_normal_two_two
|
|
746
|
+
# # @pattern_cc_one = String.new('') << "<" << @_name << '(\\s[^<>]*' << @_attr_name << '="'
|
|
747
|
+
# # @pattern_cc_one << @_attr_value << '(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))'
|
|
748
|
+
# @pattern_cc_one = "<([^<>\"]*)(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))"
|
|
749
749
|
#
|
|
750
750
|
# # search of normal element (内容あり要素検索)
|
|
751
|
-
# @pattern = Meteor::Core::Util::PatternCache.get(@
|
|
751
|
+
# @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_one)
|
|
752
752
|
# @sbuf = String.new('')
|
|
753
753
|
#
|
|
754
754
|
# @cnt = 0
|
|
755
755
|
#
|
|
756
|
-
#
|
|
756
|
+
# create_element_pattern_two(2)
|
|
757
757
|
#
|
|
758
758
|
# @pattern_cc = @sbuf
|
|
759
759
|
#
|
|
@@ -765,30 +765,30 @@ module Meteor
|
|
|
765
765
|
# @res = @pattern.match(@root.document)
|
|
766
766
|
# end
|
|
767
767
|
#
|
|
768
|
-
# private :
|
|
768
|
+
# private :element_normal_two_two
|
|
769
769
|
#
|
|
770
|
-
# def
|
|
771
|
-
# @
|
|
770
|
+
# def create_pattern_two(args_cnt)
|
|
771
|
+
# @pattern_cc_oneb = String.new('') << "<" << @_name << '(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
|
|
772
772
|
#
|
|
773
|
-
# # @
|
|
774
|
-
# # @
|
|
775
|
-
# @
|
|
776
|
-
# @
|
|
777
|
-
# @
|
|
778
|
-
# @
|
|
779
|
-
# @
|
|
773
|
+
# # @pattern_cc_one_one = String.new('') << "<" << @_name << '(\\s[^<>]*' << @_attr_name << '="'
|
|
774
|
+
# # @pattern_cc_one_one << @_attr_value << '"(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))('
|
|
775
|
+
# @pattern_cc_one_one = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
|
|
776
|
+
# @pattern_cc_one_two = String.new('') << '.*?<' << @_name << '(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
|
|
777
|
+
# @pattern_cc_two = String.new('') << '<\\/' << @_name << '>'
|
|
778
|
+
# @pattern_cc_two_one = String.new('') << '.*?<\/' << @_name << '>'
|
|
779
|
+
# @pattern_cc_two_two = String.new('') << '.*?)<\/' << @_name << '>'
|
|
780
780
|
#
|
|
781
|
-
# @
|
|
782
|
-
# @
|
|
781
|
+
# @pattern_two = Meteor::Core::Util::PatternCache.get(@pattern_cc_two)
|
|
782
|
+
# @pattern_oneb = Meteor::Core::Util::PatternCache.get(@pattern_cc_oneb)
|
|
783
783
|
# end
|
|
784
784
|
#
|
|
785
|
-
# def
|
|
786
|
-
#
|
|
785
|
+
# def element_void_two
|
|
786
|
+
# element_void_two_one('"[^<>]*\\/>')
|
|
787
787
|
# end
|
|
788
788
|
#
|
|
789
|
-
# private :
|
|
789
|
+
# private :element_void_two
|
|
790
790
|
#
|
|
791
|
-
# def
|
|
791
|
+
# def element_void_two_one(closer)
|
|
792
792
|
# # element (要素)
|
|
793
793
|
# @elm_ = Element.new(@res[1])
|
|
794
794
|
# # attribute (属性)
|
|
@@ -803,7 +803,7 @@ module Meteor
|
|
|
803
803
|
# @elm_
|
|
804
804
|
# end
|
|
805
805
|
#
|
|
806
|
-
# private :
|
|
806
|
+
# private :element_void_two_one
|
|
807
807
|
|
|
808
808
|
#
|
|
809
809
|
# get element using tag name and attribute1,2(name="value") (要素のタグ名と属性1・属性2(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -814,17 +814,17 @@ module Meteor
|
|
|
814
814
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
|
815
815
|
# @return [Meteor::Element] element (要素)
|
|
816
816
|
#
|
|
817
|
-
def
|
|
818
|
-
|
|
817
|
+
def element_five(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
|
818
|
+
quote_element_five(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
|
819
819
|
|
|
820
|
-
@
|
|
820
|
+
@pattern_cc_one = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")[^<>]*)\\/>|<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
821
821
|
|
|
822
|
-
@pattern = Meteor::Core::Util::PatternCache.get(@
|
|
822
|
+
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_one)
|
|
823
823
|
@res1 = @pattern.match(@root.document)
|
|
824
824
|
|
|
825
825
|
if @res1 && @res1[1] || !@res1
|
|
826
|
-
@res2 =
|
|
827
|
-
@
|
|
826
|
+
@res2 = element_normal_five_two
|
|
827
|
+
@pattern_cc_two = @pattern_cc
|
|
828
828
|
|
|
829
829
|
# puts @res2.captures.length
|
|
830
830
|
# puts @res2.regexp.to_s
|
|
@@ -833,29 +833,29 @@ module Meteor
|
|
|
833
833
|
if @res1 && @res2
|
|
834
834
|
if @res1.begin(0) < @res2.begin(0)
|
|
835
835
|
@res = @res1
|
|
836
|
-
# @pattern_cc = @
|
|
836
|
+
# @pattern_cc = @pattern_cc_one
|
|
837
837
|
if @res[1]
|
|
838
|
-
|
|
838
|
+
element_void_five(name)
|
|
839
839
|
else
|
|
840
|
-
|
|
840
|
+
element_normal_five_one(name)
|
|
841
841
|
end
|
|
842
842
|
elsif @res1.begin(0) > @res2.begin(0)
|
|
843
843
|
@res = @res2
|
|
844
|
-
# @pattern_cc = @
|
|
845
|
-
|
|
844
|
+
# @pattern_cc = @pattern_cc_two
|
|
845
|
+
element_normal_five_one(name)
|
|
846
846
|
end
|
|
847
847
|
elsif @res1 && !@res2
|
|
848
848
|
@res = @res1
|
|
849
|
-
# @pattern_cc = @
|
|
849
|
+
# @pattern_cc = @pattern_cc_one
|
|
850
850
|
if @res[1]
|
|
851
|
-
|
|
851
|
+
element_void_five(name)
|
|
852
852
|
else
|
|
853
|
-
|
|
853
|
+
element_normal_five_one(name)
|
|
854
854
|
end
|
|
855
855
|
elsif @res2 && !@res1
|
|
856
856
|
@res = @res2
|
|
857
|
-
# @pattern_cc = @
|
|
858
|
-
|
|
857
|
+
# @pattern_cc = @pattern_cc_two
|
|
858
|
+
element_normal_five_one(name)
|
|
859
859
|
else
|
|
860
860
|
puts(Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message) if @error_check
|
|
861
861
|
|
|
@@ -865,9 +865,9 @@ module Meteor
|
|
|
865
865
|
@elm_
|
|
866
866
|
end
|
|
867
867
|
|
|
868
|
-
private :
|
|
868
|
+
private :element_five
|
|
869
869
|
|
|
870
|
-
def
|
|
870
|
+
def quote_element_five(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
|
871
871
|
quote_name(name)
|
|
872
872
|
@_attr_name1 = Regexp.quote(attr_name1)
|
|
873
873
|
@_attr_name2 = Regexp.quote(attr_name2)
|
|
@@ -875,9 +875,9 @@ module Meteor
|
|
|
875
875
|
@_attr_value2 = Regexp.quote(attr_value2)
|
|
876
876
|
end
|
|
877
877
|
|
|
878
|
-
private :
|
|
878
|
+
private :quote_element_five
|
|
879
879
|
|
|
880
|
-
def
|
|
880
|
+
def element_normal_five_one(name)
|
|
881
881
|
# puts @res.captures.length
|
|
882
882
|
case @res.captures.length
|
|
883
883
|
when FOUR
|
|
@@ -942,10 +942,10 @@ module Meteor
|
|
|
942
942
|
@elm_
|
|
943
943
|
end
|
|
944
944
|
|
|
945
|
-
private :
|
|
945
|
+
private :element_normal_five_one
|
|
946
946
|
|
|
947
|
-
def
|
|
948
|
-
|
|
947
|
+
def element_normal_five_two
|
|
948
|
+
element_pattern_normal_five_two
|
|
949
949
|
|
|
950
950
|
return nil if @sbuf.length == ZERO || @cnt != ZERO
|
|
951
951
|
|
|
@@ -955,56 +955,56 @@ module Meteor
|
|
|
955
955
|
@res
|
|
956
956
|
end
|
|
957
957
|
|
|
958
|
-
private :
|
|
959
|
-
|
|
960
|
-
def
|
|
961
|
-
# @
|
|
962
|
-
# @
|
|
963
|
-
# @
|
|
964
|
-
# @
|
|
965
|
-
# @
|
|
966
|
-
@
|
|
967
|
-
@
|
|
968
|
-
# @
|
|
969
|
-
|
|
970
|
-
# @
|
|
971
|
-
# @
|
|
972
|
-
# @
|
|
973
|
-
# @
|
|
974
|
-
# @
|
|
975
|
-
@
|
|
976
|
-
@
|
|
977
|
-
@
|
|
978
|
-
@
|
|
979
|
-
@
|
|
980
|
-
|
|
981
|
-
# @
|
|
982
|
-
# @
|
|
983
|
-
# @
|
|
984
|
-
# @
|
|
958
|
+
private :element_normal_five_two
|
|
959
|
+
|
|
960
|
+
def element_pattern_normal_five_two
|
|
961
|
+
# @pattern_cc_one = String.new('') << "<" << @_name << '(\\s[^<>]*(?:' << @_attr_name1 << '="'
|
|
962
|
+
# @pattern_cc_one << @_attr_value1 << '"[^<>]*' << @_attr_name2 << '="'
|
|
963
|
+
# @pattern_cc_one << @_attr_value2 << '"|' << @_attr_name2 << '="'
|
|
964
|
+
# @pattern_cc_one << @_attr_value2 << '"[^<>]*' << @_attr_name1 << '="'
|
|
965
|
+
# @pattern_cc_one << @_attr_value1 << '")([^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>)))'
|
|
966
|
+
@pattern_cc_one = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")([^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>)))"
|
|
967
|
+
@pattern_cc_oneb = String.new('') << '<' << @_name << '(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
|
|
968
|
+
# @pattern_cc_oneb = "<#{@_name}(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))"
|
|
969
|
+
|
|
970
|
+
# @pattern_cc_one_one = String.new('') << "<" << @_name << '(\\s[^<>]*(?:' << @_attr_name1 << '="'
|
|
971
|
+
# @pattern_cc_one_one << @_attr_value1 << '"[^<>]*' << @_attr_name2 << '="'
|
|
972
|
+
# @pattern_cc_one_one << @_attr_value2 << '"|' << @_attr_name2 << '="'
|
|
973
|
+
# @pattern_cc_one_one << @_attr_value2 << '"[^<>]*' << @_attr_name1 << '="'
|
|
974
|
+
# @pattern_cc_one_one << @_attr_value1 << '")(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))('
|
|
975
|
+
@pattern_cc_one_one = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
|
|
976
|
+
@pattern_cc_one_two = String.new('') << '.*?<' << @_name << '(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
|
|
977
|
+
@pattern_cc_two = String.new('') << '<\\/' << @_name << '>'
|
|
978
|
+
@pattern_cc_two_one = String.new('') << '.*?<\\/' << @_name << '>'
|
|
979
|
+
@pattern_cc_two_two = String.new('') << '.*?)<\\/' << @_name << '>'
|
|
980
|
+
|
|
981
|
+
# @pattern_cc_one_two = ".*?<#{@_name}(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))"
|
|
982
|
+
# @pattern_cc_two = String.new('') << "<\\/#{@_name}>"
|
|
983
|
+
# @pattern_cc_two_one = ".*?<\\/#{@_name}>"
|
|
984
|
+
# @pattern_cc_two_two = ".*?)<\\/#{@_name}>"
|
|
985
985
|
|
|
986
986
|
# search of normal element (内容あり要素検索)
|
|
987
|
-
@pattern = Meteor::Core::Util::PatternCache.get(@
|
|
987
|
+
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_one)
|
|
988
988
|
|
|
989
989
|
@sbuf = String.new('')
|
|
990
990
|
|
|
991
|
-
@
|
|
992
|
-
@
|
|
991
|
+
@pattern_two = Meteor::Core::Util::PatternCache.get(@pattern_cc_two)
|
|
992
|
+
@pattern_oneb = Meteor::Core::Util::PatternCache.get(@pattern_cc_oneb)
|
|
993
993
|
@cnt = 0
|
|
994
994
|
|
|
995
995
|
create_element_pattern
|
|
996
996
|
@pattern_cc = @sbuf
|
|
997
997
|
end
|
|
998
998
|
|
|
999
|
-
private :
|
|
999
|
+
private :element_pattern_normal_five_two
|
|
1000
1000
|
|
|
1001
|
-
def
|
|
1002
|
-
|
|
1001
|
+
def element_void_five(name)
|
|
1002
|
+
element_void_five_one(name, '")[^<>]*)\\/>')
|
|
1003
1003
|
end
|
|
1004
1004
|
|
|
1005
|
-
private :
|
|
1005
|
+
private :element_void_five
|
|
1006
1006
|
|
|
1007
|
-
def
|
|
1007
|
+
def element_void_five_one(name, closer)
|
|
1008
1008
|
# element (要素)
|
|
1009
1009
|
@elm_ = Meteor::Element.new(name)
|
|
1010
1010
|
# attribute (属性)
|
|
@@ -1024,7 +1024,7 @@ module Meteor
|
|
|
1024
1024
|
@elm_
|
|
1025
1025
|
end
|
|
1026
1026
|
|
|
1027
|
-
private :
|
|
1027
|
+
private :element_void_five_one
|
|
1028
1028
|
|
|
1029
1029
|
#
|
|
1030
1030
|
# get element using attribute1,2(name="value") (属性1・属性2(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -1034,17 +1034,17 @@ module Meteor
|
|
|
1034
1034
|
# @param [String]attr_value2 attribute value2 (属性値2)
|
|
1035
1035
|
# @return [Meteor::Element] element (要素)
|
|
1036
1036
|
#
|
|
1037
|
-
def
|
|
1038
|
-
|
|
1037
|
+
def element_four(attr_name1, attr_value1, attr_name2, attr_value2)
|
|
1038
|
+
quote_element_four(attr_name1, attr_value1, attr_name2, attr_value2)
|
|
1039
1039
|
|
|
1040
|
-
|
|
1040
|
+
element_pattern_four
|
|
1041
1041
|
|
|
1042
1042
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
|
1043
1043
|
@res = @pattern.match(@root.document)
|
|
1044
1044
|
|
|
1045
1045
|
if @res
|
|
1046
|
-
# @elm_ =
|
|
1047
|
-
|
|
1046
|
+
# @elm_ = element_five(@res[1], attr_name1, attr_value1,attr_name2, attr_value2)
|
|
1047
|
+
element_five(@res[1], attr_name1, attr_value1, attr_name2, attr_value2)
|
|
1048
1048
|
else
|
|
1049
1049
|
if @error_check
|
|
1050
1050
|
puts(
|
|
@@ -1058,18 +1058,18 @@ module Meteor
|
|
|
1058
1058
|
@elm_
|
|
1059
1059
|
end
|
|
1060
1060
|
|
|
1061
|
-
private :
|
|
1061
|
+
private :element_four
|
|
1062
1062
|
|
|
1063
|
-
def
|
|
1063
|
+
def quote_element_four(attr_name1, attr_value1, attr_name2, attr_value2)
|
|
1064
1064
|
@_attr_name1 = Regexp.quote(attr_name1)
|
|
1065
1065
|
@_attr_name2 = Regexp.quote(attr_name2)
|
|
1066
1066
|
@_attr_value1 = Regexp.quote(attr_value1)
|
|
1067
1067
|
@_attr_value2 = Regexp.quote(attr_value2)
|
|
1068
1068
|
end
|
|
1069
1069
|
|
|
1070
|
-
private :
|
|
1070
|
+
private :quote_element_four
|
|
1071
1071
|
|
|
1072
|
-
def
|
|
1072
|
+
def element_pattern_four
|
|
1073
1073
|
# @pattern_cc = String.new('') << '<([^<>"]*)\\s([^<>]*(' << @_attr_name1 << '="'
|
|
1074
1074
|
# @pattern_cc << @_attr_value1 << '"[^<>]*' << @_attr_name2 << '="'
|
|
1075
1075
|
# @pattern_cc << @_attr_value2 << '"|' << @_attr_name2 << '="'
|
|
@@ -1078,7 +1078,7 @@ module Meteor
|
|
|
1078
1078
|
@pattern_cc = "<([^<>\"]*)\\s[^<>]*(#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")"
|
|
1079
1079
|
end
|
|
1080
1080
|
|
|
1081
|
-
private :
|
|
1081
|
+
private :element_pattern_four
|
|
1082
1082
|
|
|
1083
1083
|
def create_element_pattern
|
|
1084
1084
|
@position = 0
|
|
@@ -1087,48 +1087,48 @@ module Meteor
|
|
|
1087
1087
|
if @res
|
|
1088
1088
|
if @cnt > ZERO
|
|
1089
1089
|
@position2 = @res.end(0)
|
|
1090
|
-
@res = @
|
|
1090
|
+
@res = @pattern_two.match(@root.document, @position)
|
|
1091
1091
|
|
|
1092
1092
|
if @res
|
|
1093
1093
|
@position = @res.end(0)
|
|
1094
1094
|
|
|
1095
1095
|
if @position > @position2
|
|
1096
|
-
@sbuf << @
|
|
1096
|
+
@sbuf << @pattern_cc_one_two
|
|
1097
1097
|
@cnt += 1
|
|
1098
1098
|
@position = @position2
|
|
1099
1099
|
else
|
|
1100
1100
|
@cnt -= ONE
|
|
1101
1101
|
|
|
1102
1102
|
if @cnt != ZERO
|
|
1103
|
-
@sbuf << @
|
|
1103
|
+
@sbuf << @pattern_cc_two_one
|
|
1104
1104
|
else
|
|
1105
|
-
@sbuf << @
|
|
1105
|
+
@sbuf << @pattern_cc_two_two
|
|
1106
1106
|
break
|
|
1107
1107
|
end
|
|
1108
1108
|
end
|
|
1109
1109
|
else
|
|
1110
|
-
@sbuf << @
|
|
1110
|
+
@sbuf << @pattern_cc_one_two
|
|
1111
1111
|
@cnt += 1
|
|
1112
1112
|
@position = @position2
|
|
1113
1113
|
end
|
|
1114
1114
|
else
|
|
1115
1115
|
@position = @res.end(0)
|
|
1116
|
-
@sbuf << @
|
|
1116
|
+
@sbuf << @pattern_cc_one_one
|
|
1117
1117
|
@cnt += ONE
|
|
1118
1118
|
end
|
|
1119
1119
|
else
|
|
1120
1120
|
break if @cnt == ZERO
|
|
1121
1121
|
|
|
1122
|
-
@res = @
|
|
1122
|
+
@res = @pattern_two.match(@root.document, @position)
|
|
1123
1123
|
|
|
1124
1124
|
break unless @res
|
|
1125
1125
|
|
|
1126
1126
|
@cnt -= ONE
|
|
1127
1127
|
|
|
1128
1128
|
if @cnt != ZERO
|
|
1129
|
-
@sbuf << @
|
|
1129
|
+
@sbuf << @pattern_cc_two_one
|
|
1130
1130
|
else
|
|
1131
|
-
@sbuf << @
|
|
1131
|
+
@sbuf << @pattern_cc_two_two
|
|
1132
1132
|
break
|
|
1133
1133
|
end
|
|
1134
1134
|
|
|
@@ -1136,40 +1136,40 @@ module Meteor
|
|
|
1136
1136
|
|
|
1137
1137
|
end
|
|
1138
1138
|
|
|
1139
|
-
@pattern = @
|
|
1139
|
+
@pattern = @pattern_oneb
|
|
1140
1140
|
end
|
|
1141
1141
|
end
|
|
1142
1142
|
|
|
1143
1143
|
private :create_element_pattern
|
|
1144
1144
|
|
|
1145
|
-
# def
|
|
1145
|
+
# def create_element_pattern_two(args_cnt)
|
|
1146
1146
|
# @position = 0
|
|
1147
1147
|
#
|
|
1148
1148
|
# while (@res = @pattern.match(@root.document, @position)) || @cnt > ZERO
|
|
1149
1149
|
# if @res
|
|
1150
1150
|
# if @cnt > ZERO
|
|
1151
1151
|
# @position2 = @res.end(0)
|
|
1152
|
-
# @res = @
|
|
1152
|
+
# @res = @pattern_two.match(@root.document, @position)
|
|
1153
1153
|
#
|
|
1154
1154
|
# if @res
|
|
1155
1155
|
# @position = @res.end(0)
|
|
1156
1156
|
#
|
|
1157
1157
|
# if @position > @position2
|
|
1158
|
-
# @sbuf << @
|
|
1158
|
+
# @sbuf << @pattern_cc_one_two
|
|
1159
1159
|
# @cnt += 1
|
|
1160
1160
|
# @position = @position2
|
|
1161
1161
|
# else
|
|
1162
1162
|
# @cnt -= ONE
|
|
1163
1163
|
#
|
|
1164
1164
|
# if @cnt != ZERO
|
|
1165
|
-
# @sbuf << @
|
|
1165
|
+
# @sbuf << @pattern_cc_two_one
|
|
1166
1166
|
# else
|
|
1167
|
-
# @sbuf << @
|
|
1167
|
+
# @sbuf << @pattern_cc_two_two
|
|
1168
1168
|
# break
|
|
1169
1169
|
# end
|
|
1170
1170
|
# end
|
|
1171
1171
|
# else
|
|
1172
|
-
# @sbuf << @
|
|
1172
|
+
# @sbuf << @pattern_cc_one_two
|
|
1173
1173
|
# @cnt += 1
|
|
1174
1174
|
# @position = @position2
|
|
1175
1175
|
# end
|
|
@@ -1177,9 +1177,9 @@ module Meteor
|
|
|
1177
1177
|
# @position = @res.end(0)
|
|
1178
1178
|
# @_name = @res[1]
|
|
1179
1179
|
#
|
|
1180
|
-
#
|
|
1180
|
+
# create_pattern_two(args_cnt)
|
|
1181
1181
|
#
|
|
1182
|
-
# @sbuf << @
|
|
1182
|
+
# @sbuf << @pattern_cc_one_one
|
|
1183
1183
|
# @cnt += ONE
|
|
1184
1184
|
# end
|
|
1185
1185
|
# else
|
|
@@ -1187,15 +1187,15 @@ module Meteor
|
|
|
1187
1187
|
# break
|
|
1188
1188
|
# end
|
|
1189
1189
|
#
|
|
1190
|
-
# @res = @
|
|
1190
|
+
# @res = @pattern_two.match(@root.document, @position)
|
|
1191
1191
|
#
|
|
1192
1192
|
# if @res
|
|
1193
1193
|
# @cnt -= ONE
|
|
1194
1194
|
#
|
|
1195
1195
|
# if @cnt != ZERO
|
|
1196
|
-
# @sbuf << @
|
|
1196
|
+
# @sbuf << @pattern_cc_two_one
|
|
1197
1197
|
# else
|
|
1198
|
-
# @sbuf << @
|
|
1198
|
+
# @sbuf << @pattern_cc_two_two
|
|
1199
1199
|
# break
|
|
1200
1200
|
# end
|
|
1201
1201
|
#
|
|
@@ -1205,16 +1205,16 @@ module Meteor
|
|
|
1205
1205
|
# end
|
|
1206
1206
|
# end
|
|
1207
1207
|
#
|
|
1208
|
-
# @pattern = @
|
|
1208
|
+
# @pattern = @pattern_oneb
|
|
1209
1209
|
# end
|
|
1210
1210
|
# end
|
|
1211
1211
|
#
|
|
1212
|
-
# private :
|
|
1212
|
+
# private :create_element_pattern_two
|
|
1213
1213
|
#
|
|
1214
|
-
# # def
|
|
1214
|
+
# # def create_pattern_two
|
|
1215
1215
|
# # end
|
|
1216
1216
|
#
|
|
1217
|
-
# # private :
|
|
1217
|
+
# # private :create_pattern_two
|
|
1218
1218
|
|
|
1219
1219
|
# get elements (要素を取得する)
|
|
1220
1220
|
# @overload elements(name)
|
|
@@ -1308,15 +1308,15 @@ module Meteor
|
|
|
1308
1308
|
|
|
1309
1309
|
case args.size
|
|
1310
1310
|
when ONE
|
|
1311
|
-
@elm_ =
|
|
1311
|
+
@elm_ = element_one(*args)
|
|
1312
1312
|
when TWO
|
|
1313
|
-
@elm_ =
|
|
1313
|
+
@elm_ = element_two(*args)
|
|
1314
1314
|
when THREE
|
|
1315
|
-
@elm_ =
|
|
1315
|
+
@elm_ = element_three(*args)
|
|
1316
1316
|
when FOUR
|
|
1317
|
-
@elm_ =
|
|
1317
|
+
@elm_ = element_four(*args)
|
|
1318
1318
|
when FIVE
|
|
1319
|
-
@elm_ =
|
|
1319
|
+
@elm_ = element_five(*args)
|
|
1320
1320
|
end
|
|
1321
1321
|
|
|
1322
1322
|
return elm_arr unless @elm_
|
|
@@ -1336,23 +1336,23 @@ module Meteor
|
|
|
1336
1336
|
case args.size
|
|
1337
1337
|
when ONE
|
|
1338
1338
|
if @elm_.normal
|
|
1339
|
-
|
|
1339
|
+
element_normal_one(@elm_.name)
|
|
1340
1340
|
else
|
|
1341
|
-
|
|
1341
|
+
element_void_one(@elm_.name)
|
|
1342
1342
|
end
|
|
1343
1343
|
|
|
1344
1344
|
when TWO, THREE
|
|
1345
1345
|
if @elm_.normal
|
|
1346
|
-
|
|
1346
|
+
element_normal_three_one(@elm_.name)
|
|
1347
1347
|
else
|
|
1348
|
-
|
|
1348
|
+
element_void_three(@elm_.name)
|
|
1349
1349
|
end
|
|
1350
1350
|
|
|
1351
1351
|
when FOUR, FIVE
|
|
1352
1352
|
if @elm_.normal
|
|
1353
|
-
|
|
1353
|
+
element_normal_five_one(@elm_.name)
|
|
1354
1354
|
else
|
|
1355
|
-
|
|
1355
|
+
element_void_five(@elm_.name)
|
|
1356
1356
|
end
|
|
1357
1357
|
end
|
|
1358
1358
|
|
|
@@ -1383,31 +1383,31 @@ module Meteor
|
|
|
1383
1383
|
case open_count
|
|
1384
1384
|
when ZERO
|
|
1385
1385
|
if selector.count('#.').zero?
|
|
1386
|
-
elements_(@res[1]) if (@res = @@
|
|
1386
|
+
elements_(@res[1]) if (@res = @@pattern_find_one.match(selector))
|
|
1387
1387
|
elsif selector.count('#') == 1
|
|
1388
1388
|
if selector[0] == '#'
|
|
1389
|
-
elements_('id', @res[1]) if (@res = @@
|
|
1390
|
-
elsif (@res = @@
|
|
1389
|
+
elements_('id', @res[1]) if (@res = @@pattern_find_two_one.match(selector))
|
|
1390
|
+
elsif (@res = @@pattern_find_three_two.match(selector))
|
|
1391
1391
|
elements_(@res[1], 'id', @res[2])
|
|
1392
1392
|
end
|
|
1393
1393
|
elsif selector.count('.') == 1
|
|
1394
1394
|
if selector[0] == '.'
|
|
1395
|
-
elements_('class', @res[1]) if (@res = @@
|
|
1396
|
-
elsif (@res = @@
|
|
1395
|
+
elements_('class', @res[1]) if (@res = @@pattern_find_two_two.match(selector))
|
|
1396
|
+
elsif (@res = @@pattern_find_three_three.match(selector))
|
|
1397
1397
|
elements_(@res[1], 'class', @res[2])
|
|
1398
1398
|
end
|
|
1399
1399
|
end
|
|
1400
1400
|
|
|
1401
1401
|
when ONE
|
|
1402
1402
|
if selector[0] == '['
|
|
1403
|
-
elements_(@res[1], @res[2]) if (@res = @@
|
|
1404
|
-
elsif (@res = @@
|
|
1403
|
+
elements_(@res[1], @res[2]) if (@res = @@pattern_find_two_three.match(selector))
|
|
1404
|
+
elsif (@res = @@pattern_find_three_one.match(selector))
|
|
1405
1405
|
elements_(@res[1], @res[2], @res[3])
|
|
1406
1406
|
end
|
|
1407
1407
|
when 2
|
|
1408
1408
|
if selector[0] == '['
|
|
1409
|
-
elements_(@res[1], @res[2], @res[3], @res[4]) if (@res = @@
|
|
1410
|
-
elsif (@res = @@
|
|
1409
|
+
elements_(@res[1], @res[2], @res[3], @res[4]) if (@res = @@pattern_find_four.match(selector))
|
|
1410
|
+
elsif (@res = @@pattern_find_five.match(selector))
|
|
1411
1411
|
elements_(@res[1], @res[2], @res[3], @res[4], @res[5])
|
|
1412
1412
|
end
|
|
1413
1413
|
end
|
|
@@ -1439,7 +1439,7 @@ module Meteor
|
|
|
1439
1439
|
when ONE
|
|
1440
1440
|
if !args[0].nil?
|
|
1441
1441
|
elm.document_sync = true
|
|
1442
|
-
|
|
1442
|
+
set_attribute_three(elm, attr.to_s, args[0])
|
|
1443
1443
|
else
|
|
1444
1444
|
remove_attr(elm, attr.to_s)
|
|
1445
1445
|
end
|
|
@@ -1447,14 +1447,14 @@ module Meteor
|
|
|
1447
1447
|
elsif attr.is_a?(Hash) && attr.size == 1
|
|
1448
1448
|
if !attr.values[0].nil?
|
|
1449
1449
|
elm.document_sync = true
|
|
1450
|
-
|
|
1450
|
+
set_attribute_three(elm, attr.keys[0].to_s, attr.values[0])
|
|
1451
1451
|
else
|
|
1452
1452
|
remove_attr(elm, attr.keys[0].to_s)
|
|
1453
1453
|
end
|
|
1454
1454
|
# elsif attrs.kind_of?(Hash) && attrs.size >= 1
|
|
1455
1455
|
# elm.document_sync = true
|
|
1456
1456
|
# attrs.each{|name,value|
|
|
1457
|
-
#
|
|
1457
|
+
# set_attribute_three(elm,name,value)
|
|
1458
1458
|
# }
|
|
1459
1459
|
else
|
|
1460
1460
|
raise ArgumentError
|
|
@@ -1468,7 +1468,7 @@ module Meteor
|
|
|
1468
1468
|
# @param [String,true,false] attr_value attribute value (属性値)
|
|
1469
1469
|
# @return [Meteor::Element] element (要素)
|
|
1470
1470
|
#
|
|
1471
|
-
def
|
|
1471
|
+
def set_attribute_three(elm, attr_name, attr_value)
|
|
1472
1472
|
unless elm.cx
|
|
1473
1473
|
attr_value = escape(attr_value.to_s)
|
|
1474
1474
|
# update attributes (属性群の更新)
|
|
@@ -1478,7 +1478,7 @@ module Meteor
|
|
|
1478
1478
|
elm
|
|
1479
1479
|
end
|
|
1480
1480
|
|
|
1481
|
-
private :
|
|
1481
|
+
private :set_attribute_three
|
|
1482
1482
|
|
|
1483
1483
|
def edit_attrs_(elm, attr_name, attr_value)
|
|
1484
1484
|
# attribute search (属性検索)
|
|
@@ -1553,7 +1553,7 @@ module Meteor
|
|
|
1553
1553
|
|
|
1554
1554
|
if args[0].size == 1
|
|
1555
1555
|
elm.document_sync = true
|
|
1556
|
-
|
|
1556
|
+
set_attribute_three(elm, args[0].keys[0].to_s, args[0].values[0])
|
|
1557
1557
|
elsif args[0].size >= 1
|
|
1558
1558
|
set_attrs(elm, args[0])
|
|
1559
1559
|
else
|
|
@@ -1592,7 +1592,7 @@ module Meteor
|
|
|
1592
1592
|
unless elm.cx
|
|
1593
1593
|
elm.document_sync = true
|
|
1594
1594
|
attr_map.each do |name, value|
|
|
1595
|
-
|
|
1595
|
+
set_attribute_three(elm, name.to_s, value)
|
|
1596
1596
|
end
|
|
1597
1597
|
end
|
|
1598
1598
|
|
|
@@ -1689,20 +1689,20 @@ module Meteor
|
|
|
1689
1689
|
case args.length
|
|
1690
1690
|
when ONE
|
|
1691
1691
|
# if args[0].kind_of?(Meteor::Element)
|
|
1692
|
-
|
|
1692
|
+
get_content_one(args[0])
|
|
1693
1693
|
# else
|
|
1694
1694
|
# raise ArgumentError
|
|
1695
1695
|
# end
|
|
1696
1696
|
when TWO
|
|
1697
1697
|
# if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(String)
|
|
1698
1698
|
args[0].document_sync = true
|
|
1699
|
-
|
|
1699
|
+
set_content_two(args[0], args[1].to_s)
|
|
1700
1700
|
# else
|
|
1701
1701
|
# raise ArgumentError
|
|
1702
1702
|
# end
|
|
1703
1703
|
when THREE
|
|
1704
1704
|
args[0].document_sync = true
|
|
1705
|
-
|
|
1705
|
+
set_content_three(args[0], args[1].to_s, args[2])
|
|
1706
1706
|
else
|
|
1707
1707
|
raise ArgumentError
|
|
1708
1708
|
end
|
|
@@ -1715,14 +1715,14 @@ module Meteor
|
|
|
1715
1715
|
# @param [true,false] entity_ref entity reference flag (エンティティ参照フラグ)
|
|
1716
1716
|
# @return [Meteor::Element] element (要素)
|
|
1717
1717
|
#
|
|
1718
|
-
def
|
|
1718
|
+
def set_content_three(elm, content, entity_ref = true)
|
|
1719
1719
|
escape_content(content, elm) if entity_ref || !elm.raw_content
|
|
1720
1720
|
|
|
1721
1721
|
elm.mixed_content = content
|
|
1722
1722
|
elm
|
|
1723
1723
|
end
|
|
1724
1724
|
|
|
1725
|
-
private :
|
|
1725
|
+
private :set_content_three
|
|
1726
1726
|
|
|
1727
1727
|
#
|
|
1728
1728
|
# set content of element (要素の内容をセットする)
|
|
@@ -1730,22 +1730,22 @@ module Meteor
|
|
|
1730
1730
|
# @param [String] content content of element (要素の内容)
|
|
1731
1731
|
# @return [Meteor::Element] element (要素)
|
|
1732
1732
|
#
|
|
1733
|
-
def
|
|
1734
|
-
#
|
|
1733
|
+
def set_content_two(elm, content)
|
|
1734
|
+
# set_content_three(elm, content)
|
|
1735
1735
|
escape_content(content, elm) unless elm.raw_content
|
|
1736
1736
|
|
|
1737
1737
|
elm.mixed_content = content
|
|
1738
1738
|
elm
|
|
1739
1739
|
end
|
|
1740
1740
|
|
|
1741
|
-
private :
|
|
1741
|
+
private :set_content_two
|
|
1742
1742
|
|
|
1743
1743
|
#
|
|
1744
1744
|
# get content of element (要素の内容を取得する)
|
|
1745
1745
|
# @param [Meteor::Element] elm element (要素)
|
|
1746
1746
|
# @return [String] content (内容)
|
|
1747
1747
|
#
|
|
1748
|
-
def
|
|
1748
|
+
def get_content_one(elm)
|
|
1749
1749
|
if !elm.cx
|
|
1750
1750
|
unescape_content(elm.mixed_content, elm) if elm.normal
|
|
1751
1751
|
else
|
|
@@ -1753,7 +1753,7 @@ module Meteor
|
|
|
1753
1753
|
end
|
|
1754
1754
|
end
|
|
1755
1755
|
|
|
1756
|
-
private :
|
|
1756
|
+
private :get_content_one
|
|
1757
1757
|
|
|
1758
1758
|
#
|
|
1759
1759
|
# remove attribute of element (要素の属性を消す)
|
|
@@ -1804,10 +1804,10 @@ module Meteor
|
|
|
1804
1804
|
def cxtag(*args)
|
|
1805
1805
|
case args.length
|
|
1806
1806
|
when ONE
|
|
1807
|
-
|
|
1807
|
+
cxtag_one(args[0].to_s)
|
|
1808
1808
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
1809
1809
|
when TWO
|
|
1810
|
-
|
|
1810
|
+
cxtag_two(args[0].to_s, args[1].to_s)
|
|
1811
1811
|
@element_cache.store(@elm_.object_id, @elm_) if @elm_
|
|
1812
1812
|
else
|
|
1813
1813
|
raise ArgumentError
|
|
@@ -1820,7 +1820,7 @@ module Meteor
|
|
|
1820
1820
|
# @param [String] id id attribute value (ID属性値)
|
|
1821
1821
|
# @return [Meteor::Element] element (要素)
|
|
1822
1822
|
#
|
|
1823
|
-
def
|
|
1823
|
+
def cxtag_two(name, id)
|
|
1824
1824
|
quote_name(name)
|
|
1825
1825
|
@_id = Regexp.quote(id)
|
|
1826
1826
|
|
|
@@ -1858,14 +1858,14 @@ module Meteor
|
|
|
1858
1858
|
@elm_
|
|
1859
1859
|
end
|
|
1860
1860
|
|
|
1861
|
-
private :
|
|
1861
|
+
private :cxtag_two
|
|
1862
1862
|
|
|
1863
1863
|
#
|
|
1864
1864
|
# get cx(comment extension) tag using id attribute (ID属性(id="ID属性値")で検索し、CX(コメント拡張)タグを取得する)
|
|
1865
1865
|
# @param [String] id id attribute value (ID属性値)
|
|
1866
1866
|
# @return [Meteor::Element] element (要素)
|
|
1867
1867
|
#
|
|
1868
|
-
def
|
|
1868
|
+
def cxtag_one(id)
|
|
1869
1869
|
@_id = Regexp.quote(id)
|
|
1870
1870
|
|
|
1871
1871
|
@pattern_cc = String.new('') << '<!--\\s@([^<>]*)\\s[^<>]*id="' << @_id << '"'
|
|
@@ -1885,7 +1885,7 @@ module Meteor
|
|
|
1885
1885
|
@elm_
|
|
1886
1886
|
end
|
|
1887
1887
|
|
|
1888
|
-
private :
|
|
1888
|
+
private :cxtag_one
|
|
1889
1889
|
|
|
1890
1890
|
#
|
|
1891
1891
|
# replace element (要素を置換する)
|
|
@@ -1914,7 +1914,7 @@ module Meteor
|
|
|
1914
1914
|
# item.copy.parser.element_cache.clear
|
|
1915
1915
|
item.copy = nil
|
|
1916
1916
|
else
|
|
1917
|
-
|
|
1917
|
+
edit_document_one(item)
|
|
1918
1918
|
# edit_pattern_(item)
|
|
1919
1919
|
end
|
|
1920
1920
|
else
|
|
@@ -1927,19 +1927,19 @@ module Meteor
|
|
|
1927
1927
|
|
|
1928
1928
|
protected :reflect
|
|
1929
1929
|
|
|
1930
|
-
def
|
|
1931
|
-
|
|
1930
|
+
def edit_document_one(elm)
|
|
1931
|
+
edit_document_two(elm, '/>')
|
|
1932
1932
|
end
|
|
1933
1933
|
|
|
1934
|
-
private :
|
|
1934
|
+
private :edit_document_one
|
|
1935
1935
|
|
|
1936
|
-
def
|
|
1936
|
+
def edit_document_two(elm, _closer)
|
|
1937
1937
|
# replace tag (タグ置換)
|
|
1938
1938
|
@pattern = Meteor::Core::Util::PatternCache.get(elm.pattern)
|
|
1939
1939
|
@root.document.sub!(@pattern, elm.document)
|
|
1940
1940
|
end
|
|
1941
1941
|
|
|
1942
|
-
private :
|
|
1942
|
+
private :edit_document_two
|
|
1943
1943
|
|
|
1944
1944
|
#
|
|
1945
1945
|
# reflect (反映する)
|
|
@@ -2136,10 +2136,10 @@ module Meteor
|
|
|
2136
2136
|
private :unescape
|
|
2137
2137
|
|
|
2138
2138
|
def br_to_newline(content)
|
|
2139
|
-
return unless (elm.cx || !is_match(@@
|
|
2139
|
+
return unless (elm.cx || !is_match(@@match_tag_two, elm.name)) && content.include?(BR)
|
|
2140
2140
|
|
|
2141
2141
|
# 「<br>」->「¥r?¥n」
|
|
2142
|
-
content.gsub!(@@
|
|
2142
|
+
content.gsub!(@@pattern_br_two, @root.newline)
|
|
2143
2143
|
end
|
|
2144
2144
|
|
|
2145
2145
|
private :br_to_newline
|