meteor 0.9.8.1 → 0.9.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +1 -1
- data/Gemfile.lock +18 -0
- data/README.md +8 -8
- data/demo/demo_html4.rb +110 -0
- data/demo/demo_html5.rb +65 -68
- data/demo/demo_xhtml4.rb +85 -0
- data/demo/demo_xhtml5.rb +50 -71
- data/demo/demo_xml.rb +49 -46
- data/demo/{sample.xml → ml/sample.xml} +1 -1
- data/demo/{sample.html → ml/sample_4.html} +0 -0
- data/demo/{sample_5.html → ml/sample_5.html} +0 -0
- data/demo/{sample_x.html → ml/sample_x4.html} +0 -0
- data/demo/{sample_x5.html → ml/sample_x5.html} +0 -0
- data/lib/meteor.rb +672 -531
- data/meteor.gemspec +2 -2
- metadata +24 -25
- data/demo/demo_html.rb +0 -134
- data/demo/demo_xhtml.rb +0 -102
data/demo/demo_xhtml5.rb
CHANGED
@@ -1,104 +1,83 @@
|
|
1
1
|
#!bin ruby
|
2
2
|
# -* coding: UTF-8 -*-
|
3
3
|
|
4
|
-
require 'rubygems'
|
4
|
+
#require 'rubygems'
|
5
5
|
require 'meteor'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
#root = pf.element('sample_x5')
|
11
|
-
|
12
|
-
Meteor::ElementFactory.bind(:xhtml5,'sample_x5.html', 'UTF-8')
|
13
|
-
root = Meteor::ElementFactory.element('sample_x5')
|
7
|
+
Meteor::ElementFactory.link(:xhtml5,'ml/sample_x5.html', 'UTF-8')
|
8
|
+
root = Meteor::ElementFactory.element('/ml/sample_x5')
|
14
9
|
|
15
10
|
startTime = Time.new.to_f
|
16
11
|
|
17
|
-
elm_hello = root.element(
|
18
|
-
#elm_hello.attr(
|
19
|
-
elm_hello['color'] = '
|
20
|
-
#elm_hello.
|
21
|
-
|
22
|
-
elm_hello2 = root.element("id"=>"hello2")
|
23
|
-
#elm_hello2.content("Hello,Tester")
|
24
|
-
elm_hello2.content = "Hello,Tester"
|
12
|
+
elm_hello = root.element(id: 'hello')
|
13
|
+
elm_hello['color'] = 'red' #elm_hello.attr(color: "red")
|
14
|
+
#elm_hello['color'] = nil #elm_hello.remove_attr('color')
|
15
|
+
#elm_hello.attr(color: nil)
|
25
16
|
|
17
|
+
elm_hello2 = root.element(id: 'hello2')
|
18
|
+
elm_hello2.content = "Hello,Tester" #elm_hello2.content("Hello,Tester")
|
26
19
|
#elm_hello2.remove
|
20
|
+
|
27
21
|
#elm_hello3 = root.cxtag("hello3")
|
28
|
-
|
29
|
-
#elm_hello3.content = "Hello,Hello\ntt"
|
22
|
+
#elm_hello3.content = "Hello,Hello\ntt" #elm_hello3.content("Hello,Hello\ntt")
|
30
23
|
#puts elm_hello3.content
|
31
24
|
#puts elm_hello3.mixed_content
|
32
25
|
|
33
|
-
elm_text1 = root.element(
|
34
|
-
#elm_text1.attr(
|
35
|
-
elm_text1['
|
36
|
-
#elm_text1.attr(
|
37
|
-
elm_text1['disabled'] = true
|
38
|
-
#elm_text1.attr('required'=>true)
|
39
|
-
elm_text1['required'] = true
|
26
|
+
elm_text1 = root.element(id: 'text1')
|
27
|
+
elm_text1['value'] = 'めも' #elm_text1.attr(value: 'めも')
|
28
|
+
elm_text1['disabled'] = true #elm_text1.attr(disabled: true)
|
29
|
+
elm_text1['required'] = true #elm_text1.attr(required: true)
|
40
30
|
#map = elm_text1.attr_map
|
41
31
|
#map.names.each { |item|
|
42
32
|
# puts item
|
43
33
|
# puts map.fetch(item)
|
44
34
|
#}
|
45
35
|
|
46
|
-
#elm_radio1 = root.element("input",
|
47
|
-
|
48
|
-
#elm_radio1['checked'] = true
|
36
|
+
#elm_radio1 = root.element("input",id: "radio1", type: "radio")
|
37
|
+
#elm_radio1['checked'] = true #elm_radio1.attr(checked: true)
|
49
38
|
|
50
|
-
#elm_select1 = root.element("select",
|
39
|
+
#elm_select1 = root.element("select",id: "select1")
|
51
40
|
#elm_select1 = root.element("select")
|
52
|
-
|
53
|
-
#elm_select1['multiple']
|
54
|
-
|
55
|
-
#
|
56
|
-
#elm_option1
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
#
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
# co_ps['selected'] = false
|
75
|
-
# end
|
76
|
-
# #co_ps.attr("value"=>i.to_s)
|
77
|
-
# co_ps['value'] = i.to_s
|
78
|
-
# co_ps.remove_attr("id")
|
79
|
-
# #co_ps.content(i.to_s)
|
80
|
-
# co_ps.content = i.to_s
|
81
|
-
# co_ps.flush
|
82
|
-
#}
|
41
|
+
#elm_select1['multiple'] = true #elm_select1.attr(multiple: true)
|
42
|
+
#puts elm_select1['multiple'] #puts elm_select1.attr("multiple")
|
43
|
+
#elm_option1 = root.element("option",id: "option1")
|
44
|
+
#elm_option1['selected'] = true #elm_option1.attr(selected: true)
|
45
|
+
#puts elm_option1['selected'] #puts elm_option1.attr("selected")
|
46
|
+
#puts elm_text1['readonly'] #puts elm_text1.attr("readonly")
|
47
|
+
|
48
|
+
elm_select2 = root.element("select",id: "select2")
|
49
|
+
elm_select2["multiple"] = true
|
50
|
+
elm_option2 = elm_select2.element("option",id: "option2")
|
51
|
+
co_elm = elm_option2.element()
|
52
|
+
10.times { |i|
|
53
|
+
if i == 1 then
|
54
|
+
co_elm['selected'] = true #co_elm.attr(selected: true)
|
55
|
+
else
|
56
|
+
co_elm['selected'] = false #co_elm.attr(selected: false)
|
57
|
+
end
|
58
|
+
co_elm['value'] = i #co_elm.attr(value: i)
|
59
|
+
co_elm['id'] = nil #co_elm.remove_attr("id")
|
60
|
+
co_elm.content = i #co_elm.content(i)
|
61
|
+
co_elm.flash
|
62
|
+
}
|
83
63
|
|
84
|
-
elm_tr1 = root.element('tr',
|
64
|
+
elm_tr1 = root.element('tr',id: 'loop')
|
85
65
|
elm_ = elm_tr1.element
|
86
|
-
elm_dt1_ = elm_.element(
|
87
|
-
elm_dt2_ = elm_.element(
|
88
|
-
elm_dt3_ = elm_.element(
|
66
|
+
elm_dt1_ = elm_.element(id: 'aa')
|
67
|
+
elm_dt2_ = elm_.element(id: 'bb')
|
68
|
+
elm_dt3_ = elm_.element(id: 'cc')
|
89
69
|
10.times { |i|
|
90
|
-
elm_['loop'] = i
|
70
|
+
elm_['loop'] = i
|
91
71
|
elm_dt1 = elm_dt1_.clone
|
92
72
|
elm_dt2 = elm_dt2_.clone
|
93
73
|
elm_dt3 = elm_dt3_.clone
|
94
|
-
#elm_dt1.content("<>\"' \n" << i.to_s)
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
elm_.flush
|
74
|
+
elm_dt1.content = i #elm_dt1.content("<>\"' \n" << i.to_s)
|
75
|
+
elm_dt2.content = i
|
76
|
+
elm_dt3.content = i
|
77
|
+
elm_.flash
|
99
78
|
}
|
100
79
|
|
101
|
-
root.
|
80
|
+
root.flash
|
102
81
|
|
103
82
|
endTime = Time.new.to_f
|
104
83
|
|
data/demo/demo_xml.rb
CHANGED
@@ -1,66 +1,56 @@
|
|
1
1
|
#!bin ruby
|
2
2
|
# -* coding: UTF-8 -*-
|
3
3
|
|
4
|
-
require 'rubygems'
|
4
|
+
#require 'rubygems'
|
5
5
|
require 'meteor'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
#pf.bind(Meteor::Parser::XML,'sample.xml')
|
10
|
-
|
11
|
-
#root = pf.element('sample')
|
12
|
-
|
13
|
-
Meteor::ElementFactory.bind(Meteor::XML,'sample.xml', 'UTF-8')
|
14
|
-
root = Meteor::ElementFactory.element('sample')
|
7
|
+
Meteor::ElementFactory.link(Meteor::XML,'ml/sample.xml', 'UTF-8')
|
8
|
+
root = Meteor::ElementFactory.element('/ml/sample')
|
15
9
|
|
16
10
|
start_time = Time.new.to_f
|
17
11
|
|
18
|
-
#elm_ = root.element('
|
12
|
+
#elm_ = root.element('kobe')
|
19
13
|
#puts elm_.name
|
20
14
|
#puts elm_.attributes
|
21
15
|
#puts elm_.mixed_content
|
16
|
+
#puts elm_.text
|
22
17
|
|
23
18
|
#elm_ = root.element('test')
|
24
19
|
#puts elm_.name
|
25
20
|
#puts elm_.attributes
|
26
21
|
#puts elm_.mixed_content
|
27
22
|
|
28
|
-
elm1 = root.element('test',
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
|
33
|
-
#elm4 = root.element("potato","id"=>"aa","id2"=>"bb")
|
34
|
-
#elm4 = root.element("potato","id2"=>"bb")
|
23
|
+
elm1 = root.element('test', manbo: 'manbo') #elm1 = root.element(manbo: "manbo")
|
24
|
+
#elm2 = root.element(id: "aa", id2: "bb") #elm2 = root.element(id: "aa")
|
25
|
+
#elm3 = root.element("potato", id: "aa")
|
26
|
+
#elm4 = root.element("potato", id: "aa", id2: "bb") #elm4 = root.element("potato", id2: "bb")
|
27
|
+
|
35
28
|
elm7 = root.element("kobe")
|
36
|
-
#elm7 = root.element(
|
37
|
-
#elm8 = root.element(
|
38
|
-
#elm8 = root.element(
|
29
|
+
#elm7 = root.element(momo: "mono")
|
30
|
+
#elm8 = root.element(manbo: "mango")
|
31
|
+
#elm8 = root.element(momo: "momo")
|
39
32
|
|
40
|
-
#elm9 = root.element("hamachi",
|
33
|
+
#elm9 = root.element("hamachi",id: "aa",id2: 'bb')
|
41
34
|
#elm_c1 = root.cxtag("cs")
|
42
35
|
|
43
|
-
#elm8.attr("manbo"=>"mangoo")
|
44
|
-
|
45
36
|
#puts elm8.name
|
46
37
|
#puts elm8.attributes
|
47
38
|
#puts elm8.mixed_content
|
48
39
|
|
49
|
-
#elm1.attr(
|
50
|
-
#elm1["id2"]="cc"
|
40
|
+
#elm1.attr(id2: "cc")
|
41
|
+
#elm1["id2"] = "cc"
|
51
42
|
|
52
|
-
#elm8.attr(
|
53
|
-
|
54
|
-
#elm9.content = "\\1"
|
43
|
+
#elm8['mango'] = "mangoo" #elm8.attr(manbo: "mangoo")
|
44
|
+
#elm9.content = "\\1" #elm9.content("\\1")
|
55
45
|
|
56
|
-
#elm2.attr(
|
57
|
-
#elm3.attr('id3'=>'cc')
|
58
|
-
#elm3['id3'] = 'cc'
|
59
|
-
#elm4.attr('id3'=>'cc')
|
60
|
-
#elm9.attr('id3'=>'cc')
|
46
|
+
#elm2.attr(id3: 'cc')
|
61
47
|
|
62
|
-
#
|
63
|
-
#
|
48
|
+
#elm3['id3'] = 'cc' #elm3.attr(id3: 'cc')
|
49
|
+
#elm3['id3'] = 'cc' #elm4.attr(id3: 'cc')
|
50
|
+
#elm9['id3'] = 'cc' #elm9.attr(id3: 'cc')
|
51
|
+
|
52
|
+
#co_elm = elm1.element()
|
53
|
+
#map = co_elm.attr_map
|
64
54
|
#map.names.each { |item|
|
65
55
|
# puts item
|
66
56
|
# puts map.fetch(item)
|
@@ -73,7 +63,7 @@ elm5_ = elm_.element('tech')
|
|
73
63
|
elm5 = elm5_.clone
|
74
64
|
elm5['mono'] = i.to_s
|
75
65
|
elm5.content = i.to_s
|
76
|
-
elm_.
|
66
|
+
elm_.flash
|
77
67
|
end
|
78
68
|
|
79
69
|
#am3 = elm3.attr_map
|
@@ -85,29 +75,42 @@ end
|
|
85
75
|
elm_ = root.element(elm7)
|
86
76
|
|
87
77
|
10.times { |i|
|
88
|
-
elm_["momo"]= i
|
78
|
+
elm_["momo"]= i
|
89
79
|
elm_["eco"] = "えま"
|
90
|
-
elm_.content = i.to_s
|
91
|
-
|
92
|
-
elm_.flush
|
80
|
+
elm_.content = i #elm_["content"] = i.to_s
|
81
|
+
elm_.flash
|
93
82
|
}
|
94
83
|
|
95
|
-
#
|
84
|
+
#co_elm = root.element(elm_c1)
|
96
85
|
#
|
97
86
|
#10.times { |i|
|
98
|
-
# #
|
99
|
-
#
|
100
|
-
# co_ps.flush
|
87
|
+
# co_elm.content = i #co_elm.content(i)
|
88
|
+
# co_elm.flash
|
101
89
|
#}
|
102
90
|
|
103
|
-
|
91
|
+
#elm3['id3'] = 'dd' #elm3.attr(id3: 'dd')
|
104
92
|
|
105
|
-
|
93
|
+
root.flash
|
106
94
|
|
107
95
|
end_time = Time.new.to_f
|
108
96
|
|
109
97
|
puts root.document
|
110
98
|
|
99
|
+
#elms = root.elements("potato2")
|
100
|
+
##elms = root.elements("kobe")
|
101
|
+
#elms = root.elements("potato")
|
102
|
+
|
103
|
+
elms = root.elements("test") #elms = root.css('test')
|
104
|
+
elms.each{|elm, i|
|
105
|
+
puts '-------'
|
106
|
+
puts 'doc----'
|
107
|
+
puts elm.document
|
108
|
+
puts 'attrs--'
|
109
|
+
puts elm.attributes
|
110
|
+
puts 'mixed--'
|
111
|
+
puts elm.mixed_content
|
112
|
+
}
|
113
|
+
|
111
114
|
puts '' + (end_time - start_time).to_s + ' sec'
|
112
115
|
|
113
116
|
#start_time = Time.new.to_f
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/meteor.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -* coding: UTF-8 -*-
|
2
2
|
# Meteor - A lightweight (X)HTML(5) & XML parser
|
3
3
|
#
|
4
|
-
# Copyright (C) 2008-
|
4
|
+
# Copyright (C) 2008-2021 Yasumasa Ashida.
|
5
5
|
#
|
6
6
|
# This program is free software; you can redistribute it and/or modify
|
7
7
|
# it under the terms of the GNU Lesser General Public License as published by
|
@@ -18,12 +18,12 @@
|
|
18
18
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
19
19
|
#
|
20
20
|
# @author Yasumasa Ashida
|
21
|
-
# @version 0.9.
|
21
|
+
# @version 0.9.9.0
|
22
22
|
#
|
23
23
|
|
24
24
|
module Meteor
|
25
25
|
|
26
|
-
VERSION = '0.9.
|
26
|
+
VERSION = '0.9.9.0'.freeze
|
27
27
|
|
28
28
|
#require 'fileutils'
|
29
29
|
|
@@ -37,10 +37,11 @@ module Meteor
|
|
37
37
|
SEVEN = 7
|
38
38
|
|
39
39
|
HTML = ZERO
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
HTML5 = ONE
|
41
|
+
XHTML5 = TWO
|
42
|
+
HTML4 = THREE
|
43
|
+
XHTML4 = FOUR
|
44
|
+
XML = FIVE
|
44
45
|
|
45
46
|
#
|
46
47
|
# Element Class (要素クラス)
|
@@ -78,7 +79,7 @@ module Meteor
|
|
78
79
|
#
|
79
80
|
class Element
|
80
81
|
|
81
|
-
attr_accessor :
|
82
|
+
attr_accessor :name
|
82
83
|
attr_accessor :attributes
|
83
84
|
attr_accessor :mixed_content
|
84
85
|
attr_accessor :raw_content
|
@@ -94,13 +95,13 @@ module Meteor
|
|
94
95
|
attr_accessor :copy
|
95
96
|
attr_accessor :removed
|
96
97
|
|
97
|
-
alias :
|
98
|
-
alias :
|
98
|
+
alias :tag :name
|
99
|
+
alias :tag= :name=
|
99
100
|
|
100
101
|
#
|
101
102
|
# initializer (イニシャライザ)
|
102
|
-
# @overload initialize(
|
103
|
-
# @param [String]
|
103
|
+
# @overload initialize(name)
|
104
|
+
# @param [String,Symbol] name tag name (タグ名)
|
104
105
|
# @overload initialize(elm)
|
105
106
|
# @param [Meteor::Element] elm element (要素)
|
106
107
|
# @overload initialize(elm,ps)
|
@@ -118,7 +119,7 @@ module Meteor
|
|
118
119
|
raise ArgumentError
|
119
120
|
end
|
120
121
|
when TWO
|
121
|
-
@
|
122
|
+
@name = args[0].name
|
122
123
|
@attributes = String.new(args[0].attributes)
|
123
124
|
@mixed_content = String.new(args[0].mixed_content)
|
124
125
|
#@pattern = String.new(args[0].pattern)
|
@@ -139,10 +140,10 @@ module Meteor
|
|
139
140
|
|
140
141
|
#
|
141
142
|
# initializer (イニシャライザ)
|
142
|
-
# @param [String]
|
143
|
+
# @param [String] name tag name (タグ名)
|
143
144
|
#
|
144
|
-
def initialize_s(
|
145
|
-
@
|
145
|
+
def initialize_s(name)
|
146
|
+
@name = name
|
146
147
|
#@attributes = nil
|
147
148
|
#@mixed_content = nil
|
148
149
|
#@pattern = nil
|
@@ -162,7 +163,7 @@ module Meteor
|
|
162
163
|
# @param [Meteor::Element] elm element (要素)
|
163
164
|
#
|
164
165
|
def initialize_e(elm)
|
165
|
-
@
|
166
|
+
@name = elm.name
|
166
167
|
@attributes = String.new(elm.attributes)
|
167
168
|
#@pattern = String.new(elm.pattern)
|
168
169
|
@pattern = elm.pattern
|
@@ -241,29 +242,29 @@ module Meteor
|
|
241
242
|
if @document_sync
|
242
243
|
@document_sync = false
|
243
244
|
case @parser.doc_type
|
244
|
-
when Parser::HTML, Parser::HTML5
|
245
|
+
when Parser::HTML, Parser::HTML5, Parser::HTML4
|
245
246
|
if @cx
|
246
|
-
#@pattern_cc = '' << SET_CX_1 << elm.
|
247
|
-
@document = "<!-- @#{@
|
247
|
+
#@pattern_cc = '' << SET_CX_1 << elm.name << SPACE << elm.attributes << SET_CX_2 << elm.mixed_content << SET_CX_3 << elm.name << SET_CX_4
|
248
|
+
@document = "<!-- @#{@name} #{@attributes} -->#{@mixed_content}<!-- /@#{@name} -->"
|
248
249
|
else
|
249
250
|
if @empty
|
250
|
-
#@pattern_cc = '' << TAG_OPEN << elm.
|
251
|
-
@document = "<#{@
|
251
|
+
#@pattern_cc = '' << TAG_OPEN << elm.name << elm.attributes << TAG_CLOSE << elm.mixed_content << TAG_OPEN3 << elm.name << TAG_CLOSE
|
252
|
+
@document = "<#{@name}#{@attributes}>#{@mixed_content}</#{@name}>"
|
252
253
|
else
|
253
|
-
@document = '' << Meteor::Core::Kernel::TAG_OPEN << @
|
254
|
+
@document = '' << Meteor::Core::Kernel::TAG_OPEN << @name << @attributes << Meteor::Core::Kernel::TAG_CLOSE
|
254
255
|
#@document = "<#{@name}#{@attributes}>"
|
255
256
|
end
|
256
257
|
end
|
257
|
-
when Parser::
|
258
|
+
when Parser::XHTML4, Parser::XHTML5, Parser::XML
|
258
259
|
if @cx
|
259
|
-
#@pattern_cc = '' << SET_CX_1 << elm.
|
260
|
-
@document = "<!-- @#{@
|
260
|
+
#@pattern_cc = '' << SET_CX_1 << elm.name << SPACE << elm.attributes << SET_CX_2 << elm.mixed_content << SET_CX_3 << elm.name << SET_CX_4
|
261
|
+
@document = "<!-- @#{@name} #{@attributes} -->#{@mixed_content}<!-- /@#{@name} -->"
|
261
262
|
else
|
262
263
|
if @empty
|
263
|
-
#@pattern_cc = '' << TAG_OPEN << elm.
|
264
|
-
@document = "<#{@
|
264
|
+
#@pattern_cc = '' << TAG_OPEN << elm.name << elm.attributes << TAG_CLOSE << elm.mixed_content << TAG_OPEN3 << elm.name << TAG_CLOSE
|
265
|
+
@document = "<#{@name}#{@attributes}>#{@mixed_content}</#{@name}>"
|
265
266
|
else
|
266
|
-
@document = '' << Meteor::Core::Kernel::TAG_OPEN << @
|
267
|
+
@document = '' << Meteor::Core::Kernel::TAG_OPEN << @name << @attributes << Meteor::Core::Kernel::TAG_CLOSE3
|
267
268
|
#@document = "<#{@name}#{@attributes}/>"
|
268
269
|
end
|
269
270
|
end
|
@@ -278,43 +279,43 @@ module Meteor
|
|
278
279
|
# @overload element()
|
279
280
|
# get element (要素を取得する)
|
280
281
|
# @return [Meteor::Element] element (要素)
|
281
|
-
# @overload element(
|
282
|
+
# @overload element(name)
|
282
283
|
# get element using tag name (要素のタグ名で要素を取得する)
|
283
|
-
# @param [String]
|
284
|
+
# @param [String,Symbol] name tag name (タグ名)
|
284
285
|
# @return [Meteor::Element] element (要素)
|
285
|
-
# @overload element(
|
286
|
+
# @overload element(name,attrs)
|
286
287
|
# get element using tag name and attribute map (要素のタグ名と属性(属性名="属性値")あるいは属性1・属性2(属性名="属性値")で要素を取得する)
|
287
|
-
# @param [String]
|
288
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
288
|
+
# @param [String,Symbol] name tag name (タグ名)
|
289
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
289
290
|
# @return [Meteor::Element] element (要素)
|
290
291
|
# @overload element(attrs)
|
291
292
|
# get element using attribute map (属性(属性名="属性値")あるいは属性1・属性2(属性名="属性値")で要素を取得する)
|
292
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
293
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
293
294
|
# @return [Meteor::Element] element(要素)
|
294
|
-
# @overload element(
|
295
|
+
# @overload element(name,attr_name,attr_value)
|
295
296
|
# get element using tag name and attribute(name="value") (要素のタグ名と属性(属性名="属性値")で要素を取得する)
|
296
|
-
# @param [String] tag
|
297
|
-
# @param [String] attr_name attribute name (属性名)
|
297
|
+
# @param [String,Symbol] name tag name (タグ名)
|
298
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
298
299
|
# @param [String] attr_value attribute value (属性値)
|
299
300
|
# @return [Meteor::Element] element (要素)
|
300
301
|
# @overload element(attr_name,attr_value)
|
301
302
|
# get element using attribute(name="value") (属性(属性名="属性値")で要素を取得する)
|
302
|
-
# @param [String] attr_name 属性名
|
303
|
+
# @param [String,Symbol] attr_name 属性名
|
303
304
|
# @param [String] attr_value 属性値
|
304
305
|
# @return [Meteor::Element] element (要素)
|
305
|
-
# @overload element(
|
306
|
+
# @overload element(name,attr_name1,attr_value1,attr_name2,attr_value2)
|
306
307
|
# get element using tag name and attribute1,2(name="value") (要素のタグ名と属性1・属性2(属性名="属性値")で要素を取得する)
|
307
|
-
# @param [String] tag
|
308
|
-
# @param [String] attr_name1 attribute name1 (属性名1)
|
308
|
+
# @param [String,Symbol] name tag name (タグ名)
|
309
|
+
# @param [String,Symbol] attr_name1 attribute name1 (属性名1)
|
309
310
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
310
|
-
# @param [String] attr_name2 attribute name2 (属性名2)
|
311
|
+
# @param [String,Symbol] attr_name2 attribute name2 (属性名2)
|
311
312
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
312
313
|
# @return [Meteor::Element] element (要素)
|
313
314
|
# @overload element(attr_name1,attr_value1,attr_name2,attr_value2)
|
314
315
|
# get element using attribute1,2(name="value") (属性1・属性2(属性名="属性値")で要素を取得する)
|
315
|
-
# @param [String] attr_name1 属性名1
|
316
|
+
# @param [String,Symbol] attr_name1 属性名1
|
316
317
|
# @param [String] attr_value1 属性値1
|
317
|
-
# @param [String] attr_name2 属性名2
|
318
|
+
# @param [String,Symbol] attr_name2 属性名2
|
318
319
|
# @param [String] attr_value2 属性値2
|
319
320
|
# @return [Meteor::Element] element(要素)
|
320
321
|
# @overload element(elm)
|
@@ -336,43 +337,43 @@ module Meteor
|
|
336
337
|
|
337
338
|
#
|
338
339
|
# get elements (要素を取得する)
|
339
|
-
# @overload elements(
|
340
|
+
# @overload elements(name)
|
340
341
|
# get elements using tag name (要素のタグ名で要素を取得する)
|
341
|
-
# @param [String]
|
342
|
+
# @param [String,Symbol] name tag name (タグ名)
|
342
343
|
# @return [Array<Meteor::Element>] element array(要素配列)
|
343
|
-
# @overload elements(
|
344
|
+
# @overload elements(name,attrs)
|
344
345
|
# get elements using tag name and attribute map (要素のタグ名と属性(属性名="属性値")あるいは属性1・属性2(属性名="属性値")で要素を取得する)
|
345
|
-
# @param [String]
|
346
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
346
|
+
# @param [String,Symbol] name tag name (タグ名)
|
347
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
347
348
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
348
349
|
# @overload elements(attrs)
|
349
350
|
# get elements using attribute map (属性(属性名="属性値")あるいは属性1・属性2(属性名="属性値")で要素を取得する)
|
350
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
351
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
351
352
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
352
|
-
# @overload elements(
|
353
|
+
# @overload elements(name,attr_name,attr_value)
|
353
354
|
# get elements using tag name and attribute(name="value") (要素のタグ名と属性(属性名="属性値")で要素を取得する)
|
354
|
-
# @param [String] tag
|
355
|
-
# @param [String] attr_name attribute name (属性名)
|
355
|
+
# @param [String,Symbol] name tag name (タグ名)
|
356
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
356
357
|
# @param [String] attr_value attribute value (属性値)
|
357
358
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
358
359
|
# @overload elements(attr_name,attr_value)
|
359
360
|
# get elements using attribute(name="value") (属性(属性名="属性値")で要素を取得する)
|
360
|
-
# @param [String] attr_name attribute name (属性名)
|
361
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
361
362
|
# @param [String] attr_value attribute value (属性値)
|
362
363
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
363
|
-
# @overload elements(
|
364
|
+
# @overload elements(name,attr_name1,attr_value1,attr_name2,attr_value2)
|
364
365
|
# get elements using tag name and attribute1,2(name="value") (要素のタグ名と属性1・属性2(属性名="属性値")で要素を取得する)
|
365
|
-
# @param [String]
|
366
|
-
# @param [String] attr_name1 attribute name1 (属性名1)
|
366
|
+
# @param [String,Symbol] name tag name (タグ名)
|
367
|
+
# @param [String,Symbol] attr_name1 attribute name1 (属性名1)
|
367
368
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
368
|
-
# @param [String] attr_name2 attribute name2 (属性名2)
|
369
|
+
# @param [String,Symbol] attr_name2 attribute name2 (属性名2)
|
369
370
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
370
371
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
371
372
|
# @overload elements(attr_name1,attr_value1,attr_name2,attr_value2)
|
372
373
|
# get elements using attribute1,2(name="value") (属性1・属性2(属性名="属性値")で要素を取得する)
|
373
|
-
# @param [String] attr_name1 attribute name1 (属性名1)
|
374
|
+
# @param [String,Symbol] attr_name1 attribute name1 (属性名1)
|
374
375
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
375
|
-
# @param [String] attr_name2 attribute name2 (属性名2)
|
376
|
+
# @param [String,Symbol] attr_name2 attribute name2 (属性名2)
|
376
377
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
377
378
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
378
379
|
#
|
@@ -394,9 +395,9 @@ module Meteor
|
|
394
395
|
|
395
396
|
#
|
396
397
|
# get cx(comment extension) tag (CX(コメント拡張)タグを取得する)
|
397
|
-
# @overload cxtag(
|
398
|
+
# @overload cxtag(name,id)
|
398
399
|
# get cx(comment extension) tag using tag name and id attribute (タグ名とID属性(id="ID属性値")でCX(コメント拡張)タグを取得する)
|
399
|
-
# @param [String]
|
400
|
+
# @param [String,Symbol] name tag name (タグ名)
|
400
401
|
# @param [String] id id attribute value (ID属性値)
|
401
402
|
# @return [Meteor::Element] element(要素)
|
402
403
|
# @overload cxtag(id)
|
@@ -411,17 +412,17 @@ module Meteor
|
|
411
412
|
#
|
412
413
|
# @overload attr(attr)
|
413
414
|
# set attribute of element (要素の属性をセットする)
|
414
|
-
# @param [Hash<String,String>] attr attribute (属性)
|
415
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attr attribute (属性)
|
415
416
|
# @return [Meteor::Element] element (要素)
|
416
417
|
# @deprecated
|
417
418
|
# @overload attr(attr_name,attr_value)
|
418
419
|
# set attribute of element (要素の属性をセットする)
|
419
|
-
# @param [String] attr_name attribute name (属性名)
|
420
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
420
421
|
# @param [String,true,false] attr_value attribute value (属性値)
|
421
422
|
# @return [Meteor::Element] element (要素)
|
422
423
|
# @overload attr(attr_name)
|
423
424
|
# get attribute value of element (要素の属性値を取得する)
|
424
|
-
# @param [String] attr_name attribute name (属性名)
|
425
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
425
426
|
# @return [String] attribute value (属性値)
|
426
427
|
#
|
427
428
|
def attr(attrs,*args)
|
@@ -430,7 +431,7 @@ module Meteor
|
|
430
431
|
|
431
432
|
#
|
432
433
|
# set attribute of element (要素の属性をセットする)
|
433
|
-
# @param [Hash] attr attribute (属性)
|
434
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attr attribute (属性)
|
434
435
|
# @return [Meteor::Element] element (要素)
|
435
436
|
#
|
436
437
|
def attr=(attr)
|
@@ -439,7 +440,7 @@ module Meteor
|
|
439
440
|
|
440
441
|
#
|
441
442
|
# set attribute map (要素マップをセットする)
|
442
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
443
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
443
444
|
# @return [Meteor::Element] element (要素)
|
444
445
|
def attrs=(attrs)
|
445
446
|
@parser.attrs(self,attrs)
|
@@ -447,7 +448,7 @@ module Meteor
|
|
447
448
|
|
448
449
|
#
|
449
450
|
# get attribute map (属性マップを取得する)
|
450
|
-
# @return [Hash<String,String>] attribute map (属性マップ)
|
451
|
+
# @return [Hash<String,String>,Hash<Symbol,String>] attribute map (属性マップ)
|
451
452
|
#
|
452
453
|
def attrs
|
453
454
|
@parser.attrs(self)
|
@@ -496,6 +497,8 @@ module Meteor
|
|
496
497
|
@parser.content(self, *args)
|
497
498
|
end
|
498
499
|
|
500
|
+
alias :text :content
|
501
|
+
|
499
502
|
#
|
500
503
|
# set content of element (要素の内容をセットする)
|
501
504
|
# @param [String] value content (要素の内容)
|
@@ -505,19 +508,25 @@ module Meteor
|
|
505
508
|
@parser.content(self, value)
|
506
509
|
end
|
507
510
|
|
511
|
+
alias :text= :content=
|
512
|
+
|
508
513
|
#
|
509
514
|
# set attribute (属性をセットする)
|
510
|
-
# @param [String] name attribute name (属性の名前)
|
515
|
+
# @param [String,Symbol] name attribute name (属性の名前)
|
511
516
|
# @param [String] value attribute value (属性の値)
|
512
517
|
# @return [Meteor::Element] element (要素)
|
513
518
|
#
|
514
519
|
def []=(name, value)
|
515
|
-
|
520
|
+
if value != nil
|
521
|
+
@parser.attr(self, name, value)
|
522
|
+
else
|
523
|
+
@parser.remove_attr(self, name)
|
524
|
+
end
|
516
525
|
end
|
517
526
|
|
518
527
|
#
|
519
528
|
# get attribute value (属性の値を取得する)
|
520
|
-
# @param [String] name attribute name (属性の名前)
|
529
|
+
# @param [String,Symbol] name attribute name (属性の名前)
|
521
530
|
# @return [String] attribute value (属性の値)
|
522
531
|
#
|
523
532
|
def [](name)
|
@@ -526,7 +535,7 @@ module Meteor
|
|
526
535
|
|
527
536
|
#
|
528
537
|
# remove attribute of element (要素の属性を消す)
|
529
|
-
# @param [String] attr_name attribute name (属性名)
|
538
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
530
539
|
# @return [Meteor::Element] element (要素)
|
531
540
|
#
|
532
541
|
def remove_attr(attr_name)
|
@@ -543,10 +552,12 @@ module Meteor
|
|
543
552
|
#
|
544
553
|
# reflect (反映する)
|
545
554
|
#
|
546
|
-
def
|
547
|
-
@parser.
|
555
|
+
def flash
|
556
|
+
@parser.flash
|
548
557
|
end
|
549
558
|
|
559
|
+
alias :flush :flash
|
560
|
+
|
550
561
|
#
|
551
562
|
# @overload execute(hook)
|
552
563
|
# run action of Hooker (Hookerクラスの処理を実行する)
|
@@ -632,7 +643,7 @@ module Meteor
|
|
632
643
|
|
633
644
|
#
|
634
645
|
# set a couple of attribute name and attribute value (属性名と属性値を対としてセットする)
|
635
|
-
# @param [String] name attribute name (属性名)
|
646
|
+
# @param [String,Symbol] name attribute name (属性名)
|
636
647
|
# @param [String] value attribute value (属性値)
|
637
648
|
#
|
638
649
|
def store(name, value)
|
@@ -666,7 +677,7 @@ module Meteor
|
|
666
677
|
|
667
678
|
#
|
668
679
|
# get attribute value using attribute name (属性名で属性値を取得する)
|
669
|
-
# @param [String] name attribute name (属性名)
|
680
|
+
# @param [String,Symbol] name attribute name (属性名)
|
670
681
|
# @return [String] attribute value (属性値)
|
671
682
|
#
|
672
683
|
def fetch(name)
|
@@ -712,7 +723,7 @@ module Meteor
|
|
712
723
|
#
|
713
724
|
# set a couple of attribute name and attribute value (属性名と属性値を対としてセットする)
|
714
725
|
#
|
715
|
-
# @param [String] name attribute name (属性名)
|
726
|
+
# @param [String,Symbol] name attribute name (属性名)
|
716
727
|
# @param [String] value attribute value (属性値)
|
717
728
|
#
|
718
729
|
def []=(name, value)
|
@@ -722,7 +733,7 @@ module Meteor
|
|
722
733
|
#
|
723
734
|
# get attribute value using attribute name (属性名で属性値を取得する)
|
724
735
|
#
|
725
|
-
# @param [String] name attribute name (属性名)
|
736
|
+
# @param [String,Symbol] name attribute name (属性名)
|
726
737
|
# @return [String] attribute value (属性値)
|
727
738
|
#
|
728
739
|
def [](name)
|
@@ -734,7 +745,7 @@ module Meteor
|
|
734
745
|
# Attribute class (属性クラス)
|
735
746
|
#
|
736
747
|
# @!attribute [rw] name
|
737
|
-
# @return [String] attribute name (名前)
|
748
|
+
# @return [String,Symbol] attribute name (名前)
|
738
749
|
# @!attribute [rw] value
|
739
750
|
# @return [String] attribute value (値)
|
740
751
|
# @!attribute [rw] changed
|
@@ -766,10 +777,11 @@ module Meteor
|
|
766
777
|
#
|
767
778
|
class Parser
|
768
779
|
HTML = ZERO
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
780
|
+
HTML5 = ONE
|
781
|
+
XHTML5 = TWO
|
782
|
+
HTML4 = THREE
|
783
|
+
XHTML4 = FOUR
|
784
|
+
XML = FIVE
|
773
785
|
end
|
774
786
|
|
775
787
|
#
|
@@ -917,41 +929,41 @@ module Meteor
|
|
917
929
|
end
|
918
930
|
|
919
931
|
#
|
920
|
-
#@overload
|
932
|
+
#@overload link(relative_path,enc)
|
921
933
|
# generate parser (パーサを作成する)
|
922
934
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
923
935
|
# @param [String] enc character encoding (文字エンコーディング)
|
924
936
|
# @return [Meteor::Parser] parser (パーサ)
|
925
|
-
#@overload
|
937
|
+
#@overload link(relative_path)
|
926
938
|
# generate parser (パーサを作成する)
|
927
939
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
928
940
|
# @return [Meteor::Parser] parser (パーサ)
|
929
|
-
#@overload
|
941
|
+
#@overload link(type,relative_path,enc)
|
930
942
|
# generate parser (パーサを作成する)
|
931
943
|
# @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
|
932
944
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
933
945
|
# @param [String] enc character encoding (文字エンコーディング)
|
934
946
|
# @return [Meteor::Parser] parser (パーサ)
|
935
|
-
#@overload
|
947
|
+
#@overload link(type,relative_path)
|
936
948
|
# generate parser (パーサを作成する)
|
937
949
|
# @param [Fixnum,Symbol] type type of parser (パーサ・タイプ)
|
938
950
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
939
951
|
# @return [Meteor::Parser] parser (パーサ)
|
940
952
|
#
|
941
|
-
def
|
953
|
+
def link(*args)
|
942
954
|
case args.length
|
943
955
|
when 1
|
944
|
-
|
956
|
+
link_1(args[0])
|
945
957
|
when 2
|
946
958
|
if args[0].kind_of?(Fixnum) || args[0].kind_of?(Symbol)
|
947
|
-
|
959
|
+
link_2_n(args[0], args[1])
|
948
960
|
elsif args[0].kind_of?(String)
|
949
|
-
|
961
|
+
link_2_s(args[0], args[1])
|
950
962
|
else
|
951
963
|
raise ArgumentError
|
952
964
|
end
|
953
965
|
when 3
|
954
|
-
|
966
|
+
link_3(args[0], args[1], args[2])
|
955
967
|
else
|
956
968
|
raise ArgumentError
|
957
969
|
end
|
@@ -971,10 +983,10 @@ module Meteor
|
|
971
983
|
if CURRENT_DIR.eql?(paths[0])
|
972
984
|
paths.delete_at 0
|
973
985
|
paths[paths.length - 1] = File.basename(paths[paths.length - 1], ABST_EXT_NAME)
|
974
|
-
return paths.join(SLASH)
|
986
|
+
return '' << SLASH << paths.join(SLASH)
|
975
987
|
else
|
976
988
|
paths[paths.length - 1] = File.basename(paths[paths.length - 1], ABST_EXT_NAME)
|
977
|
-
return paths.join(SLASH)
|
989
|
+
return '' << SLASH << paths.join(SLASH)
|
978
990
|
end
|
979
991
|
end
|
980
992
|
end
|
@@ -988,20 +1000,20 @@ module Meteor
|
|
988
1000
|
# @param [String] enc character encoding (文字エンコーディング)
|
989
1001
|
# @return [Meteor::Parser] parser(パーサ)
|
990
1002
|
#
|
991
|
-
def
|
1003
|
+
def link_3(type, relative_path, enc)
|
992
1004
|
|
993
1005
|
relative_url = path_to_url(relative_path)
|
994
1006
|
|
995
1007
|
case type
|
996
|
-
when Parser::
|
997
|
-
|
1008
|
+
when Parser::HTML4, :html4
|
1009
|
+
html4 = Meteor::Ml::Html4::ParserImpl.new
|
998
1010
|
html.read(File.expand_path(relative_path, @root), enc)
|
999
|
-
@cache[relative_url] =
|
1000
|
-
when Parser::
|
1001
|
-
|
1002
|
-
|
1003
|
-
@cache[relative_url] =
|
1004
|
-
when Parser::HTML5, :html5
|
1011
|
+
@cache[relative_url] = html4
|
1012
|
+
when Parser::XHTML4, :xhtml4
|
1013
|
+
xhtml4 = Meteor::Ml::Xhtml4::ParserImpl.new
|
1014
|
+
xhtml4.read(File.expand_path(relative_path, @root), enc)
|
1015
|
+
@cache[relative_url] = xhtml4
|
1016
|
+
when Parser::HTML, :html, Parser::HTML5, :html5
|
1005
1017
|
html5 = Meteor::Ml::Html5::ParserImpl.new
|
1006
1018
|
html5.read(File.expand_path(relative_path, @root), enc)
|
1007
1019
|
@cache[relative_url] = html5
|
@@ -1016,7 +1028,7 @@ module Meteor
|
|
1016
1028
|
end
|
1017
1029
|
end
|
1018
1030
|
|
1019
|
-
private :
|
1031
|
+
private :link_3
|
1020
1032
|
|
1021
1033
|
#
|
1022
1034
|
# generate parser (パーサを作成する)
|
@@ -1024,16 +1036,16 @@ module Meteor
|
|
1024
1036
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
1025
1037
|
# @return [Meteor::Parser] parser (パーサ)
|
1026
1038
|
#
|
1027
|
-
def
|
1039
|
+
def link_2_n(type, relative_path)
|
1028
1040
|
|
1029
1041
|
relative_url = path_to_url(relative_path)
|
1030
1042
|
|
1031
1043
|
case type
|
1032
|
-
when Parser::
|
1033
|
-
ps = Meteor::Ml::
|
1044
|
+
when Parser::HTML4, :html4
|
1045
|
+
ps = Meteor::Ml::Html4::ParserImpl.new
|
1034
1046
|
when Parser::XHTML, :xhtml
|
1035
|
-
ps = Meteor::Ml::
|
1036
|
-
when Parser::HTML5, :html5
|
1047
|
+
ps = Meteor::Ml::Xhtml4::ParserImpl.new
|
1048
|
+
when Parser::HTML, :html, Parser::HTML5, :html5
|
1037
1049
|
ps = Meteor::Ml::Html5::ParserImpl.new
|
1038
1050
|
when Parser::XHTML5, :xhtml5
|
1039
1051
|
ps = Meteor::Ml::Xhtml5::ParserImpl.new
|
@@ -1046,7 +1058,7 @@ module Meteor
|
|
1046
1058
|
|
1047
1059
|
end
|
1048
1060
|
|
1049
|
-
private :
|
1061
|
+
private :link_2_n
|
1050
1062
|
|
1051
1063
|
#
|
1052
1064
|
# generate parser (パーサを作成する)
|
@@ -1054,16 +1066,16 @@ module Meteor
|
|
1054
1066
|
# @param [String] enc character encoding (文字エンコーディング)
|
1055
1067
|
# @return [Meteor::Parser] parser (パーサ)
|
1056
1068
|
#
|
1057
|
-
def
|
1069
|
+
def link_2_s(relative_path,enc)
|
1058
1070
|
|
1059
1071
|
relative_url = path_to_url(relative_path)
|
1060
1072
|
|
1061
1073
|
case @type
|
1062
|
-
when Parser::
|
1063
|
-
ps = Meteor::Ml::
|
1074
|
+
when Parser::HTML4, :html4
|
1075
|
+
ps = Meteor::Ml::Html4::ParserImpl.new
|
1064
1076
|
when Parser::XHTML, :xhtml
|
1065
|
-
ps = Meteor::Ml::
|
1066
|
-
when Parser::HTML5, :html5
|
1077
|
+
ps = Meteor::Ml::Xhtml4::ParserImpl.new
|
1078
|
+
when Parser::HTML, :html, Parser::HTML5, :html5
|
1067
1079
|
ps = Meteor::Ml::Html5::ParserImpl.new
|
1068
1080
|
when Parser::XHTML5, :xhtml5
|
1069
1081
|
ps = Meteor::Ml::Xhtml5::ParserImpl.new
|
@@ -1076,23 +1088,23 @@ module Meteor
|
|
1076
1088
|
|
1077
1089
|
end
|
1078
1090
|
|
1079
|
-
private :
|
1091
|
+
private :link_2_s
|
1080
1092
|
|
1081
1093
|
#
|
1082
1094
|
# generate parser (パーサを作成する)
|
1083
1095
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
1084
1096
|
# @return [Meteor::Parser] parser (パーサ)
|
1085
1097
|
#
|
1086
|
-
def
|
1098
|
+
def link_1(relative_path)
|
1087
1099
|
|
1088
1100
|
relative_url = path_to_url(relative_path)
|
1089
1101
|
|
1090
1102
|
case @type
|
1091
|
-
when Parser::
|
1092
|
-
ps = Meteor::Ml::
|
1103
|
+
when Parser::HTML4, :html4
|
1104
|
+
ps = Meteor::Ml::Html4::ParserImpl.new
|
1093
1105
|
when Parser::XHTML, :xhtml
|
1094
|
-
ps = Meteor::Ml::
|
1095
|
-
when Parser::HTML5, :html5
|
1106
|
+
ps = Meteor::Ml::Xhtml4::ParserImpl.new
|
1107
|
+
when Parser::HTML, :html, Parser::HTML5, :html5
|
1096
1108
|
ps = Meteor::Ml::Html5::ParserImpl.new
|
1097
1109
|
when Parser::XHTML5, :xhtml5
|
1098
1110
|
ps = Meteor::Ml::Xhtml5::ParserImpl.new
|
@@ -1107,12 +1119,12 @@ module Meteor
|
|
1107
1119
|
|
1108
1120
|
end
|
1109
1121
|
|
1110
|
-
private :
|
1122
|
+
private :link_1
|
1111
1123
|
|
1112
1124
|
#
|
1113
1125
|
#@overload parser(key)
|
1114
1126
|
# get parser (パーサを取得する)
|
1115
|
-
# @param [String] key identifier (キー)
|
1127
|
+
# @param [String,Symbol] key identifier (キー)
|
1116
1128
|
# @return [Meteor::Parser] parser (パーサ)
|
1117
1129
|
#@overload parser(type,relative_path,enc)
|
1118
1130
|
# generate parser (パーサを作成する)
|
@@ -1132,7 +1144,7 @@ module Meteor
|
|
1132
1144
|
when 1
|
1133
1145
|
parser_1(args[0])
|
1134
1146
|
when 2,3
|
1135
|
-
|
1147
|
+
link(args)
|
1136
1148
|
end
|
1137
1149
|
#parser_1(key)
|
1138
1150
|
end
|
@@ -1143,13 +1155,13 @@ module Meteor
|
|
1143
1155
|
# @return [Meteor::Parser] parser (パーサ)
|
1144
1156
|
#
|
1145
1157
|
def parser_1(key)
|
1146
|
-
@pif = @cache[key]
|
1158
|
+
@pif = @cache[key.to_s]
|
1147
1159
|
case @pif.doc_type
|
1148
|
-
when Meteor::Parser::
|
1149
|
-
Meteor::Ml::
|
1150
|
-
when Meteor::Parser::
|
1151
|
-
Meteor::Ml::
|
1152
|
-
when Meteor::Parser::HTML5
|
1160
|
+
when Meteor::Parser::HTML4
|
1161
|
+
Meteor::Ml::Html4::ParserImpl.new(@pif)
|
1162
|
+
when Meteor::Parser::XHTML4
|
1163
|
+
Meteor::Ml::Xhtml4::ParserImpl.new(@pif)
|
1164
|
+
when Meteor::Parser::HTML, Meteor::Parser::HTML5
|
1153
1165
|
Meteor::Ml::Html5::ParserImpl.new(@pif)
|
1154
1166
|
when Meteor::Parser::XHTML5
|
1155
1167
|
Meteor::Ml::Xhtml5::ParserImpl.new(@pif)
|
@@ -1162,7 +1174,7 @@ module Meteor
|
|
1162
1174
|
|
1163
1175
|
#
|
1164
1176
|
# get root element (ルート要素を取得する)
|
1165
|
-
# @param [String] key identifier (キー)
|
1177
|
+
# @param [String,Symbol] key identifier (キー)
|
1166
1178
|
# @return [Meteor::RootElement] root element (ルート要素)
|
1167
1179
|
#
|
1168
1180
|
def element(key)
|
@@ -1170,24 +1182,24 @@ module Meteor
|
|
1170
1182
|
end
|
1171
1183
|
|
1172
1184
|
#
|
1173
|
-
# @overload
|
1185
|
+
# @overload link_str(type, relative_url, doc)
|
1174
1186
|
# generate parser (パーサを作成する)
|
1175
1187
|
# @param [Fixnum] type type of parser (パーサ・タイプ)
|
1176
1188
|
# @param [String] relative_url relative URL (相対URL)
|
1177
1189
|
# @param [String] doc document (ドキュメント)
|
1178
1190
|
# @return [Meteor::Parser] parser (パーサ)
|
1179
|
-
# @overload
|
1191
|
+
# @overload link_str(relative_url, doc)
|
1180
1192
|
# generate parser (パーサを作成する)
|
1181
1193
|
# @param [String] relative_url relative URL (相対URL)
|
1182
1194
|
# @param [String] doc document (ドキュメント)
|
1183
1195
|
# @return [Meteor::Parser] parser (パーサ)
|
1184
1196
|
#
|
1185
|
-
def
|
1197
|
+
def link_str(*args)
|
1186
1198
|
case args.length
|
1187
1199
|
when 2
|
1188
|
-
|
1200
|
+
link_str_2(args[0],args[1])
|
1189
1201
|
when 3
|
1190
|
-
|
1202
|
+
link_str_3(args[0],args[1],args[2])
|
1191
1203
|
else
|
1192
1204
|
raise ArgumentError
|
1193
1205
|
end
|
@@ -1200,13 +1212,13 @@ module Meteor
|
|
1200
1212
|
# @param [String] doc document (ドキュメント)
|
1201
1213
|
# @return [Meteor::Parser] parser (パーサ)
|
1202
1214
|
#
|
1203
|
-
def
|
1215
|
+
def link_str_3(type, relative_url, doc)
|
1204
1216
|
case type
|
1205
|
-
when Parser::
|
1206
|
-
ps = Meteor::Ml::
|
1217
|
+
when Parser::HTML4, :html
|
1218
|
+
ps = Meteor::Ml::Html4::ParserImpl.new
|
1207
1219
|
when Parser::XHTML, :xhtml
|
1208
|
-
ps = Meteor::Ml::
|
1209
|
-
when Parser::HTML5, :html5
|
1220
|
+
ps = Meteor::Ml::Xhtml4::ParserImpl.new
|
1221
|
+
when Parser::HTML, :html, Parser::HTML5, :html5
|
1210
1222
|
ps = Meteor::Ml::Html5::ParserImpl.new
|
1211
1223
|
when Parser::XHTML5, :xhtml5
|
1212
1224
|
ps = Meteor::Ml::Xhtml5::ParserImpl.new
|
@@ -1219,7 +1231,7 @@ module Meteor
|
|
1219
1231
|
@cache[relative_url] = ps
|
1220
1232
|
end
|
1221
1233
|
|
1222
|
-
private :
|
1234
|
+
private :link_str_3
|
1223
1235
|
|
1224
1236
|
#
|
1225
1237
|
# generate parser (パーサを作成する)
|
@@ -1227,13 +1239,13 @@ module Meteor
|
|
1227
1239
|
# @param [String] doc document (ドキュメント)
|
1228
1240
|
# @return [Meteor::Parser] parser (パーサ)
|
1229
1241
|
#
|
1230
|
-
def
|
1242
|
+
def link_str_2(relative_url, doc)
|
1231
1243
|
case @type
|
1232
|
-
when Parser::
|
1233
|
-
ps = Meteor::Ml::
|
1244
|
+
when Parser::HTML4, :html4
|
1245
|
+
ps = Meteor::Ml::Html4::ParserImpl.new
|
1234
1246
|
when Parser::XHTML, :xhtml
|
1235
|
-
ps = Meteor::Ml::
|
1236
|
-
when Parser::HTML5, :html5
|
1247
|
+
ps = Meteor::Ml::Xhtml4::ParserImpl.new
|
1248
|
+
when Parser::HTML, :html, Parser::HTML5, :html5
|
1237
1249
|
ps = Meteor::Ml::Html5::ParserImpl.new
|
1238
1250
|
when Parser::XHTML5, :xhtml5
|
1239
1251
|
ps = Meteor::Ml::Xhtml5::ParserImpl.new
|
@@ -1247,13 +1259,13 @@ module Meteor
|
|
1247
1259
|
|
1248
1260
|
end
|
1249
1261
|
|
1250
|
-
private :
|
1262
|
+
private :link_str_2
|
1251
1263
|
|
1252
|
-
alias :paraser_str :
|
1264
|
+
alias :paraser_str :link_str
|
1253
1265
|
|
1254
1266
|
#
|
1255
1267
|
# set parser (パーサをセットする)
|
1256
|
-
# @param [String] key identifier (キー)
|
1268
|
+
# @param [String,Symbol] key identifier (キー)
|
1257
1269
|
# @param [Meteor::Parser] ps parser (パーサ)
|
1258
1270
|
#
|
1259
1271
|
def []=(key, ps)
|
@@ -1262,7 +1274,7 @@ module Meteor
|
|
1262
1274
|
|
1263
1275
|
#
|
1264
1276
|
# get parser (パーサを取得する)
|
1265
|
-
# @param [String] key identifier (キー)
|
1277
|
+
# @param [String,Symbol] key identifier (キー)
|
1266
1278
|
# @return [Meteor::Parser] parser (パーサ)
|
1267
1279
|
#
|
1268
1280
|
def [](key)
|
@@ -1281,51 +1293,54 @@ module Meteor
|
|
1281
1293
|
#
|
1282
1294
|
# set options (オプションをセットする)
|
1283
1295
|
# @param [Hash] opts option (オプション)
|
1284
|
-
# @option opts [String] :
|
1285
|
-
# @option opts [String] :
|
1286
|
-
# @option opts [
|
1296
|
+
# @option opts [String] :root root directory (基準ディレクトリ)
|
1297
|
+
# @option @deprecated opts [String] :base_dir root directory (基準ディレクトリ)
|
1298
|
+
# @option opts [String] :enc default character encoding (デフォルト文字エンコーディング)
|
1299
|
+
# @option @deprecated opts [String] :base_enc default character encoding (デフォルト文字エンコーディング)
|
1300
|
+
# @option opts [FixNum,Symbol] :type default type of parser (デフォルトのパーサ・タイプ)
|
1301
|
+
# @option @deprecated opts [FixNum | Symbol] :base_type default type of parser (デフォルトのパーサ・タイプ)
|
1287
1302
|
#
|
1288
1303
|
def self.options=(opts)
|
1289
1304
|
@@pf.options = opts
|
1290
1305
|
end
|
1291
1306
|
|
1292
1307
|
#
|
1293
|
-
#@overload
|
1308
|
+
#@overload link(type,relative_path,enc)
|
1294
1309
|
# generate parser (パーサを作成する)
|
1295
1310
|
# @param [Fixnum] type type of parser (パーサ・タイプ)
|
1296
1311
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
1297
1312
|
# @param [String] enc character encoding (エンコーディング)
|
1298
1313
|
# @return [Meteor::Parser] parser (パーサ)
|
1299
|
-
#@overload
|
1314
|
+
#@overload link(type,relative_path)
|
1300
1315
|
# generate parser (パーサを作成する)
|
1301
1316
|
# @param [Fixnum] type type of parser (パーサ・タイプ)
|
1302
1317
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
1303
1318
|
# @return [Meteor::Parser] parser (パーサ)
|
1304
1319
|
#
|
1305
|
-
def self.
|
1306
|
-
@@pf.
|
1320
|
+
def self.link(*args)
|
1321
|
+
@@pf.link(*args)
|
1307
1322
|
end
|
1308
1323
|
|
1309
1324
|
#
|
1310
|
-
# @overload
|
1325
|
+
# @overload link_str(type, relative_url, doc)
|
1311
1326
|
# generate parser (パーサを作成する)
|
1312
1327
|
# @param [Fixnum] type type of parser (パーサ・タイプ)
|
1313
1328
|
# @param [String] relative_url relative URL (相対URL)
|
1314
1329
|
# @param [String] doc document (ドキュメント)
|
1315
1330
|
# @return [Meteor::Parser] parser (パーサ)
|
1316
|
-
# @overload
|
1331
|
+
# @overload link_str(relative_url, doc)
|
1317
1332
|
# generate parser (パーサを作成する)
|
1318
1333
|
# @param [String] relative_url relative URL (相対URL)
|
1319
1334
|
# @param [String] doc document (ドキュメント)
|
1320
1335
|
# @return [Meteor::Parser] parser (パーサ)
|
1321
1336
|
#
|
1322
|
-
def self.
|
1323
|
-
@@pf.
|
1337
|
+
def self.link_str(*args)
|
1338
|
+
@@pf.link_str(args)
|
1324
1339
|
end
|
1325
1340
|
|
1326
1341
|
#
|
1327
1342
|
# get root element (ルート要素を取得する)
|
1328
|
-
# @param [String] key identifier (キー)
|
1343
|
+
# @param [String,Symbol] key identifier (キー)
|
1329
1344
|
# @return [Meteor::RootElement] root element (ルート要素)
|
1330
1345
|
#
|
1331
1346
|
def self.element(key)
|
@@ -1348,25 +1363,25 @@ module Meteor
|
|
1348
1363
|
|
1349
1364
|
#
|
1350
1365
|
# initializer (イニシャライザ)
|
1351
|
-
# @overload initialize(
|
1352
|
-
# @param [String]
|
1366
|
+
# @overload initialize(name)
|
1367
|
+
# @param [String,Symbol] name tag name (タグ名)
|
1353
1368
|
# @overload initialize(attr_name,attr_value)
|
1354
|
-
# @param [String] attr_name attribute name (属性名)
|
1369
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
1355
1370
|
# @param [String] attr_value attribute value (属性値)
|
1356
|
-
# @overload initialize(
|
1357
|
-
# @param [String]
|
1358
|
-
# @param [String] attr_name attribute name (属性名)
|
1371
|
+
# @overload initialize(name,attr_name,attr_value)
|
1372
|
+
# @param [String,Symbol] name tag name (タグ名)
|
1373
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
1359
1374
|
# @param [String] attr_value attribute value (属性値)
|
1360
1375
|
# @overload initialize(attr_name1,attr_value1,attr_name2,attr_value2)
|
1361
|
-
# @param [String] attr_name1 attribute name1 (属性名1)
|
1376
|
+
# @param [String,Symbol] attr_name1 attribute name1 (属性名1)
|
1362
1377
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
1363
|
-
# @param [String] attr_name2 attribute name2 (属性名2)
|
1378
|
+
# @param [String,Symbol] attr_name2 attribute name2 (属性名2)
|
1364
1379
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
1365
|
-
# @overload initialize(
|
1366
|
-
# @param [String]
|
1367
|
-
# @param [String] attr_name1 attribute name1 (属性名1)
|
1380
|
+
# @overload initialize(name,attr_name1,attr_value1,attr_name2,attr_value2)
|
1381
|
+
# @param [String,Symbol] name tag name (タグ名)
|
1382
|
+
# @param [String,Symbol] attr_name1 attribute name1 (属性名1)
|
1368
1383
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
1369
|
-
# @param [String] attr_name2 attribute name2 (属性名2)
|
1384
|
+
# @param [String,Symbol] attr_name2 attribute name2 (属性名2)
|
1370
1385
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
1371
1386
|
#
|
1372
1387
|
def initialize(*args)
|
@@ -1384,8 +1399,8 @@ module Meteor
|
|
1384
1399
|
end
|
1385
1400
|
end
|
1386
1401
|
|
1387
|
-
def initialize_1(
|
1388
|
-
self.message="element not found : #{
|
1402
|
+
def initialize_1(name)
|
1403
|
+
self.message="element not found : #{name}"
|
1389
1404
|
end
|
1390
1405
|
|
1391
1406
|
private :initialize_1
|
@@ -1396,8 +1411,8 @@ module Meteor
|
|
1396
1411
|
|
1397
1412
|
private :initialize_2
|
1398
1413
|
|
1399
|
-
def initialize_3(
|
1400
|
-
self.message="element not found : #{
|
1414
|
+
def initialize_3(name, attr_name, attr_value)
|
1415
|
+
self.message="element not found : #{name}[#{attr_name}=#{attr_value}]"
|
1401
1416
|
end
|
1402
1417
|
|
1403
1418
|
private :initialize_3
|
@@ -1408,8 +1423,8 @@ module Meteor
|
|
1408
1423
|
|
1409
1424
|
private :initialize_4
|
1410
1425
|
|
1411
|
-
def initialize_5(
|
1412
|
-
self.message="element not found : #{
|
1426
|
+
def initialize_5(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
1427
|
+
self.message="element not found : #{name}[#{attr_name1}=#{attr_value1}][#{attr_name2}=#{attr_value2}]"
|
1413
1428
|
end
|
1414
1429
|
|
1415
1430
|
private :initialize_5
|
@@ -1738,6 +1753,8 @@ module Meteor
|
|
1738
1753
|
@element_cache = Hash.new
|
1739
1754
|
#フックドキュメント
|
1740
1755
|
@document_hook = ''
|
1756
|
+
|
1757
|
+
@error_check = true
|
1741
1758
|
end
|
1742
1759
|
|
1743
1760
|
#
|
@@ -1777,43 +1794,43 @@ module Meteor
|
|
1777
1794
|
|
1778
1795
|
#
|
1779
1796
|
# get element (要素を取得する)
|
1780
|
-
# @overload element(
|
1797
|
+
# @overload element(name)
|
1781
1798
|
# get element using tag name (要素のタグ名で要素を取得する)
|
1782
|
-
# @param [String]
|
1799
|
+
# @param [String,Symbol] name tag name (タグ名)
|
1783
1800
|
# @return [Meteor::Element] element(要素)
|
1784
|
-
# @overload element(
|
1801
|
+
# @overload element(name,attrs)
|
1785
1802
|
# get element using tag name and attribute map (要素のタグ名と属性(属性名="属性値")あるいは属性1・属性2(属性名="属性値")で要素を取得する)
|
1786
|
-
# @param [String] tag
|
1787
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
1803
|
+
# @param [String,Symbol] name tag name (タグ名)
|
1804
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
1788
1805
|
# @return [Meteor::Element] element (要素)
|
1789
1806
|
# @overload element(attrs)
|
1790
1807
|
# get element using attribute map (属性(属性名="属性値")あるいは属性1・属性2(属性名="属性値")で要素を取得する)
|
1791
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
1808
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
1792
1809
|
# @return [Meteor::Element] element (要素)
|
1793
|
-
# @overload element(
|
1810
|
+
# @overload element(name,attr_name,attr_value)
|
1794
1811
|
# get element using tag name and attribute(name="value") (要素のタグ名と属性(属性名="属性値")で要素を取得する)
|
1795
|
-
# @param [String] tag
|
1796
|
-
# @param [String] attr_name attribute name (属性名)
|
1812
|
+
# @param [String,Symbol] name tag name (タグ名)
|
1813
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
1797
1814
|
# @param [String] attr_value attribute value (属性値)
|
1798
1815
|
# @return [Meteor::Element] element (要素)
|
1799
1816
|
# @overload element(attr_name,attr_value)
|
1800
1817
|
# get element using attribute(name="value") (属性(属性名="属性値")で要素を取得する)
|
1801
|
-
# @param [String] attr_name attribute name (属性名)
|
1818
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
1802
1819
|
# @param [String] attr_value attribute value (属性値)
|
1803
1820
|
# @return [Meteor::Element] element (要素)
|
1804
|
-
# @overload element(
|
1821
|
+
# @overload element(name,attr_name1,attr_value1,attr_name2,attr_value2)
|
1805
1822
|
# get element using tag name and attribute1,2(name="value") (要素のタグ名と属性1・属性2(属性名="属性値")で要素を取得する)
|
1806
|
-
# @param [String]
|
1807
|
-
# @param [String] attr_name1 attribute name1 (属性名1)
|
1823
|
+
# @param [String,Symbol] name tag name (タグ名)
|
1824
|
+
# @param [String,Symbol] attr_name1 attribute name1 (属性名1)
|
1808
1825
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
1809
|
-
# @param [String] attr_name2 attribute name2 (属性名2)
|
1826
|
+
# @param [String,Symbol] attr_name2 attribute name2 (属性名2)
|
1810
1827
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
1811
1828
|
# @return [Meteor::Element] element (要素)
|
1812
1829
|
# @overload element(attr_name1,attr_value1,attr_name2,attr_value2)
|
1813
1830
|
# get element using attribute1,2(name="value") (属性1・属性2(属性名="属性値")で要素を取得する)
|
1814
|
-
# @param [String] attr_name1 attribute name1 (属性名1)
|
1831
|
+
# @param [String,Symbol] attr_name1 attribute name1 (属性名1)
|
1815
1832
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
1816
|
-
# @param [String] attr_name2 attribute name2 (属性名2)
|
1833
|
+
# @param [String,Symbol] attr_name2 attribute name2 (属性名2)
|
1817
1834
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
1818
1835
|
# @return [Meteor::Element] element (要素)
|
1819
1836
|
# @overload element(elm)
|
@@ -1823,8 +1840,8 @@ module Meteor
|
|
1823
1840
|
#
|
1824
1841
|
def element(elm, attrs = nil,*args)
|
1825
1842
|
if !attrs
|
1826
|
-
if elm.kind_of?(String)
|
1827
|
-
element_1(elm)
|
1843
|
+
if elm.kind_of?(String) || elm.kind_of?(Symbol)
|
1844
|
+
element_1(elm.to_s)
|
1828
1845
|
if @elm_
|
1829
1846
|
@element_cache.store(@elm_.object_id, @elm_)
|
1830
1847
|
end
|
@@ -1832,12 +1849,12 @@ module Meteor
|
|
1832
1849
|
shadow(elm)
|
1833
1850
|
elsif elm.kind_of?(Hash)
|
1834
1851
|
if elm.size == ONE
|
1835
|
-
element_2(elm.keys[0], elm.values[0])
|
1852
|
+
element_2(elm.keys[0].to_s, elm.values[0])
|
1836
1853
|
if @elm_
|
1837
1854
|
@element_cache.store(@elm_.object_id, @elm_)
|
1838
1855
|
end
|
1839
1856
|
elsif elm.size == TWO
|
1840
|
-
element_4(elm.keys[0], elm.values[0], elm.keys[1], elm.values[1])
|
1857
|
+
element_4(elm.keys[0].to_s, elm.values[0], elm.keys[1].to_s, elm.values[1])
|
1841
1858
|
if @elm_
|
1842
1859
|
@element_cache.store(@elm_.object_id, @elm_)
|
1843
1860
|
end
|
@@ -1849,12 +1866,12 @@ module Meteor
|
|
1849
1866
|
end
|
1850
1867
|
elsif attrs.kind_of?(Hash)
|
1851
1868
|
if attrs.size == ONE
|
1852
|
-
element_3(elm, attrs.keys[0], attrs.values[0])
|
1869
|
+
element_3(elm.to_s, attrs.keys[0].to_s, attrs.values[0])
|
1853
1870
|
if @elm_
|
1854
1871
|
@element_cache.store(@elm_.object_id, @elm_)
|
1855
1872
|
end
|
1856
1873
|
elsif attrs.size == TWO
|
1857
|
-
element_5(elm, attrs.keys[0], attrs.values[0], attrs.keys[1], attrs.values[1])
|
1874
|
+
element_5(elm.to_s, attrs.keys[0].to_s, attrs.values[0], attrs.keys[1].to_s, attrs.values[1])
|
1858
1875
|
if @elm_
|
1859
1876
|
@element_cache.store(@elm_.object_id, @elm_)
|
1860
1877
|
end
|
@@ -1862,25 +1879,25 @@ module Meteor
|
|
1862
1879
|
@elm_ = nil
|
1863
1880
|
raise ArgumentError
|
1864
1881
|
end
|
1865
|
-
elsif attrs.kind_of?(String)
|
1882
|
+
elsif attrs.kind_of?(String) || attrs.kind_of?(Symbol)
|
1866
1883
|
case args.length
|
1867
1884
|
when ZERO
|
1868
|
-
element_2(elm,attrs)
|
1885
|
+
element_2(elm.to_s,attrs.to_s)
|
1869
1886
|
if @elm_
|
1870
1887
|
@element_cache.store(@elm_.object_id, @elm_)
|
1871
1888
|
end
|
1872
1889
|
when ONE
|
1873
|
-
element_3(elm, attrs, args[0])
|
1890
|
+
element_3(elm.to_s, attrs.to_s, args[0])
|
1874
1891
|
if @elm_
|
1875
1892
|
@element_cache.store(@elm_.object_id, @elm_)
|
1876
1893
|
end
|
1877
1894
|
when TWO
|
1878
|
-
element_4(elm, attrs, args[0],args[1])
|
1895
|
+
element_4(elm.to_s, attrs.to_s, args[0].to_s,args[1])
|
1879
1896
|
if @elm_
|
1880
1897
|
@element_cache.store(@elm_.object_id, @elm_)
|
1881
1898
|
end
|
1882
1899
|
when THREE
|
1883
|
-
element_5(elm, attrs, args[0],args[1],args[2])
|
1900
|
+
element_5(elm.to_s, attrs.to_s, args[0],args[1].to_s,args[2])
|
1884
1901
|
if @elm_
|
1885
1902
|
@element_cache.store(@elm_.object_id, @elm_)
|
1886
1903
|
end
|
@@ -1896,15 +1913,15 @@ module Meteor
|
|
1896
1913
|
|
1897
1914
|
#
|
1898
1915
|
# get element using tag name (タグ名で検索し、要素を取得する)
|
1899
|
-
# @param [String]
|
1916
|
+
# @param [String,Symbol] name tag name (タグ名)
|
1900
1917
|
# @return [Meteor::Element] element(要素)
|
1901
1918
|
#
|
1902
|
-
def element_1(
|
1919
|
+
def element_1(name)
|
1903
1920
|
|
1904
|
-
@
|
1921
|
+
@_name = Regexp.quote(name)
|
1905
1922
|
|
1906
1923
|
#要素検索用パターン
|
1907
|
-
@pattern_cc = "<#{@
|
1924
|
+
@pattern_cc = "<#{@_name}(|\\s[^<>]*)\\/>|<#{@_name}((?:|\\s[^<>]*))>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
1908
1925
|
|
1909
1926
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
1910
1927
|
#内容あり要素検索
|
@@ -1912,9 +1929,10 @@ module Meteor
|
|
1912
1929
|
|
1913
1930
|
if @res
|
1914
1931
|
if @res[1]
|
1915
|
-
element_without_1(
|
1932
|
+
element_without_1(name)
|
1916
1933
|
else
|
1917
|
-
element_with_1
|
1934
|
+
#puts '---element_with_1'
|
1935
|
+
element_with_1(name)
|
1918
1936
|
end
|
1919
1937
|
#else
|
1920
1938
|
end
|
@@ -1924,21 +1942,33 @@ module Meteor
|
|
1924
1942
|
|
1925
1943
|
private :element_1
|
1926
1944
|
|
1927
|
-
def element_with_1(
|
1945
|
+
def element_with_1(name)
|
1928
1946
|
|
1929
|
-
@elm_ = Meteor::Element.new(
|
1930
|
-
#属性
|
1931
|
-
@elm_.attributes = @res[2]
|
1932
|
-
#内容
|
1933
|
-
@elm_.mixed_content = @res[3]
|
1934
|
-
#全体
|
1935
|
-
@elm_.document = @res[0]
|
1936
|
-
|
1937
|
-
#@pattern_cc = '' << TAG_OPEN << @_tag << TAG_SEARCH_NC_1_1 << @_tag
|
1938
|
-
#@pattern_cc << TAG_SEARCH_NC_1_2 << @_tag << TAG_CLOSE
|
1939
|
-
@pattern_cc = "<#{@_tag}(?:|\\s[^<>]*)>((?!(#{@_tag}[^<>]*>)).)*<\\/#{@_tag}>"
|
1947
|
+
@elm_ = Meteor::Element.new(name)
|
1940
1948
|
|
1949
|
+
unless @on_search
|
1950
|
+
#puts '--on_search=false'
|
1951
|
+
#puts @res.to_a
|
1952
|
+
#属性
|
1953
|
+
@elm_.attributes = @res[2]
|
1954
|
+
#内容
|
1955
|
+
@elm_.mixed_content = @res[3]
|
1956
|
+
#全体
|
1957
|
+
@elm_.document = @res[0]
|
1958
|
+
else
|
1959
|
+
#puts '--on_search=true'
|
1960
|
+
#属性
|
1961
|
+
@elm_.attributes = @res[1]
|
1962
|
+
#内容
|
1963
|
+
@elm_.mixed_content = @res[2]
|
1964
|
+
#全体
|
1965
|
+
@elm_.document = @res[0]
|
1966
|
+
end
|
1941
1967
|
#内容あり要素検索用パターン
|
1968
|
+
#@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_NC_1_1 << @_name
|
1969
|
+
#@pattern_cc << TAG_SEARCH_NC_1_2 << @_name << TAG_CLOSE
|
1970
|
+
@pattern_cc = "<#{@_name}(|\\s[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
1971
|
+
|
1942
1972
|
@elm_.pattern = @pattern_cc
|
1943
1973
|
|
1944
1974
|
@elm_.empty = true
|
@@ -1950,16 +1980,16 @@ module Meteor
|
|
1950
1980
|
|
1951
1981
|
private :element_with_1
|
1952
1982
|
|
1953
|
-
def element_without_1(
|
1983
|
+
def element_without_1(name)
|
1954
1984
|
#要素
|
1955
|
-
@elm_ = Meteor::Element.new(
|
1985
|
+
@elm_ = Meteor::Element.new(name)
|
1956
1986
|
#属性
|
1957
1987
|
@elm_.attributes = @res[1]
|
1958
1988
|
#全体
|
1959
1989
|
@elm_.document = @res[0]
|
1960
1990
|
#空要素検索用パターン
|
1961
|
-
@pattern_cc = '' << TAG_OPEN << @
|
1962
|
-
#@pattern_cc = "<#{@
|
1991
|
+
@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_1_3
|
1992
|
+
#@pattern_cc = "<#{@_name}(|\\s[^<>]*)\\/>"
|
1963
1993
|
@elm_.pattern = @pattern_cc
|
1964
1994
|
|
1965
1995
|
@elm_.empty = false
|
@@ -1973,13 +2003,13 @@ module Meteor
|
|
1973
2003
|
|
1974
2004
|
#
|
1975
2005
|
# get element using tag name and attribute(name="value") (要素のタグ名と属性(属性名="属性値")で検索し、要素を取得する)
|
1976
|
-
# @param [String] tag
|
2006
|
+
# @param [String] name tag name (タグ名)
|
1977
2007
|
# @param [String] attr_name attribute name (属性名)
|
1978
2008
|
# @param [String] attr_value attribute value (属性値)
|
1979
2009
|
# @return [Meteor::Element] element (要素)
|
1980
|
-
def element_3(
|
2010
|
+
def element_3(name, attr_name, attr_value)
|
1981
2011
|
|
1982
|
-
element_quote_3(
|
2012
|
+
element_quote_3(name,attr_name,attr_value)
|
1983
2013
|
|
1984
2014
|
@pattern_cc_1 = element_pattern_3
|
1985
2015
|
|
@@ -1999,29 +2029,31 @@ module Meteor
|
|
1999
2029
|
@res = @res1
|
2000
2030
|
#@pattern_cc = @pattern_cc_1
|
2001
2031
|
if @res[1]
|
2002
|
-
element_without_3(
|
2032
|
+
element_without_3(name)
|
2003
2033
|
else
|
2004
|
-
element_with_3_1(
|
2034
|
+
element_with_3_1(name)
|
2005
2035
|
end
|
2006
2036
|
elsif @res1.begin(0) > @res2.begin(0)
|
2007
2037
|
@res = @res2
|
2008
2038
|
#@pattern_cc = @pattern_cc_2
|
2009
|
-
element_with_3_1(
|
2039
|
+
element_with_3_1(name)
|
2010
2040
|
end
|
2011
2041
|
elsif @res1 && !@res2
|
2012
2042
|
@res = @res1
|
2013
2043
|
#@pattern_cc = @pattern_cc_1
|
2014
2044
|
if @res[1]
|
2015
|
-
element_without_3(
|
2045
|
+
element_without_3(name)
|
2016
2046
|
else
|
2017
|
-
element_with_3_1(
|
2047
|
+
element_with_3_1(name)
|
2018
2048
|
end
|
2019
2049
|
elsif @res2 && !@res1
|
2020
2050
|
@res = @res2
|
2021
2051
|
#@pattern_cc = @pattern_cc_2
|
2022
|
-
element_with_3_1(
|
2052
|
+
element_with_3_1(name)
|
2023
2053
|
else
|
2024
|
-
|
2054
|
+
if @error_check
|
2055
|
+
puts Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message
|
2056
|
+
end
|
2025
2057
|
@elm_ = nil
|
2026
2058
|
end
|
2027
2059
|
|
@@ -2031,25 +2063,25 @@ module Meteor
|
|
2031
2063
|
private :element_3
|
2032
2064
|
|
2033
2065
|
def element_pattern_3
|
2034
|
-
|
2035
|
-
"<#{@_tag}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)\\/>|<#{@_tag}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)>(((?!(#{@_tag}[^<>]*>)).)*)<\\/#{@_tag}>"
|
2066
|
+
"<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)\\/>|<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
2036
2067
|
end
|
2037
2068
|
|
2038
2069
|
private :element_pattern_3
|
2039
2070
|
|
2040
|
-
def element_quote_3(
|
2041
|
-
@
|
2071
|
+
def element_quote_3(name,attr_name,attr_value)
|
2072
|
+
@_name = Regexp.quote(name)
|
2042
2073
|
@_attr_name = Regexp.quote(attr_name)
|
2043
2074
|
@_attr_value = Regexp.quote(attr_value)
|
2044
2075
|
end
|
2045
2076
|
|
2046
2077
|
private :element_quote_3
|
2047
2078
|
|
2048
|
-
def element_with_3_1(
|
2079
|
+
def element_with_3_1(name)
|
2080
|
+
#puts @res.captures.length
|
2049
2081
|
case @res.captures.length
|
2050
2082
|
when FOUR
|
2051
2083
|
#要素
|
2052
|
-
@elm_ = Meteor::Element.new(
|
2084
|
+
@elm_ = Meteor::Element.new(name)
|
2053
2085
|
#属性
|
2054
2086
|
@elm_.attributes = @res[1]
|
2055
2087
|
#内容
|
@@ -2057,10 +2089,10 @@ module Meteor
|
|
2057
2089
|
#全体
|
2058
2090
|
@elm_.document = @res[0]
|
2059
2091
|
#内容あり要素検索用パターン
|
2060
|
-
#@pattern_cc = ''<< TAG_OPEN << @
|
2061
|
-
#@pattern_cc << @_attr_value << TAG_SEARCH_NC_2_2 << @
|
2062
|
-
#@pattern_cc << TAG_SEARCH_NC_1_2 << @
|
2063
|
-
@pattern_cc = "<#{@
|
2092
|
+
#@pattern_cc = ''<< TAG_OPEN << @_name << TAG_SEARCH_NC_2_1 << @_attr_name << ATTR_EQ
|
2093
|
+
#@pattern_cc << @_attr_value << TAG_SEARCH_NC_2_2 << @_name
|
2094
|
+
#@pattern_cc << TAG_SEARCH_NC_1_2 << @_name << TAG_CLOSE
|
2095
|
+
@pattern_cc = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
2064
2096
|
|
2065
2097
|
@elm_.pattern = @pattern_cc
|
2066
2098
|
|
@@ -2070,7 +2102,7 @@ module Meteor
|
|
2070
2102
|
|
2071
2103
|
when FIVE
|
2072
2104
|
#要素
|
2073
|
-
@elm_ = Meteor::Element.new(
|
2105
|
+
@elm_ = Meteor::Element.new(name)
|
2074
2106
|
#属性
|
2075
2107
|
@elm_.attributes = @res[2]
|
2076
2108
|
#内容
|
@@ -2078,10 +2110,10 @@ module Meteor
|
|
2078
2110
|
#全体
|
2079
2111
|
@elm_.document = @res[0]
|
2080
2112
|
#内容あり要素検索用パターン
|
2081
|
-
#@pattern_cc = ''<< TAG_OPEN << @
|
2082
|
-
#@pattern_cc << @_attr_value << TAG_SEARCH_NC_2_2 << @
|
2083
|
-
#@pattern_cc << TAG_SEARCH_NC_1_2 << @
|
2084
|
-
@pattern_cc = "<#{@
|
2113
|
+
#@pattern_cc = ''<< TAG_OPEN << @_name << TAG_SEARCH_NC_2_1 << @_attr_name << ATTR_EQ
|
2114
|
+
#@pattern_cc << @_attr_value << TAG_SEARCH_NC_2_2 << @_name
|
2115
|
+
#@pattern_cc << TAG_SEARCH_NC_1_2 << @_name << TAG_CLOSE
|
2116
|
+
@pattern_cc = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)>((?!(#{@_name}[^<>]*>)).)*<\\/#{@_name}>"
|
2085
2117
|
|
2086
2118
|
@elm_.pattern = @pattern_cc
|
2087
2119
|
|
@@ -2091,11 +2123,18 @@ module Meteor
|
|
2091
2123
|
|
2092
2124
|
when THREE,SIX
|
2093
2125
|
#内容
|
2094
|
-
@elm_ = Meteor::Element.new(
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2126
|
+
@elm_ = Meteor::Element.new(name)
|
2127
|
+
unless @on_search
|
2128
|
+
#属性
|
2129
|
+
@elm_.attributes = @res[1].chop
|
2130
|
+
#内容
|
2131
|
+
@elm_.mixed_content = @res[3]
|
2132
|
+
else
|
2133
|
+
#属性
|
2134
|
+
@elm_.attributes = @res[1].chop
|
2135
|
+
#内容
|
2136
|
+
@elm_.mixed_content = @res[3]
|
2137
|
+
end
|
2099
2138
|
#全体
|
2100
2139
|
@elm_.document = @res[0]
|
2101
2140
|
#内容あり要素検索用パターン
|
@@ -2128,29 +2167,29 @@ module Meteor
|
|
2128
2167
|
|
2129
2168
|
def element_pattern_with_3_2
|
2130
2169
|
|
2131
|
-
#@pattern_cc_1 = '' << TAG_OPEN << @
|
2170
|
+
#@pattern_cc_1 = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ
|
2132
2171
|
#@pattern_cc_1 << @_attr_value << TAG_SEARCH_2_4_2
|
2133
|
-
@pattern_cc_1 = "<#{@
|
2172
|
+
@pattern_cc_1 = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))"
|
2134
2173
|
|
2135
|
-
@pattern_cc_1b = '' << TAG_OPEN << @
|
2136
|
-
#@pattern_cc_1b = "<#{@
|
2174
|
+
@pattern_cc_1b = '' << TAG_OPEN << @_name << TAG_SEARCH_1_4
|
2175
|
+
#@pattern_cc_1b = "<#{@_name}(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))"
|
2137
2176
|
|
2138
|
-
#@pattern_cc_1_1 = '' << TAG_OPEN << @
|
2177
|
+
#@pattern_cc_1_1 = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ
|
2139
2178
|
#@pattern_cc_1_1 << @_attr_value << TAG_SEARCH_4_7
|
2140
|
-
@pattern_cc_1_1 = "<#{@
|
2179
|
+
@pattern_cc_1_1 = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
|
2141
2180
|
|
2142
|
-
@pattern_cc_1_2 = '' << TAG_SEARCH_4_2 << @
|
2143
|
-
#@pattern_cc_1_2 = ".*?<#{@
|
2181
|
+
@pattern_cc_1_2 = '' << TAG_SEARCH_4_2 << @_name << TAG_SEARCH_4_3
|
2182
|
+
#@pattern_cc_1_2 = ".*?<#{@_name}(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))"
|
2144
2183
|
|
2145
2184
|
|
2146
|
-
@pattern_cc_2 = '' << TAG_SEARCH_4_4 << @
|
2147
|
-
#@pattern_cc_2 = '' << "<\\/#{@
|
2185
|
+
@pattern_cc_2 = '' << TAG_SEARCH_4_4 << @_name << TAG_CLOSE
|
2186
|
+
#@pattern_cc_2 = '' << "<\\/#{@_name}>"
|
2148
2187
|
|
2149
|
-
@pattern_cc_2_1 = '' << TAG_SEARCH_4_5 << @
|
2150
|
-
#@pattern_cc_2_1 = ".*?<\\/#{@
|
2188
|
+
@pattern_cc_2_1 = '' << TAG_SEARCH_4_5 << @_name << TAG_CLOSE
|
2189
|
+
#@pattern_cc_2_1 = ".*?<\\/#{@_name}>"
|
2151
2190
|
|
2152
|
-
@pattern_cc_2_2 = '' << TAG_SEARCH_4_6 << @
|
2153
|
-
#@pattern_cc_2_2 = ".*?)<\\/#{@
|
2191
|
+
@pattern_cc_2_2 = '' << TAG_SEARCH_4_6 << @_name << TAG_CLOSE
|
2192
|
+
#@pattern_cc_2_2 = ".*?)<\\/#{@_name}>"
|
2154
2193
|
|
2155
2194
|
#内容あり要素検索
|
2156
2195
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
|
@@ -2170,23 +2209,23 @@ module Meteor
|
|
2170
2209
|
|
2171
2210
|
private :element_pattern_with_3_2
|
2172
2211
|
|
2173
|
-
def element_without_3(
|
2174
|
-
element_without_3_1(
|
2212
|
+
def element_without_3(name)
|
2213
|
+
element_without_3_1(name, TAG_SEARCH_2_3_2)
|
2175
2214
|
end
|
2176
2215
|
|
2177
2216
|
private :element_without_3
|
2178
2217
|
|
2179
|
-
def element_without_3_1(
|
2218
|
+
def element_without_3_1(name, closer)
|
2180
2219
|
|
2181
2220
|
#要素
|
2182
|
-
@elm_ = Meteor::Element.new(
|
2221
|
+
@elm_ = Meteor::Element.new(name)
|
2183
2222
|
#属性
|
2184
2223
|
@elm_.attributes = @res[1]
|
2185
2224
|
#全体
|
2186
2225
|
@elm_.document = @res[0]
|
2187
2226
|
#空要素検索用パターン
|
2188
|
-
@pattern_cc = '' << TAG_OPEN << @
|
2189
|
-
#@pattern_cc = "<#{@
|
2227
|
+
@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ << @_attr_value << closer
|
2228
|
+
#@pattern_cc = "<#{@_name}\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}#{closer}"
|
2190
2229
|
@elm_.pattern = @pattern_cc
|
2191
2230
|
|
2192
2231
|
@elm_.parser = self
|
@@ -2214,7 +2253,9 @@ module Meteor
|
|
2214
2253
|
if @res
|
2215
2254
|
element_3(@res[1], attr_name, attr_value)
|
2216
2255
|
else
|
2217
|
-
|
2256
|
+
if @error_check
|
2257
|
+
puts Meteor::Exception::NoSuchElementException.new(attr_name, attr_value).message
|
2258
|
+
end
|
2218
2259
|
@elm_ = nil
|
2219
2260
|
end
|
2220
2261
|
#=end
|
@@ -2261,7 +2302,9 @@ module Meteor
|
|
2261
2302
|
#@pattern_cc = @pattern_cc_2
|
2262
2303
|
element_with_2_1
|
2263
2304
|
else
|
2264
|
-
|
2305
|
+
if @error_check
|
2306
|
+
puts Meteor::Exception::NoSuchElementException.new(attr_name, attr_value).message
|
2307
|
+
end
|
2265
2308
|
@elm_ = nil
|
2266
2309
|
end
|
2267
2310
|
=end
|
@@ -2292,9 +2335,9 @@ module Meteor
|
|
2292
2335
|
#puts @res.captures.length
|
2293
2336
|
case @res.captures.length
|
2294
2337
|
when FOUR
|
2295
|
-
@
|
2338
|
+
@_name = @res[1]
|
2296
2339
|
#要素
|
2297
|
-
@elm_ = Element.new(@
|
2340
|
+
@elm_ = Element.new(@_name)
|
2298
2341
|
#属性
|
2299
2342
|
@elm_.attributes = @res[2]
|
2300
2343
|
#内容
|
@@ -2302,10 +2345,10 @@ module Meteor
|
|
2302
2345
|
#全体
|
2303
2346
|
@elm_.document = @res[0]
|
2304
2347
|
#内容あり要素検索用パターン
|
2305
|
-
#@pattern_cc = ''<< TAG_OPEN << @
|
2306
|
-
#@pattern_cc << @_attr_value << TAG_SEARCH_NC_2_2 << @
|
2307
|
-
#@pattern_cc << TAG_SEARCH_NC_1_2 << @
|
2308
|
-
@pattern_cc = "<#{@
|
2348
|
+
#@pattern_cc = ''<< TAG_OPEN << @_name << TAG_SEARCH_NC_2_1 << @_attr_name << ATTR_EQ
|
2349
|
+
#@pattern_cc << @_attr_value << TAG_SEARCH_NC_2_2 << @_name
|
2350
|
+
#@pattern_cc << TAG_SEARCH_NC_1_2 << @_name << TAG_CLOSE
|
2351
|
+
@pattern_cc = "<#{@_name}\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*>((?!(#{@_name}[^<>]*>)).)*<\\/#{@_name}>"
|
2309
2352
|
|
2310
2353
|
@elm_.pattern = @pattern_cc
|
2311
2354
|
|
@@ -2314,9 +2357,9 @@ module Meteor
|
|
2314
2357
|
@elm_.parser = self
|
2315
2358
|
|
2316
2359
|
when FIVE,SEVEN
|
2317
|
-
@
|
2360
|
+
@_name = @res[3]
|
2318
2361
|
#要素
|
2319
|
-
@elm_ = Element.new(@
|
2362
|
+
@elm_ = Element.new(@_name)
|
2320
2363
|
#属性
|
2321
2364
|
@elm_.attributes = @res[4]
|
2322
2365
|
#内容
|
@@ -2324,10 +2367,10 @@ module Meteor
|
|
2324
2367
|
#全体
|
2325
2368
|
@elm_.document = @res[0]
|
2326
2369
|
#内容あり要素検索用パターン
|
2327
|
-
#@pattern_cc = ''<< TAG_OPEN << @
|
2328
|
-
#@pattern_cc << @_attr_value << TAG_SEARCH_NC_2_2 << @
|
2329
|
-
#@pattern_cc << TAG_SEARCH_NC_1_2 << @
|
2330
|
-
@pattern_cc = "<#{@
|
2370
|
+
#@pattern_cc = ''<< TAG_OPEN << @_name << TAG_SEARCH_NC_2_1 << @_attr_name << ATTR_EQ
|
2371
|
+
#@pattern_cc << @_attr_value << TAG_SEARCH_NC_2_2 << @_name
|
2372
|
+
#@pattern_cc << TAG_SEARCH_NC_1_2 << @_name << TAG_CLOSE
|
2373
|
+
@pattern_cc = "<#{@_name}\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*>((?!(#{@_name}[^<>]*>)).)*<\\/#{@_name}>"
|
2331
2374
|
|
2332
2375
|
@elm_.pattern = @pattern_cc
|
2333
2376
|
|
@@ -2338,9 +2381,9 @@ module Meteor
|
|
2338
2381
|
when THREE,SIX
|
2339
2382
|
#puts @res[1]
|
2340
2383
|
#puts @res[3]
|
2341
|
-
#@
|
2384
|
+
#@_name = @res[1]
|
2342
2385
|
#内容
|
2343
|
-
@elm_ = Element.new(@
|
2386
|
+
@elm_ = Element.new(@_name)
|
2344
2387
|
#属性
|
2345
2388
|
@elm_.attributes = @res[1].chop
|
2346
2389
|
#内容
|
@@ -2361,7 +2404,7 @@ module Meteor
|
|
2361
2404
|
|
2362
2405
|
def element_with_2_2
|
2363
2406
|
|
2364
|
-
#@pattern_cc_1 = '' << TAG_OPEN << @
|
2407
|
+
#@pattern_cc_1 = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ
|
2365
2408
|
#@pattern_cc_1 << @_attr_value << TAG_SEARCH_2_4_2
|
2366
2409
|
@pattern_cc_1 = "<([^<>\"]*)(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))"
|
2367
2410
|
|
@@ -2390,21 +2433,21 @@ module Meteor
|
|
2390
2433
|
|
2391
2434
|
def create_pattern_2(args_cnt)
|
2392
2435
|
|
2393
|
-
#puts @
|
2436
|
+
#puts @_name
|
2394
2437
|
|
2395
|
-
@pattern_cc_1b = '' << TAG_OPEN << @
|
2438
|
+
@pattern_cc_1b = '' << TAG_OPEN << @_name << TAG_SEARCH_1_4
|
2396
2439
|
|
2397
|
-
#@pattern_cc_1_1 = '' << TAG_OPEN << @
|
2440
|
+
#@pattern_cc_1_1 = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ
|
2398
2441
|
#@pattern_cc_1_1 << @_attr_value << TAG_SEARCH_4_7
|
2399
|
-
@pattern_cc_1_1 = "<#{@
|
2442
|
+
@pattern_cc_1_1 = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
|
2400
2443
|
|
2401
|
-
@pattern_cc_1_2 = '' << TAG_SEARCH_4_2 << @
|
2444
|
+
@pattern_cc_1_2 = '' << TAG_SEARCH_4_2 << @_name << TAG_SEARCH_4_3
|
2402
2445
|
|
2403
|
-
@pattern_cc_2 = '' << TAG_SEARCH_4_4 << @
|
2446
|
+
@pattern_cc_2 = '' << TAG_SEARCH_4_4 << @_name << TAG_CLOSE
|
2404
2447
|
|
2405
|
-
@pattern_cc_2_1 = '' << TAG_SEARCH_4_5 << @
|
2448
|
+
@pattern_cc_2_1 = '' << TAG_SEARCH_4_5 << @_name << TAG_CLOSE
|
2406
2449
|
|
2407
|
-
@pattern_cc_2_2 = '' << TAG_SEARCH_4_6 << @
|
2450
|
+
@pattern_cc_2_2 = '' << TAG_SEARCH_4_6 << @_name << TAG_CLOSE
|
2408
2451
|
|
2409
2452
|
@pattern_2 = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
|
2410
2453
|
@pattern_1b = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b)
|
@@ -2426,7 +2469,7 @@ module Meteor
|
|
2426
2469
|
#全体
|
2427
2470
|
@elm_.document = @res[0]
|
2428
2471
|
#空要素検索用パターン
|
2429
|
-
@pattern_cc = '' << TAG_OPEN << @
|
2472
|
+
@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_NC_2_1 << @_attr_name << ATTR_EQ << @_attr_value << closer
|
2430
2473
|
@elm_.pattern = @pattern_cc
|
2431
2474
|
|
2432
2475
|
@elm_.parser = self
|
@@ -2439,18 +2482,18 @@ module Meteor
|
|
2439
2482
|
|
2440
2483
|
#
|
2441
2484
|
# get element using tag name and attribute1,2(name="value") (要素のタグ名と属性1・属性2(属性名="属性値")で検索し、要素を取得する)
|
2442
|
-
# @param [String] tag
|
2485
|
+
# @param [String] name tag name (タグ名)
|
2443
2486
|
# @param [String] attr_name1 attribute name1 (属性名1)
|
2444
2487
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
2445
2488
|
# @param [String] attr_name2 attribute name2 (属性名2)
|
2446
2489
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
2447
2490
|
# @return [Meteor::Element] element (要素)
|
2448
2491
|
#
|
2449
|
-
def element_5(
|
2492
|
+
def element_5(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
2450
2493
|
|
2451
|
-
element_quote_5(
|
2494
|
+
element_quote_5(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
2452
2495
|
|
2453
|
-
@pattern_cc_1 = "<#{@
|
2496
|
+
@pattern_cc_1 = "<#{@_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}>"
|
2454
2497
|
|
2455
2498
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
|
2456
2499
|
@res1 = @pattern.match(@root.document)
|
@@ -2468,29 +2511,31 @@ module Meteor
|
|
2468
2511
|
@res = @res1
|
2469
2512
|
#@pattern_cc = @pattern_cc_1
|
2470
2513
|
if @res[1]
|
2471
|
-
element_without_5(
|
2514
|
+
element_without_5(name)
|
2472
2515
|
else
|
2473
|
-
element_with_5_1(
|
2516
|
+
element_with_5_1(name)
|
2474
2517
|
end
|
2475
2518
|
elsif @res1.begin(0) > @res2.begin(0)
|
2476
2519
|
@res = @res2
|
2477
2520
|
#@pattern_cc = @pattern_cc_2
|
2478
|
-
element_with_5_1(
|
2521
|
+
element_with_5_1(name)
|
2479
2522
|
end
|
2480
2523
|
elsif @res1 && !@res2
|
2481
2524
|
@res = @res1
|
2482
2525
|
#@pattern_cc = @pattern_cc_1
|
2483
2526
|
if @res[1]
|
2484
|
-
element_without_5(
|
2527
|
+
element_without_5(name)
|
2485
2528
|
else
|
2486
|
-
element_with_5_1(
|
2529
|
+
element_with_5_1(name)
|
2487
2530
|
end
|
2488
2531
|
elsif @res2 && !@res1
|
2489
2532
|
@res = @res2
|
2490
2533
|
#@pattern_cc = @pattern_cc_2
|
2491
|
-
element_with_5_1(
|
2534
|
+
element_with_5_1(name)
|
2492
2535
|
else
|
2493
|
-
|
2536
|
+
if @error_check
|
2537
|
+
puts Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message
|
2538
|
+
end
|
2494
2539
|
@elm_ = nil
|
2495
2540
|
end
|
2496
2541
|
|
@@ -2499,8 +2544,8 @@ module Meteor
|
|
2499
2544
|
|
2500
2545
|
private :element_5
|
2501
2546
|
|
2502
|
-
def element_quote_5(
|
2503
|
-
@
|
2547
|
+
def element_quote_5(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
2548
|
+
@_name = Regexp.quote(name)
|
2504
2549
|
@_attr_name1 = Regexp.quote(attr_name1)
|
2505
2550
|
@_attr_name2 = Regexp.quote(attr_name2)
|
2506
2551
|
@_attr_value1 = Regexp.quote(attr_value1)
|
@@ -2509,13 +2554,13 @@ module Meteor
|
|
2509
2554
|
|
2510
2555
|
private :element_quote_5
|
2511
2556
|
|
2512
|
-
def element_with_5_1(
|
2557
|
+
def element_with_5_1(name)
|
2513
2558
|
|
2514
2559
|
#puts @res.captures.length
|
2515
2560
|
case @res.captures.length
|
2516
2561
|
when FOUR
|
2517
2562
|
#要素
|
2518
|
-
@elm_ = Meteor::Element.new(
|
2563
|
+
@elm_ = Meteor::Element.new(name)
|
2519
2564
|
#属性
|
2520
2565
|
@elm_.attributes = @res[1]
|
2521
2566
|
#内容
|
@@ -2523,13 +2568,13 @@ module Meteor
|
|
2523
2568
|
#全体
|
2524
2569
|
@elm_.document = @res[0]
|
2525
2570
|
#内容あり要素検索用パターン
|
2526
|
-
#@pattern_cc = '' << TAG_OPEN << @
|
2571
|
+
#@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_NC_2_1_2 << @_attr_name1 << ATTR_EQ
|
2527
2572
|
#@pattern_cc << @_attr_value1 << TAG_SEARCH_NC_2_6 << @_attr_name2 << ATTR_EQ
|
2528
2573
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_NC_2_7 << @_attr_name2 << ATTR_EQ
|
2529
2574
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_NC_2_6 << @_attr_name1 << ATTR_EQ
|
2530
|
-
#@pattern_cc << @_attr_value1 << TAG_SEARCH_NC_2_2_2 << @
|
2531
|
-
#@pattern_cc << TAG_SEARCH_NC_1_2 << @
|
2532
|
-
@pattern_cc = "<#{@
|
2575
|
+
#@pattern_cc << @_attr_value1 << TAG_SEARCH_NC_2_2_2 << @_name
|
2576
|
+
#@pattern_cc << TAG_SEARCH_NC_1_2 << @_name << TAG_CLOSE
|
2577
|
+
@pattern_cc = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
2533
2578
|
|
2534
2579
|
@elm_.pattern = @pattern_cc
|
2535
2580
|
#
|
@@ -2538,7 +2583,7 @@ module Meteor
|
|
2538
2583
|
@elm_.parser = self
|
2539
2584
|
when FIVE
|
2540
2585
|
#要素
|
2541
|
-
@elm_ = Meteor::Element.new(
|
2586
|
+
@elm_ = Meteor::Element.new(name)
|
2542
2587
|
#属性
|
2543
2588
|
@elm_.attributes = @res[2]
|
2544
2589
|
#内容
|
@@ -2546,13 +2591,13 @@ module Meteor
|
|
2546
2591
|
#全体
|
2547
2592
|
@elm_.document = @res[0]
|
2548
2593
|
#内容あり要素検索用パターン
|
2549
|
-
#@pattern_cc = '' << TAG_OPEN << @
|
2594
|
+
#@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_NC_2_1_2 << @_attr_name1 << ATTR_EQ
|
2550
2595
|
#@pattern_cc << @_attr_value1 << TAG_SEARCH_NC_2_6 << @_attr_name2 << ATTR_EQ
|
2551
2596
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_NC_2_7 << @_attr_name2 << ATTR_EQ
|
2552
2597
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_NC_2_6 << @_attr_name1 << ATTR_EQ
|
2553
|
-
#@pattern_cc << @_attr_value1 << TAG_SEARCH_NC_2_2_2 << @
|
2554
|
-
#@pattern_cc << TAG_SEARCH_NC_1_2 << @
|
2555
|
-
@pattern_cc = "<#{@
|
2598
|
+
#@pattern_cc << @_attr_value1 << TAG_SEARCH_NC_2_2_2 << @_name
|
2599
|
+
#@pattern_cc << TAG_SEARCH_NC_1_2 << @_name << TAG_CLOSE
|
2600
|
+
@pattern_cc = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
2556
2601
|
|
2557
2602
|
@elm_.pattern = @pattern_cc
|
2558
2603
|
#
|
@@ -2562,7 +2607,7 @@ module Meteor
|
|
2562
2607
|
|
2563
2608
|
when THREE,SIX
|
2564
2609
|
#要素
|
2565
|
-
@elm_ = Meteor::Element.new(
|
2610
|
+
@elm_ = Meteor::Element.new(name)
|
2566
2611
|
#属性
|
2567
2612
|
@elm_.attributes = @res[1].chop
|
2568
2613
|
#要素
|
@@ -2599,38 +2644,38 @@ module Meteor
|
|
2599
2644
|
|
2600
2645
|
def element_pattern_with_5_2
|
2601
2646
|
|
2602
|
-
#@pattern_cc_1 = '' << TAG_OPEN << @
|
2647
|
+
#@pattern_cc_1 = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1_2 << @_attr_name1 << ATTR_EQ
|
2603
2648
|
#@pattern_cc_1 << @_attr_value1 << TAG_SEARCH_2_6 << @_attr_name2 << ATTR_EQ
|
2604
2649
|
#@pattern_cc_1 << @_attr_value2 << TAG_SEARCH_2_7 << @_attr_name2 << ATTR_EQ
|
2605
2650
|
#@pattern_cc_1 << @_attr_value2 << TAG_SEARCH_2_6 << @_attr_name1 << ATTR_EQ
|
2606
2651
|
#@pattern_cc_1 << @_attr_value1 << TAG_SEARCH_2_4_2_2
|
2607
|
-
@pattern_cc_1 = "<#{@
|
2652
|
+
@pattern_cc_1 = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")([^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>)))"
|
2608
2653
|
|
2609
|
-
@pattern_cc_1b = '' << TAG_OPEN << @
|
2610
|
-
#@pattern_cc_1b = "<#{@
|
2654
|
+
@pattern_cc_1b = '' << TAG_OPEN << @_name << TAG_SEARCH_1_4
|
2655
|
+
#@pattern_cc_1b = "<#{@_name}(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))"
|
2611
2656
|
|
2612
|
-
#@pattern_cc_1_1 = '' << TAG_OPEN << @
|
2657
|
+
#@pattern_cc_1_1 = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1_2 << @_attr_name1 << ATTR_EQ
|
2613
2658
|
#@pattern_cc_1_1 << @_attr_value1 << TAG_SEARCH_2_6 << @_attr_name2 << ATTR_EQ
|
2614
2659
|
#@pattern_cc_1_1 << @_attr_value2 << TAG_SEARCH_2_7 << @_attr_name2 << ATTR_EQ
|
2615
2660
|
#@pattern_cc_1_1 << @_attr_value2 << TAG_SEARCH_2_6 << @_attr_name1 << ATTR_EQ
|
2616
2661
|
#@pattern_cc_1_1 << @_attr_value1 << TAG_SEARCH_4_7_2
|
2617
|
-
@pattern_cc_1_1 = "<#{@
|
2662
|
+
@pattern_cc_1_1 = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
|
2618
2663
|
|
2619
|
-
@pattern_cc_1_2 = '' << TAG_SEARCH_4_2 << @
|
2664
|
+
@pattern_cc_1_2 = '' << TAG_SEARCH_4_2 << @_name << TAG_SEARCH_4_3
|
2620
2665
|
|
2621
|
-
@pattern_cc_2 = '' << TAG_SEARCH_4_4 << @
|
2666
|
+
@pattern_cc_2 = '' << TAG_SEARCH_4_4 << @_name << TAG_CLOSE
|
2622
2667
|
|
2623
|
-
@pattern_cc_2_1 = '' << TAG_SEARCH_4_5 << @
|
2668
|
+
@pattern_cc_2_1 = '' << TAG_SEARCH_4_5 << @_name << TAG_CLOSE
|
2624
2669
|
|
2625
|
-
@pattern_cc_2_2 = '' << TAG_SEARCH_4_6 << @
|
2670
|
+
@pattern_cc_2_2 = '' << TAG_SEARCH_4_6 << @_name << TAG_CLOSE
|
2626
2671
|
|
2627
|
-
#@pattern_cc_1_2 = ".*?<#{@
|
2672
|
+
#@pattern_cc_1_2 = ".*?<#{@_name}(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))"
|
2628
2673
|
#
|
2629
|
-
#@pattern_cc_2 = '' << "<\\/#{@
|
2674
|
+
#@pattern_cc_2 = '' << "<\\/#{@_name}>"
|
2630
2675
|
#
|
2631
|
-
#@pattern_cc_2_1 = ".*?<\\/#{@
|
2676
|
+
#@pattern_cc_2_1 = ".*?<\\/#{@_name}>"
|
2632
2677
|
#
|
2633
|
-
#@pattern_cc_2_2 = ".*?)<\\/#{@
|
2678
|
+
#@pattern_cc_2_2 = ".*?)<\\/#{@_name}>"
|
2634
2679
|
|
2635
2680
|
#内容あり要素検索
|
2636
2681
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
|
@@ -2650,27 +2695,27 @@ module Meteor
|
|
2650
2695
|
|
2651
2696
|
private :element_pattern_with_5_2
|
2652
2697
|
|
2653
|
-
def element_without_5(
|
2654
|
-
element_without_5_1(
|
2698
|
+
def element_without_5(name)
|
2699
|
+
element_without_5_1(name, TAG_SEARCH_2_3_2_2)
|
2655
2700
|
end
|
2656
2701
|
|
2657
2702
|
private :element_without_5
|
2658
2703
|
|
2659
|
-
def element_without_5_1(
|
2704
|
+
def element_without_5_1(name, closer)
|
2660
2705
|
|
2661
2706
|
#要素
|
2662
|
-
@elm_ = Meteor::Element.new(
|
2707
|
+
@elm_ = Meteor::Element.new(name)
|
2663
2708
|
#属性
|
2664
2709
|
@elm_.attributes = @res[1]
|
2665
2710
|
#全体
|
2666
2711
|
@elm_.document = @res[0]
|
2667
2712
|
#空要素検索用パターン
|
2668
|
-
#@pattern_cc = '' << TAG_OPEN << @
|
2713
|
+
#@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_NC_2_1_2 << @_attr_name1 << ATTR_EQ
|
2669
2714
|
#@pattern_cc << @_attr_value1 << TAG_SEARCH_NC_2_6 << @_attr_name2 << ATTR_EQ
|
2670
2715
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_NC_2_7 << @_attr_name2 << ATTR_EQ
|
2671
2716
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_NC_2_6 << @_attr_name1 << ATTR_EQ
|
2672
2717
|
#@pattern_cc << @_attr_value1 << closer
|
2673
|
-
@pattern_cc = "<#{@
|
2718
|
+
@pattern_cc = "<#{@_name}(\\s[^<>]*(#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}#{closer}"
|
2674
2719
|
|
2675
2720
|
@elm_.pattern = @pattern_cc
|
2676
2721
|
|
@@ -2702,7 +2747,9 @@ module Meteor
|
|
2702
2747
|
#@elm_ = element_5(@res[1], attr_name1, attr_value1,attr_name2, attr_value2)
|
2703
2748
|
element_5(@res[1], attr_name1, attr_value1, attr_name2, attr_value2)
|
2704
2749
|
else
|
2705
|
-
|
2750
|
+
if @error_check
|
2751
|
+
puts Meteor::Exception::NoSuchElementException.new(attr_name1, attr_value1, attr_name2, attr_value2).message
|
2752
|
+
end
|
2706
2753
|
@elm_ = nil
|
2707
2754
|
end
|
2708
2755
|
|
@@ -2864,7 +2911,7 @@ module Meteor
|
|
2864
2911
|
else
|
2865
2912
|
@position = @res.end(0)
|
2866
2913
|
|
2867
|
-
@
|
2914
|
+
@_name = @res[1]
|
2868
2915
|
|
2869
2916
|
create_pattern_2(args_cnt)
|
2870
2917
|
|
@@ -2912,43 +2959,43 @@ module Meteor
|
|
2912
2959
|
=end
|
2913
2960
|
|
2914
2961
|
# get elements (要素を取得する)
|
2915
|
-
# @overload elements(
|
2962
|
+
# @overload elements(name)
|
2916
2963
|
# get elements using tag name (要素のタグ名で要素を取得する)
|
2917
|
-
# @param [String]
|
2964
|
+
# @param [String,Symbol] name tag name (タグ名)
|
2918
2965
|
# @return [Array<Meteor::Element>] element array(要素配列)
|
2919
|
-
# @overload elements(
|
2966
|
+
# @overload elements(name,attrs)
|
2920
2967
|
# get elements using tag name and attribute map (要素のタグ名と属性(属性名="属性値")あるいは属性1・属性2(属性名="属性値")で要素を取得する)
|
2921
|
-
# @param [String]
|
2922
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
2968
|
+
# @param [String,Symbol] name tag name (タグ名)
|
2969
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
2923
2970
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
2924
2971
|
# @overload elements(attrs)
|
2925
2972
|
# get elements using attribute map (属性(属性名="属性値")あるいは属性1・属性2(属性名="属性値")で要素を取得する)
|
2926
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
2973
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
2927
2974
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
2928
|
-
# @overload elements(
|
2975
|
+
# @overload elements(name,attr_name,attr_value)
|
2929
2976
|
# get elements using tag name and attribute(name="value") (要素のタグ名と属性(属性名="属性値")で要素を取得する)
|
2930
|
-
# @param [String] tag
|
2931
|
-
# @param [String] attr_name attribute name (属性名)
|
2977
|
+
# @param [String,Symbol] name tag name (タグ名)
|
2978
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
2932
2979
|
# @param [String] attr_value attribute value (属性値)
|
2933
2980
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
2934
2981
|
# @overload elements(attr_name,attr_value)
|
2935
2982
|
# get elements using attribute(name="value") (属性(属性名="属性値")で要素を取得する)
|
2936
|
-
# @param [String] attr_name attribute name (属性名)
|
2983
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
2937
2984
|
# @param [String] attr_value attribute value (属性値)
|
2938
2985
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
2939
|
-
# @overload elements(
|
2986
|
+
# @overload elements(name,attr_name1,attr_value1,attr_name2,attr_value2)
|
2940
2987
|
# get elements using tag name and attribute1,2(name="value") (要素のタグ名と属性1・属性2(属性名="属性値")で要素を取得する)
|
2941
|
-
# @param [String]
|
2942
|
-
# @param [String] attr_name1 attribute name1 (属性名1)
|
2988
|
+
# @param [String,Symbol] name tag name (タグ名)
|
2989
|
+
# @param [String,Symbol] attr_name1 attribute name1 (属性名1)
|
2943
2990
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
2944
|
-
# @param [String] attr_name2 attribute name2 (属性名2)
|
2991
|
+
# @param [String,Symbol] attr_name2 attribute name2 (属性名2)
|
2945
2992
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
2946
2993
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
2947
2994
|
# @overload elements(attr_name1,attr_value1,attr_name2,attr_value2)
|
2948
2995
|
# get elements using attribute1,2(name="value") (属性1・属性2(属性名="属性値")で要素を取得する)
|
2949
|
-
# @param [String] attr_name1 attribute name1 (属性名1)
|
2996
|
+
# @param [String,Symbol] attr_name1 attribute name1 (属性名1)
|
2950
2997
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
2951
|
-
# @param [String] attr_name2 attribute name2 (属性名2)
|
2998
|
+
# @param [String,Symbol] attr_name2 attribute name2 (属性名2)
|
2952
2999
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
2953
3000
|
# @return [Array<Meteor::Element>] element array (要素配列)
|
2954
3001
|
#
|
@@ -2999,6 +3046,8 @@ module Meteor
|
|
2999
3046
|
def elements_(*args)
|
3000
3047
|
elm_arr = Array.new
|
3001
3048
|
|
3049
|
+
@on_search = true
|
3050
|
+
|
3002
3051
|
case args.size
|
3003
3052
|
when ONE
|
3004
3053
|
@elm_ = element_1(*args)
|
@@ -3016,33 +3065,36 @@ module Meteor
|
|
3016
3065
|
return elm_arr
|
3017
3066
|
end
|
3018
3067
|
|
3019
|
-
@
|
3068
|
+
@pattern_cc = @elm_.pattern
|
3020
3069
|
|
3021
|
-
|
3070
|
+
#puts @pattern_cc
|
3071
|
+
|
3072
|
+
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
3022
3073
|
|
3023
3074
|
@position = 0
|
3024
3075
|
|
3025
3076
|
while (@res = @pattern.match(@root.document,@position))
|
3026
|
-
|
3027
|
-
|
3077
|
+
@position = @res.end(0)
|
3078
|
+
#puts @res[0]
|
3079
|
+
#if @res
|
3028
3080
|
case args.size
|
3029
3081
|
when ONE
|
3030
3082
|
if @elm_.empty
|
3031
|
-
element_with_1(@elm_.
|
3083
|
+
element_with_1(@elm_.name)
|
3032
3084
|
else
|
3033
|
-
element_without_1(@elm_.
|
3085
|
+
element_without_1(@elm_.name)
|
3034
3086
|
end
|
3035
3087
|
when TWO,THREE
|
3036
3088
|
if @elm_.empty
|
3037
|
-
element_with_3_1(@elm_.
|
3089
|
+
element_with_3_1(@elm_.name)
|
3038
3090
|
else
|
3039
|
-
element_without_3(@elm_.
|
3091
|
+
element_without_3(@elm_.name)
|
3040
3092
|
end
|
3041
3093
|
when FOUR,FIVE
|
3042
3094
|
if @elm_.empty
|
3043
|
-
element_with_5_1(@elm_.
|
3095
|
+
element_with_5_1(@elm_.name)
|
3044
3096
|
else
|
3045
|
-
element_without_5(@elm_.
|
3097
|
+
element_without_5(@elm_.name)
|
3046
3098
|
end
|
3047
3099
|
end
|
3048
3100
|
|
@@ -3051,12 +3103,13 @@ module Meteor
|
|
3051
3103
|
|
3052
3104
|
@element_cache.store(@elm_.object_id, @elm_)
|
3053
3105
|
|
3054
|
-
|
3055
|
-
|
3056
|
-
|
3057
|
-
end
|
3106
|
+
#else
|
3107
|
+
# break
|
3108
|
+
#end
|
3058
3109
|
end
|
3059
|
-
|
3110
|
+
|
3111
|
+
@on_search = false
|
3112
|
+
|
3060
3113
|
elm_arr
|
3061
3114
|
end
|
3062
3115
|
|
@@ -3143,18 +3196,18 @@ module Meteor
|
|
3143
3196
|
# @overload attr(elm,attr)
|
3144
3197
|
# set attribute of element (要素の属性をセットする)
|
3145
3198
|
# @param [Meteor::Element] elm element (要素)
|
3146
|
-
# @param [Hash<String,String>] attr attribute (属性)
|
3199
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attr attribute (属性)
|
3147
3200
|
# @return [Meteor::Element] element (要素)
|
3148
3201
|
# @overload attr(elm,attr_name,attr_value)
|
3149
3202
|
# set attribute of element (要素の属性をセットする)
|
3150
3203
|
# @param [Meteor::Element] elm element (要素)
|
3151
|
-
# @param [String] attr_name attribute name (属性名)
|
3204
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
3152
3205
|
# @param [String,true,false] attr_value attribute value (属性値)
|
3153
3206
|
# @return [Meteor::Element] element (要素)
|
3154
3207
|
# @overload attr(elm,attr_name)
|
3155
3208
|
# get attribute value of element (要素の属性値を取得する)
|
3156
3209
|
# @param [Meteor::Element] elm element (要素)
|
3157
|
-
# @param [String] attr_name attribute name (属性名)
|
3210
|
+
# @param [String,Symbol] attr_name attribute name (属性名)
|
3158
3211
|
# @return [String] attribute value (属性値)
|
3159
3212
|
#
|
3160
3213
|
def attr(elm, attr,*args)
|
@@ -3163,13 +3216,21 @@ module Meteor
|
|
3163
3216
|
when ZERO
|
3164
3217
|
get_attr_value(elm, attr.to_s)
|
3165
3218
|
when ONE
|
3166
|
-
|
3167
|
-
|
3219
|
+
if args[0] != nil
|
3220
|
+
elm.document_sync = true
|
3221
|
+
set_attribute_3(elm, attr.to_s,args[0])
|
3222
|
+
else
|
3223
|
+
remove_attr(elm, attr.to_s)
|
3224
|
+
end
|
3168
3225
|
end
|
3169
3226
|
|
3170
3227
|
elsif attr.kind_of?(Hash) && attr.size == 1
|
3171
|
-
|
3172
|
-
|
3228
|
+
if attr.values[0] != nil
|
3229
|
+
elm.document_sync = true
|
3230
|
+
set_attribute_3(elm, attr.keys[0].to_s, attr.values[0])
|
3231
|
+
else
|
3232
|
+
remove_attr(elm, attr.keys[0].to_s)
|
3233
|
+
end
|
3173
3234
|
#elsif attrs.kind_of?(Hash) && attrs.size >= 1
|
3174
3235
|
# elm.document_sync = true
|
3175
3236
|
# attrs.each{|name,value|
|
@@ -3263,7 +3324,7 @@ module Meteor
|
|
3263
3324
|
#
|
3264
3325
|
# @overload attrs(elm,attrs)
|
3265
3326
|
# @param [Meteor::element] elm element (要素)
|
3266
|
-
# @param [Hash<String,String>] attrs attribute map (属性マップ)
|
3327
|
+
# @param [Hash<String,String>,Hash<Symbol,String>] attrs attribute map (属性マップ)
|
3267
3328
|
# @overload attrs(elm)
|
3268
3329
|
# @param [Meteor::element] elm element (要素)
|
3269
3330
|
# @return [Hash<String,String>] attribute map (要素マップ)
|
@@ -3418,13 +3479,13 @@ module Meteor
|
|
3418
3479
|
when TWO
|
3419
3480
|
#if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(String)
|
3420
3481
|
args[0].document_sync = true
|
3421
|
-
set_content_2(args[0], args[1])
|
3482
|
+
set_content_2(args[0], args[1].to_s)
|
3422
3483
|
#else
|
3423
3484
|
# raise ArgumentError
|
3424
3485
|
#end
|
3425
3486
|
when THREE
|
3426
3487
|
args[0].document_sync = true
|
3427
|
-
set_content_3(args[0], args[1], args[2])
|
3488
|
+
set_content_3(args[0], args[1].to_s, args[2])
|
3428
3489
|
else
|
3429
3490
|
raise ArgumentError
|
3430
3491
|
end
|
@@ -3499,8 +3560,6 @@ module Meteor
|
|
3499
3560
|
elm
|
3500
3561
|
end
|
3501
3562
|
|
3502
|
-
private :remove_attr
|
3503
|
-
|
3504
3563
|
def remove_attrs_(elm, attr_name)
|
3505
3564
|
#属性検索用パターン
|
3506
3565
|
@pattern = Meteor::Core::Util::PatternCache.get('' << attr_name << ERASE_ATTR_1)
|
@@ -3522,9 +3581,9 @@ module Meteor
|
|
3522
3581
|
|
3523
3582
|
#
|
3524
3583
|
# get cx(comment extension) tag (CX(コメント拡張)タグを取得する)
|
3525
|
-
# @overload cxtag(
|
3584
|
+
# @overload cxtag(name,id)
|
3526
3585
|
# get cx(comment extension) tag using tag name and id attribute (要素のタグ名とID属性(id="ID属性値")でCX(コメント拡張)タグを取得する)
|
3527
|
-
# @param [String]
|
3586
|
+
# @param [String,Symbol] name tag name (タグ名)
|
3528
3587
|
# @param [String] id id attribute value (ID属性値)
|
3529
3588
|
# @return [Meteor::Element] element (要素)
|
3530
3589
|
# @overload cxtag(id)
|
@@ -3551,20 +3610,20 @@ module Meteor
|
|
3551
3610
|
|
3552
3611
|
#
|
3553
3612
|
# get cx(comment extension) tag using tag name and id attribute (要素のタグ名とID属性(id="ID属性値")でCX(コメント拡張)タグを取得する)
|
3554
|
-
# @param [String]
|
3613
|
+
# @param [String] name tag name (タグ名)
|
3555
3614
|
# @param [String] id id attribute value (ID属性値)
|
3556
3615
|
# @return [Meteor::Element] element (要素)
|
3557
3616
|
#
|
3558
|
-
def cxtag_2(
|
3617
|
+
def cxtag_2(name, id)
|
3559
3618
|
|
3560
|
-
@
|
3619
|
+
@_name = Regexp.quote(name)
|
3561
3620
|
@_id = Regexp.quote(id)
|
3562
3621
|
|
3563
3622
|
#CXタグ検索用パターン
|
3564
|
-
#@pattern_cc = '' << SEARCH_CX_1 << @
|
3565
|
-
#@pattern_cc << id << SEARCH_CX_3 << @
|
3623
|
+
#@pattern_cc = '' << SEARCH_CX_1 << @_name << SEARCH_CX_2
|
3624
|
+
#@pattern_cc << id << SEARCH_CX_3 << @_name << SEARCH_CX_4 << @_name << SEARCH_CX_5
|
3566
3625
|
#@pattern_cc = "<!--\\s@#{tag}\\s([^<>]*id=\"#{id}\"[^<>]*)-->(((?!(<!--\\s\\/@#{tag})).)*)<!--\\s\\/@#{tag}\\s-->"
|
3567
|
-
@pattern_cc = "<!--\\s@#{@
|
3626
|
+
@pattern_cc = "<!--\\s@#{@_name}\\s([^<>]*id=\"#{@_id}\"[^<>]*)-->(((?!(<!--\\s/@#{@_name})).)*)<!--\\s/@#{@_name}\\s-->"
|
3568
3627
|
|
3569
3628
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
3570
3629
|
#CXタグ検索
|
@@ -3572,7 +3631,7 @@ module Meteor
|
|
3572
3631
|
|
3573
3632
|
if @res
|
3574
3633
|
#要素
|
3575
|
-
@elm_ = Meteor::Element.new(
|
3634
|
+
@elm_ = Meteor::Element.new(name)
|
3576
3635
|
|
3577
3636
|
@elm_.cx = true
|
3578
3637
|
#属性
|
@@ -3681,21 +3740,25 @@ module Meteor
|
|
3681
3740
|
#
|
3682
3741
|
# reflect (反映する)
|
3683
3742
|
#
|
3684
|
-
def
|
3743
|
+
def flash
|
3685
3744
|
|
3686
3745
|
if self.element_hook
|
3687
3746
|
if self.element_hook.origin.mono
|
3688
3747
|
if self.element_hook.origin.cx
|
3689
|
-
#@root.hookDocument << SET_CX_1 << @root.element.
|
3748
|
+
#@root.hookDocument << SET_CX_1 << @root.element.name << SPACE
|
3690
3749
|
#@root.hookDocument << @root.element.attributes << SET_CX_2
|
3691
3750
|
#@root.hookDocument << @root.element.mixed_content << SET_CX_3
|
3692
|
-
#@root.hookDocument << @root.element.
|
3693
|
-
self.document_hook << "<!-- @#{self.element_hook.
|
3751
|
+
#@root.hookDocument << @root.element.name << SET_CX_4
|
3752
|
+
self.document_hook << "<!-- @#{self.element_hook.name} #{self.element_hook.attributes}-->#{self.element_hook.mixed_content}<!-- /@#{self.element_hook.name} -->"
|
3753
|
+
|
3754
|
+
#self.document_hook << @root.kaigyo_code << "<!-- @#{self.element_hook.name} #{self.element_hook.attributes}-->#{self.element_hook.mixed_content}<!-- /@#{self.element_hook.name} -->"
|
3694
3755
|
else
|
3695
|
-
#@root.hookDocument << TAG_OPEN << @root.element.
|
3756
|
+
#@root.hookDocument << TAG_OPEN << @root.element.name
|
3696
3757
|
#@root.hookDocument << @root.element.attributes << TAG_CLOSE << @root.element.mixed_content
|
3697
|
-
#@root.hookDocument << TAG_OPEN3 << @root.element.
|
3698
|
-
self.document_hook << "<#{self.element_hook.
|
3758
|
+
#@root.hookDocument << TAG_OPEN3 << @root.element.name << TAG_CLOSE
|
3759
|
+
self.document_hook << "<#{self.element_hook.name}#{self.element_hook.attributes}>#{self.element_hook.mixed_content}</#{self.element_hook.name}>"
|
3760
|
+
|
3761
|
+
#self.document_hook << @root.kaigyo_code << "<#{self.element_hook.name}#{self.element_hook.attributes}>#{self.element_hook.mixed_content}</#{self.element_hook.name}>"
|
3699
3762
|
end
|
3700
3763
|
self.element_hook = Element.new!(self.element_hook.origin, self)
|
3701
3764
|
else
|
@@ -3703,16 +3766,20 @@ module Meteor
|
|
3703
3766
|
@_attributes = self.element_hook.attributes
|
3704
3767
|
|
3705
3768
|
if self.element_hook.origin.cx
|
3706
|
-
#@root.hookDocument << SET_CX_1 << @root.element.
|
3769
|
+
#@root.hookDocument << SET_CX_1 << @root.element.name << SPACE
|
3707
3770
|
#@root.hookDocument << @_attributes << SET_CX_2
|
3708
3771
|
#@root.hookDocument << @root.document << SET_CX_3
|
3709
|
-
#@root.hookDocument << @root.element.
|
3710
|
-
self.document_hook << "<!-- @#{self.element_hook.
|
3772
|
+
#@root.hookDocument << @root.element.name << SET_CX_4
|
3773
|
+
self.document_hook << "<!-- @#{self.element_hook.name} #{@_attributes}-->#{@root.document}<!-- /@#{self.element_hook.name} -->"
|
3774
|
+
|
3775
|
+
#self.document_hook << @root.kaigyo_code << "<!-- @#{self.element_hook.name} #{@_attributes}-->#{@root.document}<!-- /@#{self.element_hook.name} -->"
|
3711
3776
|
else
|
3712
|
-
#@root.hookDocument << TAG_OPEN << @root.element.
|
3777
|
+
#@root.hookDocument << TAG_OPEN << @root.element.name
|
3713
3778
|
#@root.hookDocument << @_attributes << TAG_CLOSE << @root.document
|
3714
|
-
#@root.hookDocument << TAG_OPEN3 << @root.element.
|
3715
|
-
self.document_hook << "<#{self.element_hook.
|
3779
|
+
#@root.hookDocument << TAG_OPEN3 << @root.element.name << TAG_CLOSE
|
3780
|
+
self.document_hook << "<#{self.element_hook.name}#{@_attributes}>#{@root.document}</#{self.element_hook.name}>"
|
3781
|
+
|
3782
|
+
#self.document_hook << @root.kaigyo_code << "<#{self.element_hook.name}#{@_attributes}>#{@root.document}</#{self.element_hook.name}>"
|
3716
3783
|
end
|
3717
3784
|
self.element_hook = Element.new!(self.element_hook.origin, self)
|
3718
3785
|
end
|
@@ -3756,6 +3823,7 @@ module Meteor
|
|
3756
3823
|
else
|
3757
3824
|
pif2.root_element.document = String.new(elm.document)
|
3758
3825
|
end
|
3826
|
+
pif2.root_element.kaigyo_code = elm.parser.root_element.kaigyo_code
|
3759
3827
|
|
3760
3828
|
@elm_
|
3761
3829
|
end
|
@@ -3826,11 +3894,11 @@ module Meteor
|
|
3826
3894
|
|
3827
3895
|
def create(pif)
|
3828
3896
|
case pif.doc_type
|
3829
|
-
when Parser::
|
3830
|
-
Meteor::Ml::
|
3831
|
-
when Parser::
|
3832
|
-
Meteor::Ml::
|
3833
|
-
when Parser::HTML5
|
3897
|
+
when Parser::HTML4
|
3898
|
+
Meteor::Ml::Html4::ParserImpl.new
|
3899
|
+
when Parser::XHTML4
|
3900
|
+
Meteor::Ml::Xhtml4::ParserImpl.new
|
3901
|
+
when Parser::HTML, Parser::HTML5
|
3834
3902
|
Meteor::Ml::Html5::ParserImpl.new
|
3835
3903
|
when Parser::XHTML5
|
3836
3904
|
Meteor::Ml::Xhtml5::ParserImpl.new
|
@@ -3952,10 +4020,10 @@ module Meteor
|
|
3952
4020
|
end
|
3953
4021
|
|
3954
4022
|
module Ml
|
3955
|
-
module
|
4023
|
+
module Html4
|
3956
4024
|
|
3957
4025
|
#
|
3958
|
-
#
|
4026
|
+
# HTML4 parser (HTMLパーサ)
|
3959
4027
|
#
|
3960
4028
|
class ParserImpl < Meteor::Core::Kernel
|
3961
4029
|
|
@@ -4091,7 +4159,7 @@ module Meteor
|
|
4091
4159
|
#
|
4092
4160
|
def initialize(*args)
|
4093
4161
|
super()
|
4094
|
-
@doc_type = Parser::
|
4162
|
+
@doc_type = Parser::HTML4
|
4095
4163
|
case args.length
|
4096
4164
|
when ZERO
|
4097
4165
|
#initialize_0
|
@@ -4156,12 +4224,16 @@ module Meteor
|
|
4156
4224
|
# analyze document , set content type (ドキュメントをパースし、コンテントタイプをセットする)
|
4157
4225
|
#
|
4158
4226
|
def analyze_content_type
|
4227
|
+
@error_check = false
|
4228
|
+
|
4159
4229
|
element_3(META_S, HTTP_EQUIV, CONTENT_TYPE)
|
4160
4230
|
|
4161
4231
|
if !@elm_
|
4162
4232
|
element_3(META, HTTP_EQUIV, CONTENT_TYPE)
|
4163
4233
|
end
|
4164
4234
|
|
4235
|
+
@error_check = true
|
4236
|
+
|
4165
4237
|
if @elm_
|
4166
4238
|
@root.content_type = @elm_.attr(CONTENT)
|
4167
4239
|
else
|
@@ -4180,6 +4252,7 @@ module Meteor
|
|
4180
4252
|
for a in KAIGYO_CODE
|
4181
4253
|
if @root.document.include?(a)
|
4182
4254
|
@root.kaigyo_code = a
|
4255
|
+
#puts "kaigyo:" << @root.kaigyo_code
|
4183
4256
|
end
|
4184
4257
|
end
|
4185
4258
|
|
@@ -4189,39 +4262,43 @@ module Meteor
|
|
4189
4262
|
|
4190
4263
|
#
|
4191
4264
|
# get element using tag name (要素のタグ名で検索し、要素を取得する)
|
4192
|
-
# @param [String]
|
4265
|
+
# @param [String] name tag name (タグ名)
|
4193
4266
|
# @return [Meteor::Element] element (要素)
|
4194
4267
|
#
|
4195
|
-
def element_1(
|
4196
|
-
@
|
4268
|
+
def element_1(name)
|
4269
|
+
@_name = Regexp.quote(name)
|
4197
4270
|
|
4198
4271
|
#空要素の場合(<->内容あり要素の場合)
|
4199
|
-
if is_match(@@match_tag,
|
4272
|
+
if is_match(@@match_tag, name)
|
4200
4273
|
#空要素検索用パターン
|
4201
|
-
@pattern_cc = '' << TAG_OPEN << @
|
4202
|
-
#@pattern_cc = "<#{@
|
4274
|
+
@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_1_4_2
|
4275
|
+
#@pattern_cc = "<#{@_name}(|\\s[^<>]*)>"
|
4203
4276
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
4204
4277
|
@res = @pattern.match(@root.document)
|
4205
4278
|
if @res
|
4206
|
-
element_without_1(
|
4279
|
+
element_without_1(name)
|
4207
4280
|
else
|
4208
|
-
|
4281
|
+
if @error_check
|
4282
|
+
puts Meteor::Exception::NoSuchElementException.new(name).message
|
4283
|
+
end
|
4209
4284
|
@elm_ = nil
|
4210
4285
|
end
|
4211
4286
|
else
|
4212
4287
|
#内容あり要素検索用パターン
|
4213
|
-
#@pattern_cc = '' << TAG_OPEN << @
|
4214
|
-
#@pattern_cc << TAG_SEARCH_1_2 << @
|
4215
|
-
@pattern_cc = "<#{
|
4288
|
+
#@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_1_1 << @_name
|
4289
|
+
#@pattern_cc << TAG_SEARCH_1_2 << @_name << TAG_CLOSE
|
4290
|
+
@pattern_cc = "<#{@_name}(|\\s[^<>]*)>(((?!(#{tag}[^<>]*>)).)*)<\\/#{@_name}>"
|
4216
4291
|
|
4217
4292
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
4218
4293
|
#内容あり要素検索
|
4219
4294
|
@res = @pattern.match(@root.document)
|
4220
4295
|
#内容あり要素の場合
|
4221
4296
|
if @res
|
4222
|
-
element_with_1(
|
4297
|
+
element_with_1(name)
|
4223
4298
|
else
|
4224
|
-
|
4299
|
+
if @error_check
|
4300
|
+
puts Meteor::Exception::NoSuchElementException.new(name).message
|
4301
|
+
end
|
4225
4302
|
@elm_ = nil
|
4226
4303
|
end
|
4227
4304
|
end
|
@@ -4231,8 +4308,8 @@ module Meteor
|
|
4231
4308
|
|
4232
4309
|
private :element_1
|
4233
4310
|
|
4234
|
-
def element_without_1(
|
4235
|
-
@elm_ = Meteor::Element.new(
|
4311
|
+
def element_without_1(name)
|
4312
|
+
@elm_ = Meteor::Element.new(name)
|
4236
4313
|
#属性
|
4237
4314
|
@elm_.attributes = @res[1]
|
4238
4315
|
#空要素検索用パターン
|
@@ -4247,50 +4324,54 @@ module Meteor
|
|
4247
4324
|
|
4248
4325
|
#
|
4249
4326
|
# get element using tag name and attribute(name="value") (要素のタグ名、属性(属性名="属性値")で検索し、要素を取得する)
|
4250
|
-
# @param [String]
|
4327
|
+
# @param [String] name tag name (タグ名)
|
4251
4328
|
# @param [String] attr_name attribute name (属性名)
|
4252
4329
|
# @param [String] attr_value attribute value (属性値)
|
4253
4330
|
# @return [Meteor::Element] element (要素)
|
4254
4331
|
#
|
4255
|
-
def element_3(
|
4332
|
+
def element_3(name, attr_name, attr_value)
|
4256
4333
|
|
4257
|
-
element_quote_3(
|
4334
|
+
element_quote_3(name, attr_name, attr_value)
|
4258
4335
|
|
4259
4336
|
#空要素の場合(<->内容あり要素の場合)
|
4260
|
-
if is_match(@@match_tag,
|
4337
|
+
if is_match(@@match_tag, name)
|
4261
4338
|
#空要素検索パターン
|
4262
|
-
#@pattern_cc = '' << TAG_OPEN << @
|
4339
|
+
#@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ
|
4263
4340
|
#@pattern_cc << @_attr_value << TAG_SEARCH_2_4_3
|
4264
|
-
@pattern_cc = "<#{@
|
4341
|
+
@pattern_cc = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)>"
|
4265
4342
|
|
4266
4343
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
4267
4344
|
#空要素検索
|
4268
4345
|
@res = @pattern.match(@root.document)
|
4269
4346
|
if @res
|
4270
|
-
element_without_3(
|
4347
|
+
element_without_3(name)
|
4271
4348
|
else
|
4272
|
-
|
4349
|
+
if @error_check
|
4350
|
+
puts Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message
|
4351
|
+
end
|
4273
4352
|
@elm_ = nil
|
4274
4353
|
end
|
4275
4354
|
else
|
4276
4355
|
#内容あり要素検索パターン
|
4277
|
-
#@pattern_cc = '' << TAG_OPEN << @
|
4278
|
-
#@pattern_cc << @_attr_value << TAG_SEARCH_2_2 << @
|
4279
|
-
#@pattern_cc << TAG_SEARCH_1_2 << @
|
4280
|
-
@pattern_cc = "<#{@
|
4356
|
+
#@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ
|
4357
|
+
#@pattern_cc << @_attr_value << TAG_SEARCH_2_2 << @_name
|
4358
|
+
#@pattern_cc << TAG_SEARCH_1_2 << @_name << TAG_CLOSE
|
4359
|
+
@pattern_cc = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
4281
4360
|
|
4282
4361
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
4283
4362
|
#内容あり要素検索
|
4284
4363
|
@res = @pattern.match(@root.document)
|
4285
4364
|
|
4286
|
-
if !@res && !is_match(@@match_tag_sng,
|
4365
|
+
if !@res && !is_match(@@match_tag_sng, name)
|
4287
4366
|
@res = element_with_3_2
|
4288
4367
|
end
|
4289
4368
|
|
4290
4369
|
if @res
|
4291
|
-
element_with_3_1(
|
4370
|
+
element_with_3_1(name)
|
4292
4371
|
else
|
4293
|
-
|
4372
|
+
if @error_check
|
4373
|
+
puts Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message
|
4374
|
+
end
|
4294
4375
|
@elm_ = nil
|
4295
4376
|
end
|
4296
4377
|
end
|
@@ -4300,8 +4381,8 @@ module Meteor
|
|
4300
4381
|
|
4301
4382
|
private :element_3
|
4302
4383
|
|
4303
|
-
def element_without_3(
|
4304
|
-
element_without_3_1(
|
4384
|
+
def element_without_3(name)
|
4385
|
+
element_without_3_1(name, TAG_SEARCH_2_4_3)
|
4305
4386
|
end
|
4306
4387
|
|
4307
4388
|
private :element_without_3
|
@@ -4326,7 +4407,9 @@ module Meteor
|
|
4326
4407
|
if @res
|
4327
4408
|
element_3(@res[1], attr_name, attr_value)
|
4328
4409
|
else
|
4329
|
-
|
4410
|
+
if @error_check
|
4411
|
+
puts Meteor::Exception::NoSuchElementException.new(attr_name, attr_value).message
|
4412
|
+
end
|
4330
4413
|
@elm_ = nil
|
4331
4414
|
end
|
4332
4415
|
|
@@ -4337,46 +4420,48 @@ module Meteor
|
|
4337
4420
|
|
4338
4421
|
#
|
4339
4422
|
# get element using tag name and attribute1,2(name="value") (要素のタグ名と属性1・属性2(属性名="属性値")で検索し、要素を取得する)
|
4340
|
-
# @param [String]
|
4423
|
+
# @param [String] name tag name (タグ名)
|
4341
4424
|
# @param [String] attr_name1 attribute name1 (属性名1)
|
4342
4425
|
# @param [String] attr_value1 attribute value1 (属性値1)
|
4343
4426
|
# @param [String] attr_name2 attribute name2 (属性名2)
|
4344
4427
|
# @param [String] attr_value2 attribute value2 (属性値2)
|
4345
4428
|
# @return [Meteor::Element] element (要素)
|
4346
4429
|
#
|
4347
|
-
def element_5(
|
4430
|
+
def element_5(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
4348
4431
|
|
4349
|
-
element_quote_5(
|
4432
|
+
element_quote_5(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
4350
4433
|
|
4351
4434
|
#空要素の場合(<->内容あり要素の場合)
|
4352
|
-
if is_match(@@match_tag,
|
4435
|
+
if is_match(@@match_tag, name)
|
4353
4436
|
#空要素検索パターン
|
4354
|
-
#@pattern_cc = '' << TAG_OPEN << @
|
4437
|
+
#@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1_2 << @_attr_name1 << ATTR_EQ
|
4355
4438
|
#@pattern_cc << @_attr_value1 << TAG_SEARCH_2_6 << @_attr_name2 << ATTR_EQ
|
4356
4439
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_2_7 << @_attr_name2 << ATTR_EQ
|
4357
4440
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_2_6 << @_attr_name1 << ATTR_EQ
|
4358
4441
|
#@pattern_cc << @_attr_value1 << TAG_SEARCH_2_4_3_2
|
4359
|
-
@pattern_cc = "<#{@
|
4442
|
+
@pattern_cc = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")[^<>]*)>"
|
4360
4443
|
|
4361
4444
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
4362
4445
|
#空要素検索
|
4363
4446
|
@res = @pattern.match(@root.document)
|
4364
4447
|
|
4365
4448
|
if @res
|
4366
|
-
element_without_5(
|
4449
|
+
element_without_5(name)
|
4367
4450
|
else
|
4368
|
-
|
4451
|
+
if @error_check
|
4452
|
+
puts Meteor::Exception::NoSuchElementException.new(name, attr_name1, attr_value1, attr_name2, attr_value2).message
|
4453
|
+
end
|
4369
4454
|
@elm_ = nil
|
4370
4455
|
end
|
4371
4456
|
else
|
4372
4457
|
#内容あり要素検索パターン
|
4373
|
-
#@pattern_cc = '' << TAG_OPEN << @
|
4458
|
+
#@pattern_cc = '' << TAG_OPEN << @_name << TAG_SEARCH_2_1_2 << @_attr_name1 << ATTR_EQ
|
4374
4459
|
#@pattern_cc << @_attr_value1 << TAG_SEARCH_2_6 << @_attr_name2 << ATTR_EQ
|
4375
4460
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_2_7 << @_attr_name2 << ATTR_EQ
|
4376
4461
|
#@pattern_cc << @_attr_value2 << TAG_SEARCH_2_6 << @_attr_name1 << ATTR_EQ
|
4377
|
-
#@pattern_cc << @_attr_value1 << TAG_SEARCH_2_2_2 << @
|
4378
|
-
#@pattern_cc << TAG_SEARCH_1_2 << @
|
4379
|
-
@pattern_cc = "<#{@
|
4462
|
+
#@pattern_cc << @_attr_value1 << TAG_SEARCH_2_2_2 << @_name
|
4463
|
+
#@pattern_cc << TAG_SEARCH_1_2 << @_name << TAG_CLOSE
|
4464
|
+
@pattern_cc = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
4380
4465
|
|
4381
4466
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
4382
4467
|
#内容あり要素検索
|
@@ -4387,9 +4472,11 @@ module Meteor
|
|
4387
4472
|
end
|
4388
4473
|
|
4389
4474
|
if @res
|
4390
|
-
element_with_5_1(
|
4475
|
+
element_with_5_1(name)
|
4391
4476
|
else
|
4392
|
-
|
4477
|
+
if @error_check
|
4478
|
+
puts Meteor::Exception::NoSuchElementException.new(name, attr_name1, attr_value1, attr_name2, attr_value2).message
|
4479
|
+
end
|
4393
4480
|
@elm_ = nil
|
4394
4481
|
end
|
4395
4482
|
end
|
@@ -4399,8 +4486,8 @@ module Meteor
|
|
4399
4486
|
|
4400
4487
|
private :element_5
|
4401
4488
|
|
4402
|
-
def element_without_5(
|
4403
|
-
element_without_5_1(
|
4489
|
+
def element_without_5(name)
|
4490
|
+
element_without_5_1(name, TAG_SEARCH_2_4_3_2)
|
4404
4491
|
end
|
4405
4492
|
|
4406
4493
|
private :element_without_5
|
@@ -4432,7 +4519,9 @@ module Meteor
|
|
4432
4519
|
if @res
|
4433
4520
|
element_5(@res[1], attr_name1, attr_value1, attr_name2, attr_value2)
|
4434
4521
|
else
|
4435
|
-
|
4522
|
+
if @error_check
|
4523
|
+
puts Meteor::Exception::NoSuchElementException.new(attr_name1, attr_value1, attr_name2, attr_value2).message
|
4524
|
+
end
|
4436
4525
|
@elm_ = nil
|
4437
4526
|
end
|
4438
4527
|
|
@@ -4442,15 +4531,15 @@ module Meteor
|
|
4442
4531
|
private :element_4
|
4443
4532
|
|
4444
4533
|
def edit_attrs_(elm, attr_name, attr_value)
|
4445
|
-
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.
|
4534
|
+
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.name)
|
4446
4535
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_selected_m, @@pattern_selected_r)
|
4447
|
-
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.
|
4536
|
+
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.name)
|
4448
4537
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_multiple_m, @@pattern_multiple_r)
|
4449
|
-
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.
|
4538
|
+
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name)
|
4450
4539
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_disabled_m, @@pattern_disabled_r)
|
4451
|
-
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.
|
4540
|
+
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.name) && is_match(RADIO, get_type(elm))
|
4452
4541
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_checked_m, @@pattern_checked_r)
|
4453
|
-
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.
|
4542
|
+
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.name) || (is_match(INPUT, elm.name) && is_match(READONLY_TYPE, get_type(elm))))
|
4454
4543
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_readonly_m, @@pattern_readonly_r)
|
4455
4544
|
else
|
4456
4545
|
super(elm, attr_name, attr_value)
|
@@ -4488,15 +4577,15 @@ module Meteor
|
|
4488
4577
|
private :edit_document_1
|
4489
4578
|
|
4490
4579
|
def get_attr_value_(elm, attr_name)
|
4491
|
-
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.
|
4580
|
+
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.name)
|
4492
4581
|
get_attr_value_r(elm, @@pattern_selected_m)
|
4493
|
-
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.
|
4582
|
+
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.name)
|
4494
4583
|
get_attr_value_r(elm, @@pattern_multiple_m)
|
4495
|
-
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.
|
4584
|
+
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name)
|
4496
4585
|
get_attr_value_r(elm, @@pattern_disabled_m)
|
4497
|
-
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.
|
4586
|
+
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.name) && is_match(RADIO, get_type(elm))
|
4498
4587
|
get_attr_value_r(elm, @@pattern_checked_m)
|
4499
|
-
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.
|
4588
|
+
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.name) || (is_match(INPUT, elm.name) && is_match(READONLY_TYPE, get_type(elm))))
|
4500
4589
|
get_attr_value_r(elm, @@pattern_readonly_m)
|
4501
4590
|
else
|
4502
4591
|
super(elm, attr_name)
|
@@ -4592,7 +4681,7 @@ module Meteor
|
|
4592
4681
|
|
4593
4682
|
def escape(content)
|
4594
4683
|
#特殊文字の置換
|
4595
|
-
content.gsub
|
4684
|
+
content = content.gsub(@@pattern_escape, TABLE_FOR_ESCAPE_)
|
4596
4685
|
|
4597
4686
|
content
|
4598
4687
|
end
|
@@ -4638,7 +4727,7 @@ module Meteor
|
|
4638
4727
|
def unescape_content(content, elm)
|
4639
4728
|
content_ = unescape(content)
|
4640
4729
|
|
4641
|
-
if elm.cx || !is_match(@@match_tag_2, elm.
|
4730
|
+
if elm.cx || !is_match(@@match_tag_2, elm.name)
|
4642
4731
|
if content.include?(BR_2)
|
4643
4732
|
#「<br>」->「¥r?¥n」
|
4644
4733
|
content_.gsub!(@@pattern_br_2, @root.kaigyo_code)
|
@@ -4654,10 +4743,10 @@ module Meteor
|
|
4654
4743
|
|
4655
4744
|
end
|
4656
4745
|
|
4657
|
-
module
|
4746
|
+
module Xhtml4
|
4658
4747
|
|
4659
4748
|
#
|
4660
|
-
#
|
4749
|
+
# XHTML4 parser (XHTML4パーサ)
|
4661
4750
|
#
|
4662
4751
|
class ParserImpl < Meteor::Core::Kernel
|
4663
4752
|
|
@@ -4794,7 +4883,7 @@ module Meteor
|
|
4794
4883
|
#
|
4795
4884
|
def initialize(*args)
|
4796
4885
|
super()
|
4797
|
-
@doc_type = Parser::
|
4886
|
+
@doc_type = Parser::XHTML4
|
4798
4887
|
case args.length
|
4799
4888
|
when ZERO
|
4800
4889
|
#initialize_0
|
@@ -4858,12 +4947,16 @@ module Meteor
|
|
4858
4947
|
# analyze document , set content type (ドキュメントをパースし、コンテントタイプをセットする)
|
4859
4948
|
#
|
4860
4949
|
def analyze_content_type
|
4950
|
+
@error_check = false
|
4951
|
+
|
4861
4952
|
element_3(META_S, HTTP_EQUIV, CONTENT_TYPE)
|
4862
4953
|
|
4863
4954
|
if !@elm_
|
4864
4955
|
element_3(META, HTTP_EQUIV, CONTENT_TYPE)
|
4865
4956
|
end
|
4866
4957
|
|
4958
|
+
@error_check = true
|
4959
|
+
|
4867
4960
|
if @elm_
|
4868
4961
|
@root.content_type = @elm_.attr(CONTENT)
|
4869
4962
|
else
|
@@ -4890,15 +4983,15 @@ module Meteor
|
|
4890
4983
|
|
4891
4984
|
def edit_attrs_(elm, attr_name, attr_value)
|
4892
4985
|
|
4893
|
-
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.
|
4986
|
+
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.name)
|
4894
4987
|
edit_attrs_5(elm, attr_value, @@pattern_selected_m, @@pattern_selected_r, SELECTED_U)
|
4895
|
-
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.
|
4988
|
+
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.name)
|
4896
4989
|
edit_attrs_5(elm, attr_value, @@pattern_multiple_m, @@pattern_multiple_r, MULTIPLE_U)
|
4897
|
-
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.
|
4990
|
+
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name)
|
4898
4991
|
edit_attrs_5(elm, attr_value, @@pattern_disabled_m, @@pattern_disabled_r, DISABLED_U)
|
4899
|
-
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.
|
4992
|
+
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.name) && is_match(RADIO, get_type(elm))
|
4900
4993
|
edit_attrs_5(elm, attr_value, @@pattern_checked_m, @@pattern_checked_r, CHECKED_U)
|
4901
|
-
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.
|
4994
|
+
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.name) || (is_match(INPUT, elm.name) && is_match(READONLY_TYPE, get_type(elm))))
|
4902
4995
|
edit_attrs_5(elm, attr_value, @@pattern_readonly_m, @@pattern_readonly_r, READONLY_U)
|
4903
4996
|
else
|
4904
4997
|
super(elm, attr_name, attr_value)
|
@@ -4938,15 +5031,15 @@ module Meteor
|
|
4938
5031
|
private :edit_attrs_5
|
4939
5032
|
|
4940
5033
|
def get_attr_value_(elm, attr_name)
|
4941
|
-
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.
|
5034
|
+
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.name)
|
4942
5035
|
get_attr_value_r(elm, attr_name, @@pattern_selected_m1)
|
4943
|
-
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.
|
5036
|
+
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.name)
|
4944
5037
|
get_attr_value_r(elm, attr_name, @@pattern_multiple_m1)
|
4945
|
-
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.
|
5038
|
+
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name)
|
4946
5039
|
get_attr_value_r(elm, attr_name, @@pattern_disabled_m1)
|
4947
|
-
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.
|
5040
|
+
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.name) && is_match(RADIO, get_type(elm))
|
4948
5041
|
get_attr_value_r(elm, attr_name, @@pattern_checked_m1)
|
4949
|
-
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.
|
5042
|
+
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.name) || (is_match(INPUT, elm.name) && is_match(READONLY_TYPE, get_type(elm))))
|
4950
5043
|
get_attr_value_r(elm, attr_name, @@pattern_readonly_m1)
|
4951
5044
|
else
|
4952
5045
|
super(elm, attr_name)
|
@@ -5028,7 +5121,7 @@ module Meteor
|
|
5028
5121
|
|
5029
5122
|
def escape(content)
|
5030
5123
|
#特殊文字の置換
|
5031
|
-
content.gsub
|
5124
|
+
content = content.gsub(@@pattern_escape, TABLE_FOR_ESCAPE_)
|
5032
5125
|
|
5033
5126
|
content
|
5034
5127
|
end
|
@@ -5074,7 +5167,7 @@ module Meteor
|
|
5074
5167
|
def unescape_content(content, elm)
|
5075
5168
|
content_ = unescape(content)
|
5076
5169
|
|
5077
|
-
if (elm.cx || !is_match(@@match_tag_2, elm.
|
5170
|
+
if (elm.cx || !is_match(@@match_tag_2, elm.name)) && content.include?(BR_2)
|
5078
5171
|
#「<br>」->「¥r?¥n」
|
5079
5172
|
content_.gsub!(@@pattern_br_2, @root.kaigyo_code)
|
5080
5173
|
end
|
@@ -5093,7 +5186,7 @@ module Meteor
|
|
5093
5186
|
#
|
5094
5187
|
# HTML5 parser (HTML5パーサ)
|
5095
5188
|
#
|
5096
|
-
class ParserImpl < Meteor::Ml::
|
5189
|
+
class ParserImpl < Meteor::Ml::Html4::ParserImpl
|
5097
5190
|
|
5098
5191
|
CHARSET = 'charset'.freeze
|
5099
5192
|
UTF8 = 'utf-8'.freeze
|
@@ -5164,12 +5257,16 @@ module Meteor
|
|
5164
5257
|
# analyze document , set content type (ドキュメントをパースし、コンテントタイプをセットする)
|
5165
5258
|
#
|
5166
5259
|
def analyze_content_type
|
5260
|
+
@error_check = false
|
5261
|
+
|
5167
5262
|
element_3(META_S, HTTP_EQUIV, CONTENT_TYPE)
|
5168
5263
|
|
5169
5264
|
if !@elm_
|
5170
5265
|
element_3(META, HTTP_EQUIV, CONTENT_TYPE)
|
5171
5266
|
end
|
5172
5267
|
|
5268
|
+
@error_check = true
|
5269
|
+
|
5173
5270
|
if @elm_
|
5174
5271
|
@root.content_type = @elm_.attr(CONTENT)
|
5175
5272
|
@root.charset = @elm_.attr(CHARSET)
|
@@ -5185,17 +5282,17 @@ module Meteor
|
|
5185
5282
|
private :analyze_content_type
|
5186
5283
|
|
5187
5284
|
def edit_attrs_(elm, attr_name, attr_value)
|
5188
|
-
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.
|
5285
|
+
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.name)
|
5189
5286
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_selected_m, @@pattern_selected_r)
|
5190
|
-
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.
|
5287
|
+
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.name)
|
5191
5288
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_multiple_m, @@pattern_multiple_r)
|
5192
|
-
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.
|
5289
|
+
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name)
|
5193
5290
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_disabled_m, @@pattern_disabled_r)
|
5194
|
-
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.
|
5291
|
+
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.name) && is_match(RADIO, get_type(elm))
|
5195
5292
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_checked_m, @@pattern_checked_r)
|
5196
|
-
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.
|
5293
|
+
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.name) || (is_match(INPUT, elm.name) && is_match(READONLY_TYPE, get_type(elm))))
|
5197
5294
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_readonly_m, @@pattern_readonly_r)
|
5198
|
-
elsif is_match(REQUIRED, attr_name) && is_match(REQUIRE_ELEMENT, elm.
|
5295
|
+
elsif is_match(REQUIRED, attr_name) && is_match(REQUIRE_ELEMENT, elm.name)
|
5199
5296
|
edit_attrs_5(elm, attr_name, attr_value, @@pattern_required_m, @@pattern_required_r)
|
5200
5297
|
else
|
5201
5298
|
super(elm, attr_name, attr_value)
|
@@ -5205,17 +5302,17 @@ module Meteor
|
|
5205
5302
|
private :edit_attrs_
|
5206
5303
|
|
5207
5304
|
def get_attr_value_(elm, attr_name)
|
5208
|
-
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.
|
5305
|
+
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.name)
|
5209
5306
|
get_attr_value_r(elm, @@pattern_selected_m)
|
5210
|
-
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.
|
5307
|
+
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.name)
|
5211
5308
|
get_attr_value_r(elm, @@pattern_multiple_m)
|
5212
|
-
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.
|
5309
|
+
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name)
|
5213
5310
|
get_attr_value_r(elm, @@pattern_disabled_m)
|
5214
|
-
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.
|
5311
|
+
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.name) && is_match(RADIO, get_type(elm))
|
5215
5312
|
get_attr_value_r(elm, @@pattern_checked_m)
|
5216
|
-
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.
|
5313
|
+
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.name) || (is_match(INPUT, elm.name) && is_match(READONLY_TYPE, get_type(elm))))
|
5217
5314
|
get_attr_value_r(elm, @@pattern_readonly_m)
|
5218
|
-
elsif is_match(REQUIRED, attr_name) && is_match(REQUIRE_ELEMENT, elm.
|
5315
|
+
elsif is_match(REQUIRED, attr_name) && is_match(REQUIRE_ELEMENT, elm.name)
|
5219
5316
|
get_attr_value_r(elm, @@pattern_required_m)
|
5220
5317
|
else
|
5221
5318
|
super(elm, attr_name)
|
@@ -5233,7 +5330,7 @@ module Meteor
|
|
5233
5330
|
#
|
5234
5331
|
# XHTML5 parser (XHTML5パーサ)
|
5235
5332
|
#
|
5236
|
-
class ParserImpl < Meteor::Ml::
|
5333
|
+
class ParserImpl < Meteor::Ml::Xhtml4::ParserImpl
|
5237
5334
|
|
5238
5335
|
CHARSET = 'charset'.freeze
|
5239
5336
|
UTF8 = 'utf-8'.freeze
|
@@ -5300,12 +5397,16 @@ module Meteor
|
|
5300
5397
|
# analyze document , set content type (ドキュメントをパースし、コンテントタイプをセットする)
|
5301
5398
|
#
|
5302
5399
|
def analyze_content_type
|
5400
|
+
@error_check = false
|
5401
|
+
|
5303
5402
|
element_3(META_S, HTTP_EQUIV, CONTENT_TYPE)
|
5304
5403
|
|
5305
5404
|
if !@elm_
|
5306
5405
|
element_3(META, HTTP_EQUIV, CONTENT_TYPE)
|
5307
5406
|
end
|
5308
5407
|
|
5408
|
+
@error_check = true
|
5409
|
+
|
5309
5410
|
if @elm_
|
5310
5411
|
@root.content_type = @elm_.attr(CONTENT)
|
5311
5412
|
@root.charset = @elm_.attr(CHARSET)
|
@@ -5322,17 +5423,17 @@ module Meteor
|
|
5322
5423
|
|
5323
5424
|
def edit_attrs_(elm, attr_name, attr_value)
|
5324
5425
|
|
5325
|
-
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.
|
5426
|
+
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.name)
|
5326
5427
|
edit_attrs_5(elm, attr_value, @@pattern_selected_m, @@pattern_selected_r, SELECTED_U)
|
5327
|
-
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.
|
5428
|
+
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.name)
|
5328
5429
|
edit_attrs_5(elm, attr_value, @@pattern_multiple_m, @@pattern_multiple_r, MULTIPLE_U)
|
5329
|
-
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.
|
5430
|
+
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name)
|
5330
5431
|
edit_attrs_5(elm, attr_value, @@pattern_disabled_m, @@pattern_disabled_r, DISABLED_U)
|
5331
|
-
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.
|
5432
|
+
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.name) && is_match(RADIO, get_type(elm))
|
5332
5433
|
edit_attrs_5(elm, attr_value, @@pattern_checked_m, @@pattern_checked_r, CHECKED_U)
|
5333
|
-
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.
|
5434
|
+
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.name) || (is_match(INPUT, elm.name) && is_match(READONLY_TYPE, get_type(elm))))
|
5334
5435
|
edit_attrs_5(elm, attr_value, @@pattern_readonly_m, @@pattern_readonly_r, READONLY_U)
|
5335
|
-
elsif is_match(REQUIRED, attr_name) && is_match(REQUIRE_ELEMENT, elm.
|
5436
|
+
elsif is_match(REQUIRED, attr_name) && is_match(REQUIRE_ELEMENT, elm.name)
|
5336
5437
|
edit_attrs_5(elm, attr_value, @@pattern_required_m, @@pattern_required_r, REQUIRED_U)
|
5337
5438
|
else
|
5338
5439
|
super(elm, attr_name, attr_value)
|
@@ -5343,17 +5444,17 @@ module Meteor
|
|
5343
5444
|
private :edit_attrs_
|
5344
5445
|
|
5345
5446
|
def get_attr_value_(elm, attr_name)
|
5346
|
-
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.
|
5447
|
+
if is_match(SELECTED, attr_name) && is_match(OPTION, elm.name)
|
5347
5448
|
get_attr_value_r(elm, attr_name, @@pattern_selected_m1)
|
5348
|
-
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.
|
5449
|
+
elsif is_match(MULTIPLE, attr_name) && is_match(SELECT, elm.name)
|
5349
5450
|
get_attr_value_r(elm, attr_name, @@pattern_multiple_m1)
|
5350
|
-
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.
|
5451
|
+
elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name)
|
5351
5452
|
get_attr_value_r(elm, attr_name, @@pattern_disabled_m1)
|
5352
|
-
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.
|
5453
|
+
elsif is_match(CHECKED, attr_name) && is_match(INPUT, elm.name) && is_match(RADIO, get_type(elm))
|
5353
5454
|
get_attr_value_r(elm, attr_name, @@pattern_checked_m1)
|
5354
|
-
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.
|
5455
|
+
elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA, elm.name) || (is_match(INPUT, elm.name) && is_match(READONLY_TYPE, get_type(elm))))
|
5355
5456
|
get_attr_value_r(elm, attr_name, @@pattern_readonly_m1)
|
5356
|
-
elsif is_match(REQUIRED, attr_name) && is_match(REQUIRE_ELEMENT, elm.
|
5457
|
+
elsif is_match(REQUIRED, attr_name) && is_match(REQUIRE_ELEMENT, elm.name)
|
5357
5458
|
get_attr_value_r(elm, attr_name, @@pattern_required_m1)
|
5358
5459
|
else
|
5359
5460
|
super(elm, attr_name)
|
@@ -5373,6 +5474,9 @@ module Meteor
|
|
5373
5474
|
#
|
5374
5475
|
class ParserImpl < Meteor::Core::Kernel
|
5375
5476
|
|
5477
|
+
#KAIGYO_CODE = "\r?\n|\r".freeze
|
5478
|
+
KAIGYO_CODE = ["\r\n".freeze, "\n".freeze, "\r".freeze]
|
5479
|
+
|
5376
5480
|
PATTERN_UNESCAPE = '&(amp|quot|apos|gt|lt);'.freeze
|
5377
5481
|
|
5378
5482
|
@@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
|
@@ -5427,13 +5531,50 @@ module Meteor
|
|
5427
5531
|
|
5428
5532
|
private :initialize_1
|
5429
5533
|
|
5534
|
+
|
5535
|
+
#
|
5536
|
+
# parse document (ドキュメントを解析する)
|
5537
|
+
#
|
5538
|
+
def parse
|
5539
|
+
analyze_ml
|
5540
|
+
end
|
5541
|
+
|
5542
|
+
#
|
5543
|
+
# analyze document (ドキュメントをパースする)
|
5544
|
+
#
|
5545
|
+
def analyze_ml
|
5546
|
+
#改行コードの取得
|
5547
|
+
analyze_kaigyo_code
|
5548
|
+
|
5549
|
+
@res = nil
|
5550
|
+
end
|
5551
|
+
|
5552
|
+
private :analyze_ml
|
5553
|
+
|
5554
|
+
#
|
5430
5555
|
# get content type (コンテントタイプを取得する)
|
5431
|
-
# @return [
|
5556
|
+
# @return [String] conent type (コンテントタイプ)
|
5432
5557
|
#
|
5433
5558
|
def content_type
|
5434
5559
|
@root.content_type
|
5435
5560
|
end
|
5436
5561
|
|
5562
|
+
#
|
5563
|
+
# analuze document , set newline (ドキュメントをパースし、改行コードをセットする)
|
5564
|
+
#
|
5565
|
+
def analyze_kaigyo_code
|
5566
|
+
#改行コード取得
|
5567
|
+
|
5568
|
+
for a in KAIGYO_CODE
|
5569
|
+
if @root.document.include?(a)
|
5570
|
+
@root.kaigyo_code = a
|
5571
|
+
#puts "kaigyo:" << @root.kaigyo_code
|
5572
|
+
end
|
5573
|
+
end
|
5574
|
+
|
5575
|
+
end
|
5576
|
+
|
5577
|
+
private :analyze_kaigyo_code
|
5437
5578
|
|
5438
5579
|
def escape(content)
|
5439
5580
|
#特殊文字の置換
|