meteor 0.9.32 → 0.9.34
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/lib/meteor/core/kernel.rb +147 -147
- data/lib/meteor/element.rb +8 -5
- data/lib/meteor/ml/html/parser_impl.rb +1 -1
- data/lib/meteor/ml/html4/parser_impl.rb +3 -3
- data/lib/meteor/ml/xhtml4/parser_impl.rb +3 -3
- data/lib/meteor.rb +3 -3
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e244c53919093f4fa5aaeb5b0fb3c4becac0e0c5feb213308477494b6e048d3c
|
|
4
|
+
data.tar.gz: d7a7294a851bd5b8663102955ac3c0bfc7d4a33feb453c5d15ee0d464d760beb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a18ec4e77104c88fc27a0e7a83efaacbaf79cbaf319a50e7637f8341df3eb9ad8aa77b3faf169d637b381be0053ad2bc98d774cc26e32957190ba1dcebcd8b16
|
|
7
|
+
data.tar.gz: 4949cc3d32443fa9faba71a2157f94bc383a5af767e8dc1f063b00733f328d8ebc64c0d872a07f394932f0e5fe7633691c30d98b8093525267187f1d52e840f0
|
data/ChangeLog
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
== 0.9.34 / 2026-07-05 Yasumasa Ashida <ys.ashida@gmail.com>
|
|
2
|
+
|
|
3
|
+
* Refactor Meteor::Element
|
|
4
|
+
|
|
5
|
+
== 0.9.33 / 2026-07-04 Yasumasa Ashida <ys.ashida@gmail.com>
|
|
6
|
+
|
|
7
|
+
* Refactoring
|
|
8
|
+
|
|
1
9
|
== 0.9.32 / 2026-07-04 Yasumasa Ashida <ys.ashida@gmail.com>
|
|
2
10
|
|
|
3
11
|
* Refactoring
|
data/Gemfile.lock
CHANGED
data/lib/meteor/core/kernel.rb
CHANGED
|
@@ -17,35 +17,35 @@ 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
|
-
|
|
36
|
+
PATTERN_FIND_five = '^([^\\.,\\[\\]#][^,\\[\\]#]+)\\[([^,]+)=([^,]+)\\]\\[([^,]+)=([^,]+)\\]$'
|
|
37
37
|
|
|
38
|
-
@@
|
|
39
|
-
@@
|
|
40
|
-
@@
|
|
41
|
-
@@
|
|
42
|
-
@@
|
|
43
|
-
@@
|
|
44
|
-
@@
|
|
45
|
-
@@
|
|
46
|
-
@@
|
|
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_non_nest = Regexp.new('\\A[^<>]*\\Z')
|
|
49
49
|
|
|
50
50
|
@@pattern_get_attrs_map = Regexp.new('([^\\s]*)="([^\"]*)"')
|
|
51
51
|
|
|
@@ -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
|
|
|
@@ -297,7 +297,7 @@ module Meteor
|
|
|
297
297
|
if @res[1]
|
|
298
298
|
element_void_one(name)
|
|
299
299
|
else
|
|
300
|
-
# puts '---
|
|
300
|
+
# puts '---element_normal_one'
|
|
301
301
|
element_normal_one(name)
|
|
302
302
|
end
|
|
303
303
|
# else
|
|
@@ -377,14 +377,14 @@ module Meteor
|
|
|
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
386
|
@res2 = element_normal_three_two
|
|
387
|
-
@
|
|
387
|
+
@pattern_cc_two = @pattern_cc
|
|
388
388
|
|
|
389
389
|
# puts @res2.captures.length
|
|
390
390
|
# puts @res2.regexp.to_s
|
|
@@ -393,7 +393,7 @@ 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
|
|
@@ -401,12 +401,12 @@ module Meteor
|
|
|
401
401
|
end
|
|
402
402
|
elsif @res1.begin(0) > @res2.begin(0)
|
|
403
403
|
@res = @res2
|
|
404
|
-
# @pattern_cc = @
|
|
404
|
+
# @pattern_cc = @pattern_cc_two
|
|
405
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
|
|
@@ -414,7 +414,7 @@ module Meteor
|
|
|
414
414
|
end
|
|
415
415
|
elsif @res2 && !@res1
|
|
416
416
|
@res = @res2
|
|
417
|
-
# @pattern_cc = @
|
|
417
|
+
# @pattern_cc = @pattern_cc_two
|
|
418
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
|
|
@@ -525,31 +525,31 @@ module Meteor
|
|
|
525
525
|
private :element_normal_three_two
|
|
526
526
|
|
|
527
527
|
def element_pattern_normal_three_two
|
|
528
|
-
# @
|
|
529
|
-
# @
|
|
530
|
-
@
|
|
531
|
-
@
|
|
532
|
-
# @
|
|
533
|
-
# @
|
|
534
|
-
# @
|
|
535
|
-
@
|
|
536
|
-
@
|
|
537
|
-
# @
|
|
538
|
-
|
|
539
|
-
@
|
|
540
|
-
# @
|
|
541
|
-
@
|
|
542
|
-
# @
|
|
543
|
-
@
|
|
544
|
-
# @
|
|
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
|
+
|
|
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
|
|
|
@@ -606,14 +606,14 @@ module Meteor
|
|
|
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
615
|
# @res2 = element_normal_two_two
|
|
616
|
-
# @
|
|
616
|
+
# @pattern_cc_two = @pattern_cc
|
|
617
617
|
#
|
|
618
618
|
# # puts @res2.captures.length
|
|
619
619
|
# # puts @res2.regexp.to_s
|
|
@@ -622,7 +622,7 @@ 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
|
|
@@ -630,12 +630,12 @@ module Meteor
|
|
|
630
630
|
# end
|
|
631
631
|
# elsif @res1.begin(0) > @res2.begin(0)
|
|
632
632
|
# @res = @res2
|
|
633
|
-
# # @pattern_cc = @
|
|
633
|
+
# # @pattern_cc = @pattern_cc_two
|
|
634
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
|
|
@@ -643,7 +643,7 @@ module Meteor
|
|
|
643
643
|
# end
|
|
644
644
|
# elsif @res2 && !@res1
|
|
645
645
|
# @res = @res2
|
|
646
|
-
# # @pattern_cc = @
|
|
646
|
+
# # @pattern_cc = @pattern_cc_two
|
|
647
647
|
# element_normal_two_one
|
|
648
648
|
# else
|
|
649
649
|
# if @error_check
|
|
@@ -743,12 +743,12 @@ module Meteor
|
|
|
743
743
|
# private :element_normal_two_one
|
|
744
744
|
#
|
|
745
745
|
# def element_normal_two_two
|
|
746
|
-
# # @
|
|
747
|
-
# # @
|
|
748
|
-
# @
|
|
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
|
|
@@ -768,18 +768,18 @@ module Meteor
|
|
|
768
768
|
# private :element_normal_two_two
|
|
769
769
|
#
|
|
770
770
|
# def create_pattern_two(args_cnt)
|
|
771
|
-
# @
|
|
772
|
-
#
|
|
773
|
-
# # @
|
|
774
|
-
# # @
|
|
775
|
-
# @
|
|
776
|
-
# @
|
|
777
|
-
# @
|
|
778
|
-
# @
|
|
779
|
-
# @
|
|
780
|
-
#
|
|
781
|
-
# @
|
|
782
|
-
# @
|
|
771
|
+
# @pattern_cc_oneb = String.new('') << "<" << @_name << '(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
|
|
772
|
+
#
|
|
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
|
+
#
|
|
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
785
|
# def element_void_two
|
|
@@ -817,14 +817,14 @@ module Meteor
|
|
|
817
817
|
def element_five(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
|
818
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
826
|
@res2 = element_normal_five_two
|
|
827
|
-
@
|
|
827
|
+
@pattern_cc_two = @pattern_cc
|
|
828
828
|
|
|
829
829
|
# puts @res2.captures.length
|
|
830
830
|
# puts @res2.regexp.to_s
|
|
@@ -833,7 +833,7 @@ 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
|
|
@@ -841,12 +841,12 @@ module Meteor
|
|
|
841
841
|
end
|
|
842
842
|
elsif @res1.begin(0) > @res2.begin(0)
|
|
843
843
|
@res = @res2
|
|
844
|
-
# @pattern_cc = @
|
|
844
|
+
# @pattern_cc = @pattern_cc_two
|
|
845
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
|
|
@@ -854,7 +854,7 @@ module Meteor
|
|
|
854
854
|
end
|
|
855
855
|
elsif @res2 && !@res1
|
|
856
856
|
@res = @res2
|
|
857
|
-
# @pattern_cc = @
|
|
857
|
+
# @pattern_cc = @pattern_cc_two
|
|
858
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
|
|
@@ -958,38 +958,38 @@ module Meteor
|
|
|
958
958
|
private :element_normal_five_two
|
|
959
959
|
|
|
960
960
|
def element_pattern_normal_five_two
|
|
961
|
-
# @
|
|
962
|
-
# @
|
|
963
|
-
# @
|
|
964
|
-
# @
|
|
965
|
-
# @
|
|
966
|
-
@
|
|
967
|
-
@
|
|
968
|
-
# @
|
|
969
|
-
|
|
970
|
-
# @
|
|
971
|
-
# @
|
|
972
|
-
# @
|
|
973
|
-
# @
|
|
974
|
-
# @
|
|
975
|
-
@
|
|
976
|
-
@
|
|
977
|
-
@
|
|
978
|
-
@
|
|
979
|
-
@
|
|
980
|
-
|
|
981
|
-
# @
|
|
982
|
-
# @
|
|
983
|
-
# @
|
|
984
|
-
# @
|
|
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
|
|
@@ -1037,7 +1037,7 @@ module Meteor
|
|
|
1037
1037
|
def element_four(attr_name1, attr_value1, attr_name2, attr_value2)
|
|
1038
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)
|
|
@@ -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,7 +1136,7 @@ module Meteor
|
|
|
1136
1136
|
|
|
1137
1137
|
end
|
|
1138
1138
|
|
|
1139
|
-
@pattern = @
|
|
1139
|
+
@pattern = @pattern_oneb
|
|
1140
1140
|
end
|
|
1141
1141
|
end
|
|
1142
1142
|
|
|
@@ -1149,27 +1149,27 @@ module Meteor
|
|
|
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
|
|
@@ -1179,7 +1179,7 @@ module Meteor
|
|
|
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)
|
|
@@ -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
|
|
@@ -1946,7 +1946,7 @@ module Meteor
|
|
|
1946
1946
|
#
|
|
1947
1947
|
def flash
|
|
1948
1948
|
if element_hook
|
|
1949
|
-
if element_hook.origin.
|
|
1949
|
+
if element_hook.origin.non_nest
|
|
1950
1950
|
if element_hook.origin.cx
|
|
1951
1951
|
# @root.hookDocument << '<!-- @' << @root.element.name << ' '
|
|
1952
1952
|
# @root.hookDocument << @root.element.attributes << '-->'
|
|
@@ -2020,13 +2020,13 @@ module Meteor
|
|
|
2020
2020
|
return unless elm.normal
|
|
2021
2021
|
|
|
2022
2022
|
# case of normal element (内容あり要素の場合)
|
|
2023
|
-
|
|
2023
|
+
self.non_nest = elm
|
|
2024
2024
|
|
|
2025
2025
|
pif2 = self.class.new(self)
|
|
2026
2026
|
|
|
2027
2027
|
@elm_ = elm.clone(pif2)
|
|
2028
2028
|
|
|
2029
|
-
pif2.root_element.document = if !elm.
|
|
2029
|
+
pif2.root_element.document = if !elm.non_nest
|
|
2030
2030
|
String.new(elm.mixed_content)
|
|
2031
2031
|
else
|
|
2032
2032
|
String.new(elm.document)
|
|
@@ -2039,13 +2039,13 @@ module Meteor
|
|
|
2039
2039
|
|
|
2040
2040
|
# private :shadow
|
|
2041
2041
|
|
|
2042
|
-
def
|
|
2043
|
-
@res = @@
|
|
2042
|
+
def non_nest=(elm)
|
|
2043
|
+
@res = @@pattern_non_nest.match(elm.mixed_content)
|
|
2044
2044
|
|
|
2045
|
-
elm.
|
|
2045
|
+
elm.non_nest = true if @res
|
|
2046
2046
|
end
|
|
2047
2047
|
|
|
2048
|
-
private :
|
|
2048
|
+
private :non_nest=
|
|
2049
2049
|
|
|
2050
2050
|
def is_match(regex, str)
|
|
2051
2051
|
case regex
|
|
@@ -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
|
data/lib/meteor/element.rb
CHANGED
|
@@ -21,8 +21,8 @@ module Meteor
|
|
|
21
21
|
# @return [true,false] content normal flag (内容存在フラグ)
|
|
22
22
|
# @!attribute [rw] cx
|
|
23
23
|
# @return [true,false] comment extension tag flag (コメント拡張タグフラグ)
|
|
24
|
-
# @!attribute [rw]
|
|
25
|
-
# @return [true,false] child
|
|
24
|
+
# @!attribute [rw] non_nest
|
|
25
|
+
# @return [true,false] child non-nest flag (非入れ子フラグ)
|
|
26
26
|
# @!attribute [rw] parser
|
|
27
27
|
# @return [Meteor::Parser] parser(パーサ)
|
|
28
28
|
# @!attribute [rw] type_value
|
|
@@ -37,7 +37,7 @@ module Meteor
|
|
|
37
37
|
# @return [true,false] deletion flag (削除フラグ)
|
|
38
38
|
#
|
|
39
39
|
class Element
|
|
40
|
-
attr_accessor :name, :attributes, :mixed_content, :raw_content, :pattern, :document_sync, :normal, :cx, :
|
|
40
|
+
attr_accessor :name, :attributes, :mixed_content, :raw_content, :pattern, :document_sync, :normal, :cx, :non_nest,
|
|
41
41
|
:parser, :type_value, :usable, :origin, :copy, :removed
|
|
42
42
|
|
|
43
43
|
alias tag name
|
|
@@ -46,6 +46,9 @@ module Meteor
|
|
|
46
46
|
alias empty normal
|
|
47
47
|
alias empty= normal=
|
|
48
48
|
|
|
49
|
+
alias mono non_nest
|
|
50
|
+
alias mono= non_nest=
|
|
51
|
+
|
|
49
52
|
#
|
|
50
53
|
# initializer (イニシャライザ)
|
|
51
54
|
# @overload initialize(name)
|
|
@@ -87,7 +90,7 @@ module Meteor
|
|
|
87
90
|
# @parser=nil
|
|
88
91
|
# @normal = false
|
|
89
92
|
# @cx = false
|
|
90
|
-
# @
|
|
93
|
+
# @non_nest = false
|
|
91
94
|
# @parent = false
|
|
92
95
|
@usable = true
|
|
93
96
|
end
|
|
@@ -118,7 +121,7 @@ module Meteor
|
|
|
118
121
|
@document = String.new(elm.document)
|
|
119
122
|
@normal = elm.normal
|
|
120
123
|
@cx = elm.cx
|
|
121
|
-
@
|
|
124
|
+
@non_nest = elm.non_nest
|
|
122
125
|
@origin = elm
|
|
123
126
|
# @usable = false
|
|
124
127
|
elm.copy = self
|
|
@@ -17,9 +17,9 @@ module Meteor
|
|
|
17
17
|
# @@match_tag = "br|hr|img|input|meta|base"
|
|
18
18
|
# [Array] void elemets (空要素)
|
|
19
19
|
@@match_tag = %w[br hr img input meta base]
|
|
20
|
-
# @@
|
|
20
|
+
# @@match_tag_two = "textarea|option|pre"
|
|
21
21
|
# [Array] elements where line breaks do not need to be converted to <br> (改行を<br>に変換する必要のない要素)
|
|
22
|
-
@@
|
|
22
|
+
@@match_tag_two = %w[textarea option pre]
|
|
23
23
|
|
|
24
24
|
# [Array] non-nestable elements (入れ子にできない要素)
|
|
25
25
|
@@match_tag_nne = %w[texarea select option form fieldset]
|
|
@@ -69,7 +69,7 @@ module Meteor
|
|
|
69
69
|
@@pattern_get_attrs_map2 = Regexp.new(GET_ATTRS_MAP2)
|
|
70
70
|
|
|
71
71
|
# @@pattern_match_tag = Regexp.new(@@match_tag)
|
|
72
|
-
# @@pattern_match_tag2 = Regexp.new(@@
|
|
72
|
+
# @@pattern_match_tag2 = Regexp.new(@@match_tag_two)
|
|
73
73
|
|
|
74
74
|
#
|
|
75
75
|
# initializer (イニシャライザ)
|
|
@@ -13,9 +13,9 @@ module Meteor
|
|
|
13
13
|
BR = '<br/>'
|
|
14
14
|
BR_RE = '<br\\/>'
|
|
15
15
|
|
|
16
|
-
# @@
|
|
16
|
+
# @@match_tag_two = "textarea|option|pre"
|
|
17
17
|
# [Array] elements where line breaks do not need to be converted to <br> (改行を<br/>に変換する必要のない要素)
|
|
18
|
-
@@
|
|
18
|
+
@@match_tag_two = %w[textarea option pre]
|
|
19
19
|
|
|
20
20
|
# [Array] boolean attributes (論理値で指定する属性)
|
|
21
21
|
@@attr_bool = %w[disabled readonly checked selected multiple]
|
|
@@ -65,7 +65,7 @@ module Meteor
|
|
|
65
65
|
@@pattern_multiple_r = Regexp.new(MULTIPLE_R)
|
|
66
66
|
|
|
67
67
|
# @@pattern_match_tag = Regexp.new(@@match_tag)
|
|
68
|
-
# @@pattern_match_tag2 = Regexp.new(@@
|
|
68
|
+
# @@pattern_match_tag2 = Regexp.new(@@match_tag_two)
|
|
69
69
|
|
|
70
70
|
#
|
|
71
71
|
# initializer (イニシャライザ)
|
data/lib/meteor.rb
CHANGED
|
@@ -18,7 +18,7 @@ require 'meteor/ml/xhtml4/parser_impl'
|
|
|
18
18
|
require 'meteor/ml/xhtml/parser_impl'
|
|
19
19
|
require 'meteor/ml/xml/parser_impl'
|
|
20
20
|
|
|
21
|
-
# Meteor - A lightweight (X)HTML
|
|
21
|
+
# Meteor - A lightweight (X)HTML & XML parser
|
|
22
22
|
#
|
|
23
23
|
# Copyright (C) 2008-present Yasumasa Ashida.
|
|
24
24
|
#
|
|
@@ -37,11 +37,11 @@ require 'meteor/ml/xml/parser_impl'
|
|
|
37
37
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
38
38
|
#
|
|
39
39
|
# @author Yasumasa Ashida
|
|
40
|
-
# @version 0.9.
|
|
40
|
+
# @version 0.9.34
|
|
41
41
|
#
|
|
42
42
|
|
|
43
43
|
module Meteor
|
|
44
|
-
VERSION = '0.9.
|
|
44
|
+
VERSION = '0.9.34'
|
|
45
45
|
|
|
46
46
|
# require 'fileutils'
|
|
47
47
|
|