asip-meteor 0.9.2.4 → 0.9.2.5

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.
Files changed (2) hide show
  1. data/lib/meteor.rb +544 -531
  2. metadata +2 -2
data/lib/meteor.rb CHANGED
@@ -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.2.4
21
+ # @version 0.9.2.5
22
22
  #
23
23
 
24
24
  module Meteor
25
25
 
26
- VERSION = "0.9.2.4"
26
+ VERSION = "0.9.2.5"
27
27
 
28
28
  RUBY_VERSION_1_9_0 = '1.9.0'
29
29
 
@@ -53,30 +53,30 @@ module Meteor
53
53
  #
54
54
  def initialize(*args)
55
55
  case args.length
56
- when ONE
57
- if args[0].kind_of?(String) then
58
- initialize_s(args[0])
59
- elsif args[0].kind_of?(Meteor::Element)
60
- initialize_e(args[0])
56
+ when ONE
57
+ if args[0].kind_of?(String) then
58
+ initialize_s(args[0])
59
+ elsif args[0].kind_of?(Meteor::Element)
60
+ initialize_e(args[0])
61
+ else
62
+ raise ArgumentError
63
+ end
64
+ when TWO
65
+ @name = args[0].name
66
+ @attributes = String.new(args[0].attributes)
67
+ @mixed_content = String.new(args[0].mixed_content)
68
+ @pattern = String.new(args[0].pattern)
69
+ @document = String.new(args[0].document)
70
+ @empty = args[0].empty
71
+ @cx = args[0].cx
72
+ @mono = args[0].mono
73
+ @parser = args[1]
74
+ #@arguments = AttributeMap.new(args[0].arguments)
75
+ #@usable = false
76
+ @origin = args[0]
77
+ args[0].copy = self
61
78
  else
62
79
  raise ArgumentError
63
- end
64
- when TWO
65
- @name = args[0].name
66
- @attributes = String.new(args[0].attributes)
67
- @mixed_content = String.new(args[0].mixed_content)
68
- @pattern = String.new(args[0].pattern)
69
- @document = String.new(args[0].document)
70
- @empty = args[0].empty
71
- @cx = args[0].cx
72
- @mono = args[0].mono
73
- @parser = args[1]
74
- @arguments = AttributeMap.new(args[0].arguments)
75
- #@usable = false
76
- @origin = args[0]
77
- args[0].copy = self
78
- else
79
- raise ArgumentError
80
80
  end
81
81
  end
82
82
 
@@ -95,7 +95,7 @@ module Meteor
95
95
  #@cx = false
96
96
  #@mono = false
97
97
  #@parent = false
98
- @arguments = AttributeMap.new
98
+ #@arguments = AttributeMap.new
99
99
  @usable = true
100
100
  end
101
101
  private :initialize_s
@@ -113,7 +113,7 @@ module Meteor
113
113
  @empty = elm.empty
114
114
  @cx = elm.cx
115
115
  @mono = elm.mono
116
- @arguments = AttributeMap.new(elm.arguments)
116
+ #@arguments = AttributeMap.new(elm.arguments)
117
117
  @origin = elm
118
118
  #else
119
119
  # @name = elm.origin.name
@@ -129,7 +129,7 @@ module Meteor
129
129
  @parser = elm.parser
130
130
  @usable = true
131
131
  end
132
- private :initialize_e
132
+ private :initialize_e
133
133
 
134
134
  attr_accessor :name #要素名
135
135
  attr_accessor :attributes #属性群
@@ -141,7 +141,7 @@ module Meteor
141
141
  attr_accessor :mono #子要素存在フラグ
142
142
  attr_accessor :parser #パーサ
143
143
  attr_accessor :type_value #タイプ属性
144
- attr_accessor :arguments #パターン変更用属性マップ
144
+ #attr_accessor :arguments #パターン変更用属性マップ
145
145
  attr_accessor :usable #有効・無効フラグ
146
146
  attr_accessor :origin #原本ポインタ
147
147
  attr_accessor :copy #複製ポインタ
@@ -152,56 +152,56 @@ module Meteor
152
152
  #
153
153
  def self.new!(*args)
154
154
  case args.length
155
- when ONE
156
- #self.new_1!(args[0])
157
- args[0].clone
158
- when TWO
159
- @obj = args[1].root_element.element
160
- if @obj then
161
- @obj.attributes = String.new(args[0].attributes)
162
- @obj.mixed_content = String.new(args[0].mixed_content)
163
- @obj.pattern = String.new(args[0].pattern)
164
- @obj.document = String.new(args[0].document)
165
- @obj.arguments = AttributeMap.new(args[0].arguments)
166
- @obj
167
- else
168
- @obj = self.new(args[0],args[1])
169
- args[1].root_element.element = @obj
170
- @obj
171
- end
155
+ when ONE
156
+ #self.new_1!(args[0])
157
+ args[0].clone
158
+ when TWO
159
+ @obj = args[1].root_element.element
160
+ if @obj then
161
+ @obj.attributes = String.new(args[0].attributes)
162
+ @obj.mixed_content = String.new(args[0].mixed_content)
163
+ @obj.pattern = String.new(args[0].pattern)
164
+ @obj.document = String.new(args[0].document)
165
+ #@obj.arguments = AttributeMap.new(args[0].arguments)
166
+ @obj
167
+ else
168
+ @obj = self.new(args[0],args[1])
169
+ args[1].root_element.element = @obj
170
+ @obj
171
+ end
172
172
  end
173
- end
173
+ end
174
174
 
175
175
  #
176
176
  # 複製する
177
177
  #
178
178
  def clone
179
- obj = self.parser.e_cache[self.object_id]
179
+ obj = self.parser.element_cache[self.object_id]
180
180
  if obj then
181
181
  obj.attributes = String.new(self.attributes)
182
182
  obj.mixed_content = String.new(self.mixed_content)
183
183
  obj.pattern = String.new(self.pattern)
184
184
  obj.document = String.new(self.document)
185
- obj.arguments = AttributeMap.new(self.arguments)
185
+ #obj.arguments = AttributeMap.new(self.arguments)
186
186
  obj.usable = true
187
187
  obj
188
188
  else
189
189
  obj = self.new(self)
190
- self.parser.e_cache[self.object_id] = obj
190
+ self.parser.element_cache[self.object_id] = obj
191
191
  obj
192
192
  end
193
193
  end
194
194
 
195
- #
196
- # 子要素を取得する
197
- #
198
- # @param [Array] args 引数配列
199
- # @return [Element] 子要素
200
- #
201
- def child(*args)
202
- @parser.element(*args)
203
- end
204
-
195
+ #
196
+ # 子要素を取得する
197
+ #
198
+ # @param [Array] args 引数配列
199
+ # @return [Element] 子要素
200
+ #
201
+ def child(*args)
202
+ @parser.element(*args)
203
+ end
204
+
205
205
  #
206
206
  # CX(コメント拡張)タグを取得する
207
207
  #
@@ -278,7 +278,7 @@ module Meteor
278
278
  content()
279
279
  end
280
280
  end
281
-
281
+
282
282
  #
283
283
  # 属性を削除する
284
284
  #
@@ -287,17 +287,17 @@ module Meteor
287
287
  def remove_attribute(*args)
288
288
  @parser.remove_attribute(self,*args)
289
289
  end
290
-
290
+
291
291
  #
292
292
  # 要素を削除する
293
293
  #
294
294
  def remove
295
295
  @parser.remove_element(self)
296
296
  end
297
-
297
+
298
298
  def flush
299
299
  @parser.flush
300
- end
300
+ end
301
301
 
302
302
  #
303
303
  # フッククラスの処理を実行する
@@ -306,7 +306,7 @@ module Meteor
306
306
  def execute(*args)
307
307
  @parser.execute(self,*args)
308
308
  end
309
-
309
+
310
310
  end
311
311
 
312
312
  #
@@ -338,7 +338,7 @@ module Meteor
338
338
  attr_accessor :character_encoding
339
339
  attr_accessor :document
340
340
  attr_accessor :hook_document
341
- attr_accessor :element
341
+ attr_accessor :element
342
342
  end
343
343
 
344
344
  #
@@ -348,15 +348,15 @@ module Meteor
348
348
 
349
349
  def initialize(*args)
350
350
  case args.length
351
- when ZERO
352
- initialize_0
353
- when ONE
354
- initialize_1(args[0])
355
- else
356
- raise ArgumentError
351
+ when ZERO
352
+ initialize_0
353
+ when ONE
354
+ initialize_1(args[0])
355
+ else
356
+ raise ArgumentError
357
357
  end
358
358
  end
359
-
359
+
360
360
  #
361
361
  # イニシャライザ
362
362
  #
@@ -448,7 +448,7 @@ module Meteor
448
448
  @map[name].changed = false
449
449
  end
450
450
  end
451
-
451
+
452
452
  #
453
453
  # 属性名で属性の変更状況を取得する
454
454
  #
@@ -513,7 +513,7 @@ module Meteor
513
513
  attr_accessor :name
514
514
  attr_accessor :value
515
515
  attr_accessor :changed
516
- attr_accessor :removed
516
+ attr_accessor :removed
517
517
 
518
518
  end
519
519
 
@@ -539,12 +539,12 @@ module Meteor
539
539
  #
540
540
  def self.build(*args)
541
541
  case args.length
542
- when THREE
543
- build_3(args[0],args[1],args[2])
544
- when TWO
545
- build_2(args[0],args[1])
546
- else
547
- raise ArgumentError
542
+ when THREE
543
+ build_3(args[0],args[1],args[2])
544
+ when TWO
545
+ build_2(args[0],args[1])
546
+ else
547
+ raise ArgumentError
548
548
  end
549
549
  end
550
550
 
@@ -560,24 +560,24 @@ module Meteor
560
560
  psf = ParserFactory.new
561
561
 
562
562
  case type
563
- when Parser::HTML then
564
- html = Meteor::Core::Html::ParserImpl.new()
565
- html.read(path, encoding)
566
- psf.parser = html
567
- when Parser::XHTML then
568
- xhtml = Meteor::Core::Xhtml::ParserImpl.new()
569
- xhtml.read(path, encoding)
570
- psf.parser = xhtml
571
- when Parser::XML then
572
- xml = Meteor::Core::Xml::ParserImpl.new()
573
- xml.read(path, encoding)
574
- psf.parser = xml
563
+ when Parser::HTML then
564
+ html = Meteor::Core::Html::ParserImpl.new()
565
+ html.read(path, encoding)
566
+ psf.parser = html
567
+ when Parser::XHTML then
568
+ xhtml = Meteor::Core::Xhtml::ParserImpl.new()
569
+ xhtml.read(path, encoding)
570
+ psf.parser = xhtml
571
+ when Parser::XML then
572
+ xml = Meteor::Core::Xml::ParserImpl.new()
573
+ xml.read(path, encoding)
574
+ psf.parser = xml
575
575
  end
576
-
576
+
577
577
  psf
578
578
  end
579
579
  #protected :build_3
580
-
580
+
581
581
  #
582
582
  # パーサファクトリを生成する
583
583
  #
@@ -589,24 +589,24 @@ module Meteor
589
589
  psf = ParserFactory.new
590
590
 
591
591
  case type
592
- when Parser::HTML then
593
- html = Meteor::Core::Html::ParserImpl.new()
594
- html.parse(document)
595
- psf.parser = html
596
- when Parser::XHTML then
597
- xhtml = Meteor::Core::Xhtml::ParserImpl.new()
598
- xhtml.parse(document)
599
- psf.parser = xhtml
600
- when Parser::XML then
601
- xml = Meteor::Core::Xml::ParserImpl.new()
602
- xml.parse(document)
603
- psf.parser = xml
592
+ when Parser::HTML then
593
+ html = Meteor::Core::Html::ParserImpl.new()
594
+ html.parse(document)
595
+ psf.parser = html
596
+ when Parser::XHTML then
597
+ xhtml = Meteor::Core::Xhtml::ParserImpl.new()
598
+ xhtml.parse(document)
599
+ psf.parser = xhtml
600
+ when Parser::XML then
601
+ xml = Meteor::Core::Xml::ParserImpl.new()
602
+ xml.parse(document)
603
+ psf.parser = xml
604
604
  end
605
605
 
606
606
  psf
607
607
  end
608
608
  #protected :build_2
609
-
609
+
610
610
  #
611
611
  # パーサをセットする
612
612
  #
@@ -651,7 +651,7 @@ module Meteor
651
651
  #内容あり要素の場合
652
652
  if elm.empty then
653
653
  elm2 = elm.child(elm)
654
- execute(elm2)
654
+ execute(elm2)
655
655
  end
656
656
  end
657
657
 
@@ -681,7 +681,7 @@ module Meteor
681
681
  end
682
682
  execute(elm2, item)
683
683
  elm2.flush
684
- end
684
+ end
685
685
  end
686
686
  end
687
687
 
@@ -692,7 +692,7 @@ module Meteor
692
692
  def execute(elm,item)
693
693
  end
694
694
  private :execute
695
-
695
+
696
696
  end
697
697
  end
698
698
 
@@ -722,13 +722,13 @@ module Meteor
722
722
  #TAG_SEARCH_1_4 = "([^<>\\/]*)>"
723
723
  TAG_SEARCH_1_4 = '(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
724
724
  TAG_SEARCH_1_4_2 = '(\\s[^<>]*)>'
725
-
725
+
726
726
  TAG_SEARCH_NC_1_1 = '\\s?[^<>]*>((?!('
727
727
  TAG_SEARCH_NC_1_2 = '[^<>]*>)).)*<\\/'
728
728
  TAG_SEARCH_NC_1_3 = '\\s?[^<>]*\\/>'
729
729
  TAG_SEARCH_NC_1_4 = '(?:\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
730
730
  TAG_SEARCH_NC_1_4_2 = '\\s[^<>]*>'
731
-
731
+
732
732
  #TAG_SEARCH_2_1 = "\\s([^<>]*"
733
733
  TAG_SEARCH_2_1 = '(\\s[^<>]*'
734
734
  TAG_SEARCH_2_1_2 = '(\\s[^<>]*(?:'
@@ -767,7 +767,7 @@ module Meteor
767
767
  TAG_SEARCH_NC_2_4_4 = '"[^<>]*>'
768
768
  TAG_SEARCH_NC_2_6 = '"[^<>]*'
769
769
  TAG_SEARCH_NC_2_7 = '"|'
770
-
770
+
771
771
  TAG_SEARCH_3_1 = '<([^<>"]*)\\s[^<>]*'
772
772
  TAG_SEARCH_3_1_2 = '<([^<>"]*)\\s([^<>]*'
773
773
  TAG_SEARCH_3_1_2_2 = '<([^<>"]*)\\s([^<>]*('
@@ -801,7 +801,7 @@ module Meteor
801
801
  #TAG_SEARCH_NC_4_6 = ".*?<\/"
802
802
  #TAG_SEARCH_NC_4_7 = "\"(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
803
803
  #TAG_SEARCH_NC_4_7_2 = "\")(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
804
-
804
+
805
805
  #setAttribute
806
806
  SET_ATTR_1 = '="[^"]*"'
807
807
  #getAttributeValue
@@ -853,13 +853,13 @@ module Meteor
853
853
  #DOL_2 = "\\\\\\$"
854
854
  #PLUS_1 = "\\\+"
855
855
  #PLUS_2 = "\\\\\\+"
856
-
856
+
857
857
  ESCAPE_ENTITY_REF = ''
858
-
858
+
859
859
  #SUB_REGEX1 = (\\\\*)\\\\([0-9]+)'
860
860
  #SUB_REGEX2 = '\\1\\1\\\\\\\\\\2'
861
861
  #SUB_REGEX3 = '\\1\\1\\1\\1\\\\\\\\\\\\\\\\\\2'
862
-
862
+
863
863
  @@pattern_get_attrs_map = Regexp.new(GET_ATTRS_MAP)
864
864
 
865
865
  #BRAC_OPEN_1 = "\\\("
@@ -896,9 +896,9 @@ module Meteor
896
896
  #@@pattern_vline = Regexp.new(VLINE_1)
897
897
  #@@pattern_qmark = Regexp.new(QMARK_1)
898
898
  #@@pattern_asterisk = Regexp.new(ASTERISK_1)
899
-
899
+
900
900
  #@@pattern_sub_regex1 = Regexp.new(SUB_REGEX1)
901
-
901
+
902
902
  @@pattern_clean1 = Regexp.new(CLEAN_1)
903
903
  @@pattern_clean2 = Regexp.new(CLEAN_2)
904
904
 
@@ -916,9 +916,9 @@ module Meteor
916
916
  #ルート要素
917
917
  @root = RootElement.new
918
918
  if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
919
- @e_cache = Hash.new()
919
+ @element_cache = Hash.new()
920
920
  else
921
- @e_cache = Meteor::Core::Util::OrderHash.new
921
+ @element_cache = Meteor::Core::Util::OrderHash.new
922
922
  end
923
923
  #@res = nil
924
924
  #@_attributes = nil
@@ -968,8 +968,8 @@ module Meteor
968
968
  def document
969
969
  @root.document
970
970
  end
971
-
972
- attr_accessor :e_cache
971
+
972
+ attr_accessor :element_cache
973
973
 
974
974
  #
975
975
  # 文字エンコーディングをセットする
@@ -1039,20 +1039,20 @@ module Meteor
1039
1039
 
1040
1040
  def get_encoding()
1041
1041
  case @character_encoding
1042
- when 'UTF-8'
1043
- Kconv::UTF8
1044
- when 'ISO-2022-JP'
1045
- Kconv::JIS
1046
- when 'Shift_JIS'
1047
- Kconv::SJIS
1048
- when 'EUC-JP'
1049
- Kconv::EUC
1050
- when 'ASCII'
1051
- Kconv::ASCII
1042
+ when 'UTF-8'
1043
+ Kconv::UTF8
1044
+ when 'ISO-2022-JP'
1045
+ Kconv::JIS
1046
+ when 'Shift_JIS'
1047
+ Kconv::SJIS
1048
+ when 'EUC-JP'
1049
+ Kconv::EUC
1050
+ when 'ASCII'
1051
+ Kconv::ASCII
1052
1052
  #when "UTF-16"
1053
1053
  # return KConv::UTF16
1054
- else
1055
- Kconv::UTF8
1054
+ else
1055
+ Kconv::UTF8
1056
1056
  end
1057
1057
  end
1058
1058
  private :get_encoding
@@ -1065,31 +1065,41 @@ module Meteor
1065
1065
  #
1066
1066
  def element(*args)
1067
1067
  case args.length
1068
- when ONE
1069
- if args[0].kind_of?(String) then
1070
- element_1(args[0])
1071
- @e_cache.store(@elm_.object_id,@elm_)
1072
- elsif args[0].kind_of?(Meteor::Element) then
1073
- shadow(args[0])
1068
+ when ONE
1069
+ if args[0].kind_of?(String) then
1070
+ element_1(args[0])
1071
+ if @elm_ then
1072
+ @element_cache.store(@elm_.object_id,@elm_)
1073
+ end
1074
+ elsif args[0].kind_of?(Meteor::Element) then
1075
+ shadow(args[0])
1076
+ else
1077
+ raise ArgumentError
1078
+ end
1079
+ when TWO
1080
+ element_2(args[0],args[1])
1081
+ if @elm_ then
1082
+ @element_cache.store(@elm_.object_id,@elm_)
1083
+ end
1084
+ when THREE
1085
+ element_3(args[0],args[1],args[2])
1086
+ if @elm_ then
1087
+ @element_cache.store(@elm_.object_id,@elm_)
1088
+ end
1089
+ when FOUR
1090
+ element_4(args[0],args[1],args[2],args[3])
1091
+ if @elm_ then
1092
+ @element_cache.store(@elm_.object_id,@elm_)
1093
+ end
1094
+ when FIVE
1095
+ element_5(args[0],args[1],args[2],args[3],args[4])
1096
+ if @elm_ then
1097
+ @element_cache.store(@elm_.object_id,@elm_)
1098
+ end
1074
1099
  else
1100
+ @elm_ = nil
1075
1101
  raise ArgumentError
1076
- end
1077
- when TWO
1078
- element_2(args[0],args[1])
1079
- @e_cache.store(@elm_.object_id,@elm_)
1080
- when THREE
1081
- element_3(args[0],args[1],args[2])
1082
- @e_cache.store(@elm_.object_id,@elm_)
1083
- when FOUR
1084
- element_4(args[0],args[1],args[2],args[3])
1085
- @e_cache.store(@elm_.object_id,@elm_)
1086
- when FIVE
1087
- element_5(args[0],args[1],args[2],args[3],args[4])
1088
- @e_cache.store(@elm_.object_id,@elm_)
1089
- else
1090
- raise ArgumentError
1091
1102
  end
1092
- @elm_
1093
1103
  end
1094
1104
 
1095
1105
  #
@@ -1101,14 +1111,14 @@ module Meteor
1101
1111
  def element_1(elm_name)
1102
1112
 
1103
1113
  @_elm_name = escape_regex(elm_name)
1104
-
1114
+
1105
1115
  #空要素検索用パターン
1106
1116
  @pattern_cc_1 = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_1_3
1107
1117
 
1108
1118
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
1109
1119
  #空要素検索
1110
1120
  @res1 = @pattern.match(@root.document)
1111
-
1121
+
1112
1122
  #内容あり要素検索用パターン
1113
1123
  #@pattern_cc_2 = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_1_1 << elm_name
1114
1124
  #@pattern_cc_2 << TAG_SEARCH_1_2 << @_elm_name << TAG_CLOSE
@@ -1118,7 +1128,7 @@ module Meteor
1118
1128
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1119
1129
  #内容あり要素検索
1120
1130
  @res2 = @pattern.match(@root.document)
1121
-
1131
+
1122
1132
  if @res1 && @res2 then
1123
1133
  if @res1.end(0) < @res2.end(0) then
1124
1134
  @res = @res1
@@ -1141,7 +1151,7 @@ module Meteor
1141
1151
  @elm_ = nil
1142
1152
  #raise NoSuchElementException.new(elm_name);
1143
1153
  end
1144
-
1154
+
1145
1155
  @elm_
1146
1156
  end
1147
1157
  private :element_1
@@ -1155,16 +1165,16 @@ module Meteor
1155
1165
  @elm_.mixed_content = @res[2]
1156
1166
  #全体
1157
1167
  @elm_.document = @res[0]
1158
-
1168
+
1159
1169
  #@pattern_cc = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_NC_1_1 << elm_name
1160
1170
  #@pattern_cc << TAG_SEARCH_NC_1_2 << @_elm_name << TAG_CLOSE
1161
1171
  @pattern_cc = "<#{@_elm_name}\\s?[^<>]*>((?!(#{@_elm_name}[^<>]*>)).)*<\\/#{@_elm_name}>"
1162
1172
 
1163
1173
  #内容あり要素検索用パターン
1164
1174
  @elm_.pattern = @pattern_cc
1165
-
1175
+
1166
1176
  @elm_.empty = true
1167
-
1177
+
1168
1178
  @elm_.parser = self
1169
1179
 
1170
1180
  @elm_
@@ -1181,9 +1191,9 @@ module Meteor
1181
1191
  #空要素検索用パターン
1182
1192
  @pattern_cc = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_NC_1_3
1183
1193
  @elm_.pattern = @pattern_cc
1184
-
1194
+
1185
1195
  @elm_.empty = false
1186
-
1196
+
1187
1197
  @elm_.parser = self
1188
1198
 
1189
1199
  @elm_
@@ -1212,7 +1222,7 @@ module Meteor
1212
1222
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
1213
1223
  #空要素検索
1214
1224
  @res1 = @pattern.match(@root.document)
1215
-
1225
+
1216
1226
  #内容あり要素検索パターン
1217
1227
  #@pattern_cc_2 = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ
1218
1228
  #@pattern_cc_2 << @_attr_value << TAG_SEARCH_2_2 << @_elm_name
@@ -1222,12 +1232,12 @@ module Meteor
1222
1232
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1223
1233
  #内容あり要素検索
1224
1234
  @res2 = @pattern.match(@root.document)
1225
-
1235
+
1226
1236
  if !@res2 then
1227
1237
  @res2 = element_with_3_2(elm_name)
1228
1238
  @pattern_cc_2 = @pattern_cc
1229
1239
  end
1230
-
1240
+
1231
1241
  if @res1 && @res2 then
1232
1242
  if @res1.begin(0) < @res2.begin(0) then
1233
1243
  @res = @res1
@@ -1250,18 +1260,18 @@ module Meteor
1250
1260
  @elm_ = nil
1251
1261
  #raise NoSuchElementException.new(elm_name,attr_name,attr_value);
1252
1262
  end
1253
-
1254
- if @elm_ then
1255
- @elm_.arguments.store(attr_name, attr_value)
1256
- @elm_.arguments.recordable = true
1257
- end
1258
-
1263
+
1264
+ #if @elm_ then
1265
+ # @elm_.arguments.store(attr_name, attr_value)
1266
+ # @elm_.arguments.recordable = true
1267
+ #end
1268
+
1259
1269
  @elm_
1260
1270
  end
1261
1271
  private :element_3
1262
1272
 
1263
1273
  def element_with_3_1(elm_name)
1264
-
1274
+
1265
1275
  if @res.captures.length == FOUR then
1266
1276
  #要素
1267
1277
  @elm_ = Element.new(elm_name)
@@ -1278,11 +1288,11 @@ module Meteor
1278
1288
  @pattern_cc = "<#{@_elm_name}\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*>((?!(#{@_elm_name}[^<>]*>)).)*<\\/#{@_elm_name}>"
1279
1289
 
1280
1290
  @elm_.pattern = @pattern_cc
1281
-
1291
+
1282
1292
  @elm_.empty = true
1283
-
1293
+
1284
1294
  @elm_.parser = self
1285
-
1295
+
1286
1296
  elsif @res.captures.length == SIX then
1287
1297
  #内容
1288
1298
  @elm_ = Element.new(elm_name)
@@ -1294,15 +1304,15 @@ module Meteor
1294
1304
  @elm_.document = @res[0]
1295
1305
  #内容あり要素検索用パターン
1296
1306
  @elm_.pattern = @pattern_cc
1297
-
1307
+
1298
1308
  @elm_.empty = true
1299
-
1309
+
1300
1310
  @elm_.parser = self
1301
1311
  end
1302
1312
  @elm_
1303
1313
  end
1304
1314
  private :element_with_3_1
1305
-
1315
+
1306
1316
  def element_with_3_2(elm_name)
1307
1317
 
1308
1318
  #@pattern_cc_1 = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ
@@ -1310,52 +1320,52 @@ module Meteor
1310
1320
  @pattern_cc_1 = "<#{@_elm_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))"
1311
1321
 
1312
1322
  @pattern_cc_1b = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_1_4
1313
-
1323
+
1314
1324
  #@pattern_cc_1_1 = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_2_1 << @_attr_name << ATTR_EQ
1315
1325
  #@pattern_cc_1_1 << @_attr_value << TAG_SEARCH_4_7
1316
1326
  @pattern_cc_1_1 = "<#{@_elm_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
1317
-
1327
+
1318
1328
  @pattern_cc_1_2 = '' << TAG_SEARCH_4_2 << @_elm_name << TAG_SEARCH_4_3
1319
-
1329
+
1320
1330
  @pattern_cc_2 = '' << TAG_SEARCH_4_4 << @_elm_name << TAG_CLOSE
1321
-
1331
+
1322
1332
  @pattern_cc_2_1 = '' << TAG_SEARCH_4_5 << @_elm_name << TAG_CLOSE
1323
-
1333
+
1324
1334
  @pattern_cc_2_2 = '' << TAG_SEARCH_4_6 << @_elm_name << TAG_CLOSE
1325
-
1335
+
1326
1336
  #内容あり要素検索
1327
1337
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
1328
-
1338
+
1329
1339
  @sbuf = '';
1330
-
1340
+
1331
1341
  @pattern_2 = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1332
1342
  @pattern_1b = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b);
1333
1343
 
1334
1344
  @cnt = 0
1335
1345
 
1336
1346
  create_element_pattern
1337
-
1347
+
1338
1348
  @pattern_cc = @sbuf
1339
-
1349
+
1340
1350
  if @sbuf.length == ZERO || @cnt != ZERO then
1341
1351
  # raise NoSuchElementException.new(elm_name,attr_name,attr_value);
1342
1352
  return nil;
1343
1353
  end
1344
-
1354
+
1345
1355
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
1346
1356
  @res = @pattern.match(@root.document)
1347
-
1357
+
1348
1358
  @res
1349
1359
  end
1350
1360
  private :element_with_3_2
1351
-
1361
+
1352
1362
  def element_without_3(elm_name)
1353
1363
  element_without_3_1(elm_name,TAG_SEARCH_NC_2_3_2)
1354
1364
  end
1355
1365
  private :element_without_3
1356
-
1366
+
1357
1367
  def element_without_3_1(elm_name,closer)
1358
-
1368
+
1359
1369
  #要素
1360
1370
  @elm_ = Element.new(elm_name)
1361
1371
  #属性
@@ -1366,13 +1376,13 @@ module Meteor
1366
1376
  @pattern_cc = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_NC_2_1 << @_attr_name << ATTR_EQ
1367
1377
  @pattern_cc << @_attr_value << closer
1368
1378
  @elm_.pattern = @pattern_cc
1369
-
1379
+
1370
1380
  @elm_.parser = self
1371
1381
 
1372
1382
  @elm_
1373
1383
  end
1374
1384
  private :element_without_3_1
1375
-
1385
+
1376
1386
  #
1377
1387
  # 属性(属性名="属性値")で検索し、要素を取得する
1378
1388
  #
@@ -1381,28 +1391,28 @@ module Meteor
1381
1391
  # @return [Meteor::Element] 要素
1382
1392
  #
1383
1393
  def element_2(attr_name,attr_value)
1384
-
1394
+
1385
1395
  @_attr_name = escape_regex(attr_name)
1386
1396
  @_attr_value = escape_regex(attr_value)
1387
-
1397
+
1388
1398
  ##@pattern_cc = '' << TAG_SEARCH_3_1 << @_attr_name << ATTR_EQ << @_attr_value << TAG_SEARCH_2_4
1389
1399
  #@pattern_cc = '' << TAG_SEARCH_3_1 << @_attr_name << ATTR_EQ << @_attr_value << TAG_SEARCH_2_4_2_3
1390
1400
  @pattern_cc = "<([^<>\"]*)\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\""
1391
1401
 
1392
1402
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
1393
-
1403
+
1394
1404
  @res = @pattern.match(@root.document)
1395
-
1405
+
1396
1406
  if @res then
1397
1407
  element_3(@res[1], attr_name, attr_value)
1398
1408
  else
1399
1409
  @elm_ = nil
1400
1410
  end
1401
-
1411
+
1402
1412
  @elm_
1403
1413
  end
1404
1414
  private :element_2
1405
-
1415
+
1406
1416
  #
1407
1417
  # 要素名と属性1・属性2で検索し、要素を取得する
1408
1418
  #
@@ -1432,7 +1442,7 @@ module Meteor
1432
1442
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
1433
1443
  #空要素検索
1434
1444
  @res1 = @pattern.match(@root.document)
1435
-
1445
+
1436
1446
  #内容あり要素検索パターン
1437
1447
  #@pattern_cc_2 = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_2_1_2 << @_attr_name1 << ATTR_EQ
1438
1448
  #@pattern_cc_2 << @_attr_value1 << TAG_SEARCH_2_6 << @_attr_name2 << ATTR_EQ
@@ -1445,12 +1455,12 @@ module Meteor
1445
1455
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1446
1456
  #内容あり要素検索
1447
1457
  @res2 = @pattern.match(@root.document)
1448
-
1458
+
1449
1459
  if !@res2 then
1450
1460
  @res2 = element_with_5_2(elm_name)
1451
1461
  @pattern_cc_2 = @pattern_cc
1452
1462
  end
1453
-
1463
+
1454
1464
  if @res1 && @res2 then
1455
1465
  if @res1.begin(0) < @res2.begin(0) then
1456
1466
  @res = @res1
@@ -1473,19 +1483,19 @@ module Meteor
1473
1483
  @elm_ = nil
1474
1484
  #raise NoSuchElementException.new(elm_name,attr_name1,attr_value1,attr_name2,attr_value2);
1475
1485
  end
1476
-
1477
- if @elm_ then
1478
- @elm_.arguments.store(attr_name1, attr_value1)
1479
- @elm_.arguments.store(attr_name2, attr_value2)
1480
- @elm_.arguments.recordable = true
1481
- end
1482
-
1486
+
1487
+ #if @elm_ then
1488
+ # @elm_.arguments.store(attr_name1, attr_value1)
1489
+ # @elm_.arguments.store(attr_name2, attr_value2)
1490
+ # @elm_.arguments.recordable = true
1491
+ #end
1492
+
1483
1493
  @elm_
1484
1494
  end
1485
1495
  private :element_5
1486
-
1496
+
1487
1497
  def element_with_5_1(elm_name)
1488
-
1498
+
1489
1499
  if @res.captures.length == FOUR then
1490
1500
  #要素
1491
1501
  @elm_ = Element.new(elm_name)
@@ -1507,11 +1517,11 @@ module Meteor
1507
1517
  @elm_.pattern = @pattern_cc
1508
1518
  #
1509
1519
  @elm_.empty = true
1510
-
1520
+
1511
1521
  @elm_.parser = self
1512
-
1522
+
1513
1523
  elsif @res.captures.length == SIX then
1514
-
1524
+
1515
1525
  @elm_ = Element.new(elm_name)
1516
1526
  #属性
1517
1527
  @elm_.attributes = @res[1].chop
@@ -1521,15 +1531,15 @@ module Meteor
1521
1531
  @elm_.document = @res[0]
1522
1532
  #要素ありタグ検索用パターン
1523
1533
  @elm_.pattern = @pattern_cc
1524
-
1534
+
1525
1535
  @elm_.empty = true
1526
-
1536
+
1527
1537
  @elm_.parser = self
1528
1538
  end
1529
1539
  @elm_
1530
1540
  end
1531
1541
  private :element_with_5_1
1532
-
1542
+
1533
1543
  def element_with_5_2(elm_name)
1534
1544
 
1535
1545
  #@pattern_cc_1 = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_2_1_2 << @_attr_name1 << ATTR_EQ
@@ -1540,7 +1550,7 @@ module Meteor
1540
1550
  @pattern_cc_1 = "<#{@_elm_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")([^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>)))"
1541
1551
 
1542
1552
  @pattern_cc_1b = '' << TAG_OPEN << elm_name << TAG_SEARCH_1_4
1543
-
1553
+
1544
1554
  #@pattern_cc_1_1 = '' << TAG_OPEN << @_elm_name << TAG_SEARCH_2_1_2 << @_attr_name1 << ATTR_EQ
1545
1555
  #@pattern_cc_1_1 << @_attr_value1 << TAG_SEARCH_2_6 << @_attr_name2 << ATTR_EQ
1546
1556
  #@pattern_cc_1_1 << @_attr_value2 << TAG_SEARCH_2_7 << @_attr_name2 << ATTR_EQ
@@ -1549,39 +1559,39 @@ module Meteor
1549
1559
  @pattern_cc_1 = "<#{@_elm_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")(?:[^<>\\/]*>|(?!([^<>]*\\/>))[^<>]*>))("
1550
1560
 
1551
1561
  @pattern_cc_1_2 = '' << TAG_SEARCH_4_2 << @_elm_name << TAG_SEARCH_4_3
1552
-
1562
+
1553
1563
  @pattern_cc_2 = '' << TAG_SEARCH_4_4 << @_elm_name << TAG_CLOSE
1554
-
1564
+
1555
1565
  @pattern_cc_2_1 = '' << TAG_SEARCH_4_5 << @_elm_name << TAG_CLOSE
1556
-
1566
+
1557
1567
  @pattern_cc_2_2 = '' << TAG_SEARCH_4_6 << @_elm_name << TAG_CLOSE
1558
-
1568
+
1559
1569
  #内容あり要素検索
1560
1570
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
1561
-
1571
+
1562
1572
  @sbuf = ''
1563
-
1573
+
1564
1574
  @pattern_2 = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1565
1575
  @pattern_1b = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b);
1566
1576
 
1567
1577
  @cnt = 0
1568
1578
 
1569
1579
  create_element_pattern
1570
-
1580
+
1571
1581
  @pattern_cc = @sbuf
1572
-
1582
+
1573
1583
  if @sbuf.length == ZERO || @cnt != ZERO then
1574
1584
  # raise NoSuchElementException.new(elm_name,attr_name1,attr_value1,attr_name2,attr_value2);
1575
1585
  return nil
1576
1586
  end
1577
-
1587
+
1578
1588
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
1579
1589
  @res = @pattern.match(@root.document)
1580
-
1590
+
1581
1591
  @res
1582
1592
  end
1583
1593
  private :element_with_5_2
1584
-
1594
+
1585
1595
  def element_without_5(elm_name)
1586
1596
  element_without_5_1(elm_name,TAG_SEARCH_NC_2_3_2_2);
1587
1597
  end
@@ -1604,7 +1614,7 @@ module Meteor
1604
1614
  @pattern_cc = "<#{@_elm_name}\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}#{closer}"
1605
1615
 
1606
1616
  @elm_.pattern = @pattern_cc
1607
-
1617
+
1608
1618
  @elm_.parser = self
1609
1619
 
1610
1620
  @elm_
@@ -1649,7 +1659,7 @@ module Meteor
1649
1659
  end
1650
1660
  private :element_4
1651
1661
 
1652
- def create_element_pattern
1662
+ def create_element_pattern
1653
1663
 
1654
1664
  if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
1655
1665
 
@@ -1851,25 +1861,25 @@ module Meteor
1851
1861
  #
1852
1862
  def attribute(*args)
1853
1863
  case args.length
1854
- #when ONE
1855
- # get_attribute_value_1(args[0])
1856
- when TWO
1857
- if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(String) then
1858
- get_attribute_value_2(args[0],args[1])
1859
- #elsif args[0].kind_of?(String) && args[1].kind_of?(String) then
1860
- # set_attribute_2(args[0],args[1])
1861
- elsif args[0].kind_of?(Meteor::Element) && args[1].kind_of?(Meteor::AttributeMap) then
1862
- set_attribute_2_m(args[0],args[1])
1864
+ #when ONE
1865
+ # get_attribute_value_1(args[0])
1866
+ when TWO
1867
+ if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(String) then
1868
+ get_attribute_value_2(args[0],args[1])
1869
+ #elsif args[0].kind_of?(String) && args[1].kind_of?(String) then
1870
+ # set_attribute_2(args[0],args[1])
1871
+ elsif args[0].kind_of?(Meteor::Element) && args[1].kind_of?(Meteor::AttributeMap) then
1872
+ set_attribute_2_m(args[0],args[1])
1873
+ else
1874
+ raise ArgumentError
1875
+ end
1876
+ when THREE
1877
+ set_attribute_3(args[0],args[1],args[2])
1863
1878
  else
1864
1879
  raise ArgumentError
1865
- end
1866
- when THREE
1867
- set_attribute_3(args[0],args[1],args[2])
1868
- else
1869
- raise ArgumentError
1870
1880
  end
1871
1881
  end
1872
-
1882
+
1873
1883
  #
1874
1884
  # 要素の属性を編集する
1875
1885
  #
@@ -1882,12 +1892,12 @@ module Meteor
1882
1892
  attr_value = escape(attr_value)
1883
1893
  #属性群の更新
1884
1894
  edit_attributes_(elm,attr_name,attr_value)
1885
-
1886
- if !elm.origin then
1887
- if elm.arguments.map.include?(attr_name) then
1888
- elm.arguments.store(attr_name, attr_value)
1889
- end
1890
- end
1895
+
1896
+ #if !elm.origin then
1897
+ # if elm.arguments.map.include?(attr_name) then
1898
+ # elm.arguments.store(attr_name, attr_value)
1899
+ # end
1900
+ #end
1891
1901
  end
1892
1902
  elm
1893
1903
  end
@@ -1900,7 +1910,7 @@ module Meteor
1900
1910
 
1901
1911
  #検索対象属性の存在判定
1902
1912
  if elm.attributes.include?(' ' << attr_name << ATTR_EQ) then
1903
-
1913
+
1904
1914
  @_attr_value = attr_value
1905
1915
  ##replace2regex(@_attr_value)
1906
1916
  #if elm.origin then
@@ -1910,7 +1920,7 @@ module Meteor
1910
1920
  #end
1911
1921
  #属性の置換
1912
1922
  @pattern = Meteor::Core::Util::PatternCache.get('' << attr_name << SET_ATTR_1)
1913
-
1923
+
1914
1924
  #elm.attributes.sub!(@pattern,'' << attr_name << ATTR_EQ << @_attr_value << DOUBLE_QUATATION)
1915
1925
  elm.attributes.sub!(@pattern,"#{attr_name}=\"#{@_attr_value}\"")
1916
1926
  else
@@ -1930,7 +1940,7 @@ module Meteor
1930
1940
  #elm.attributes << SPACE << attr_name << ATTR_EQ << @_attr_value << DOUBLE_QUATATION
1931
1941
  elm.attributes << " #{attr_name}=\"#{@_attr_value}\""
1932
1942
  end
1933
-
1943
+
1934
1944
  end
1935
1945
  private :edit_attributes_
1936
1946
 
@@ -1958,7 +1968,7 @@ module Meteor
1958
1968
  #elm.document = "<#{elm.name}#{@_attributes}>#{@_content}</#{elm.name}>"
1959
1969
  else
1960
1970
  #空要素の場合
1961
- elm.document = '' << TAG_OPEN << elm.name << @_attributes << closer
1971
+ elm.document = '' << TAG_OPEN << elm.name << @_attributes << closer
1962
1972
  end
1963
1973
  else
1964
1974
  @_content = elm.mixed_content
@@ -1979,26 +1989,26 @@ module Meteor
1979
1989
  end
1980
1990
  private :edit_document_2
1981
1991
 
1982
- def edit_pattern_(elm)
1983
-
1984
- elm.arguments.map.each do |name, attr|
1985
- if attr.changed then
1986
- @_attr_value = escape_regex(attr.value)
1987
- ##replace2regex(@_attr_value)
1988
- #@pattern_cc = '' << name << SET_ATTR_1
1989
- @pattern_cc = "#{attr.name}=\"[^\"]*\""
1990
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
1991
- #elm.pattern.gsub!(@pattern,'' << name << ATTR_EQ << @_attr_value << DOUBLE_QUATATION)
1992
- elm.pattern.sub!(@pattern, "#{attr.name}=\"#{@_attr_value}\"")
1993
- elsif attr.removed then
1994
- @pattern_cc = '' << name << SET_ATTR_1
1995
- #@pattern_cc = "#{attr_name}=\"[^\"]*\""
1996
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
1997
- elm.pattern.gsub!(@pattern, EMPTY)
1998
- end
1999
- end
2000
- end
2001
- private :edit_pattern_
1992
+ #def edit_pattern_(elm)
1993
+ #
1994
+ # elm.arguments.map.each do |name, attr|
1995
+ # if attr.changed then
1996
+ # @_attr_value = escape_regex(attr.value)
1997
+ # ##replace2regex(@_attr_value)
1998
+ # #@pattern_cc = '' << name << SET_ATTR_1
1999
+ # @pattern_cc = "#{attr.name}=\"[^\"]*\""
2000
+ # @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
2001
+ # #elm.pattern.gsub!(@pattern,'' << name << ATTR_EQ << @_attr_value << DOUBLE_QUATATION)
2002
+ # elm.pattern.sub!(@pattern, "#{attr.name}=\"#{@_attr_value}\"")
2003
+ # elsif attr.removed then
2004
+ # @pattern_cc = '' << name << SET_ATTR_1
2005
+ # #@pattern_cc = "#{attr_name}=\"[^\"]*\""
2006
+ # @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
2007
+ # elm.pattern.gsub!(@pattern, EMPTY)
2008
+ # end
2009
+ # end
2010
+ #end
2011
+ #private :edit_pattern_
2002
2012
 
2003
2013
  ##
2004
2014
  ## 要素の属性を編集する
@@ -2013,7 +2023,7 @@ module Meteor
2013
2023
  # @root.element
2014
2024
  #end
2015
2025
  #private :set_attribute_2
2016
-
2026
+
2017
2027
  #
2018
2028
  # 要素の属性値を取得する
2019
2029
  #
@@ -2040,7 +2050,7 @@ module Meteor
2040
2050
  end
2041
2051
  end
2042
2052
  private :get_attribute_value_
2043
-
2053
+
2044
2054
  ##
2045
2055
  ## 要素の属性値を取得する
2046
2056
  ##
@@ -2055,7 +2065,7 @@ module Meteor
2055
2065
  # end
2056
2066
  #end
2057
2067
  #private :get_attribute_value_1
2058
-
2068
+
2059
2069
  #
2060
2070
  # 属性マップを取得する
2061
2071
  #
@@ -2064,12 +2074,12 @@ module Meteor
2064
2074
  #
2065
2075
  def attribute_map(*args)
2066
2076
  case args.length
2067
- when ZERO
2068
- get_attribute_map_0
2069
- when ONE
2070
- get_attribute_map_1(args[0])
2071
- else
2072
- raise ArgumentError
2077
+ when ZERO
2078
+ get_attribute_map_0
2079
+ when ONE
2080
+ get_attribute_map_1(args[0])
2081
+ else
2082
+ raise ArgumentError
2073
2083
  end
2074
2084
  end
2075
2085
 
@@ -2090,7 +2100,7 @@ module Meteor
2090
2100
  attrs
2091
2101
  end
2092
2102
  private :get_attribute_map_1
2093
-
2103
+
2094
2104
  #
2095
2105
  # 要素の属性マップを取得する
2096
2106
  #
@@ -2104,7 +2114,7 @@ module Meteor
2104
2114
  end
2105
2115
  end
2106
2116
  private :get_attribute_map_0
2107
-
2117
+
2108
2118
  #
2109
2119
  # 要素の属性を編集する
2110
2120
  #
@@ -2124,7 +2134,7 @@ module Meteor
2124
2134
  elm
2125
2135
  end
2126
2136
  private :set_attribute_2_m
2127
-
2137
+
2128
2138
  #
2129
2139
  # 要素の内容をセットする or 内容を取得する
2130
2140
  #
@@ -2133,30 +2143,30 @@ module Meteor
2133
2143
  #
2134
2144
  def content(*args)
2135
2145
  case args.length
2136
- when ONE
2137
- #if args[0].kind_of?(Meteor::Element) then
2138
- get_content_1(args[0])
2146
+ when ONE
2147
+ #if args[0].kind_of?(Meteor::Element) then
2148
+ get_content_1(args[0])
2139
2149
  #elsif args[0].kind_of?(String) then
2140
2150
  # set_content_1(args[0])
2141
2151
  #else
2142
2152
  # raise ArgumentError
2143
2153
  #end
2144
- when TWO
2145
- #if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(String) then
2146
- set_content_2_s(args[0],args[1])
2154
+ when TWO
2155
+ #if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(String) then
2156
+ set_content_2_s(args[0],args[1])
2147
2157
  #elsif args[0].kind_of?(String) && (args[1].eql?(true) || args[1].eql?(false)) then
2148
2158
  ##elsif args[0].kind_of?(String) && (args[1].kinf_of?(TrueClass) || args[1].kind_of?(FalseClass)) then
2149
2159
  # set_content_2_b(args[0],args[1])
2150
2160
  #else
2151
2161
  # raise ArgumentError
2152
2162
  #end
2153
- when THREE
2154
- set_content_3(args[0],args[1],args[2])
2155
- else
2156
- raise ArgumentError
2163
+ when THREE
2164
+ set_content_3(args[0],args[1],args[2])
2165
+ else
2166
+ raise ArgumentError
2157
2167
  end
2158
2168
  end
2159
-
2169
+
2160
2170
  #
2161
2171
  # 要素の内容をセットする
2162
2172
  #
@@ -2168,7 +2178,7 @@ module Meteor
2168
2178
 
2169
2179
  if entity_ref then
2170
2180
  escape_content(content,elm.name)
2171
- end
2181
+ end
2172
2182
  elm.mixed_content = content
2173
2183
  elm
2174
2184
  end
@@ -2186,7 +2196,7 @@ module Meteor
2186
2196
  elm
2187
2197
  end
2188
2198
  private :set_content_2_s
2189
-
2199
+
2190
2200
  ##
2191
2201
  ## 要素の内容を編集する
2192
2202
  ##
@@ -2198,7 +2208,7 @@ module Meteor
2198
2208
  # end
2199
2209
  #end
2200
2210
  #private :set_content_1
2201
-
2211
+
2202
2212
  ##
2203
2213
  ## 要素の内容を編集する
2204
2214
  ##
@@ -2213,7 +2223,7 @@ module Meteor
2213
2223
  # @root.element
2214
2224
  #end
2215
2225
  #private :set_content_2_b
2216
-
2226
+
2217
2227
  def get_content_1(elm)
2218
2228
  if !elm.cx then
2219
2229
  if elm.empty then
@@ -2224,7 +2234,7 @@ module Meteor
2224
2234
  end
2225
2235
  end
2226
2236
  private :get_content_1
2227
-
2237
+
2228
2238
  #
2229
2239
  # 要素の属性を消す
2230
2240
  #
@@ -2232,12 +2242,12 @@ module Meteor
2232
2242
  #
2233
2243
  def remove_attribute(*args)
2234
2244
  case args.length
2235
- when ONE
2236
- remove_attribute_1(args[0])
2237
- when TWO
2238
- remove_attribute_2(args[0],args[1])
2239
- else
2240
- raise ArgumentError
2245
+ when ONE
2246
+ remove_attribute_1(args[0])
2247
+ when TWO
2248
+ remove_attribute_2(args[0],args[1])
2249
+ else
2250
+ raise ArgumentError
2241
2251
  end
2242
2252
  end
2243
2253
 
@@ -2252,11 +2262,11 @@ module Meteor
2252
2262
 
2253
2263
  remove_attributes_(elm,attr_name)
2254
2264
 
2255
- if !elm.origin then
2256
- if elm.arguments.map.include?(attr_name) then
2257
- elm.arguments.delete(attr_name)
2258
- end
2259
- end
2265
+ #if !elm.origin then
2266
+ # if elm.arguments.map.include?(attr_name) then
2267
+ # elm.arguments.delete(attr_name)
2268
+ # end
2269
+ #end
2260
2270
  end
2261
2271
 
2262
2272
  elm
@@ -2270,7 +2280,7 @@ module Meteor
2270
2280
  elm.attributes.sub!(@pattern,EMPTY)
2271
2281
  end
2272
2282
  private :remove_attributes_
2273
-
2283
+
2274
2284
  #
2275
2285
  # 要素の属性を消す
2276
2286
  #
@@ -2284,15 +2294,15 @@ module Meteor
2284
2294
  @root.element
2285
2295
  end
2286
2296
  private :remove_attribute_1
2287
-
2297
+
2288
2298
  #
2289
2299
  # 要素を消す
2290
2300
  #
2291
2301
  # @param [Meteor::Element] elm 要素
2292
2302
  #
2293
2303
  def remove_element(elm)
2294
- replace(elm,EMPTY)
2295
- elm.usable = false
2304
+ replace(elm,EMPTY)
2305
+ elm.usable = false
2296
2306
  end
2297
2307
 
2298
2308
  #
@@ -2303,12 +2313,12 @@ module Meteor
2303
2313
  #
2304
2314
  def cxtag(*args)
2305
2315
  case args.length
2306
- when ONE
2307
- cxtag_1(args[0])
2308
- when TWO
2309
- cxtag_2(args[0],args[1])
2310
- else
2311
- raise ArgumentError
2316
+ when ONE
2317
+ cxtag_1(args[0])
2318
+ when TWO
2319
+ cxtag_2(args[0],args[1])
2320
+ else
2321
+ raise ArgumentError
2312
2322
  end
2313
2323
  end
2314
2324
 
@@ -2398,9 +2408,9 @@ module Meteor
2398
2408
  end
2399
2409
  private :replace
2400
2410
 
2401
- def reflect()
2402
- #puts @e_cache.size.to_s
2403
- @e_cache.values.each do |item|
2411
+ def reflect
2412
+ #puts @element_cache.size.to_s
2413
+ @element_cache.values.each do |item|
2404
2414
  if item.usable then
2405
2415
  #puts "#{item.name}:#{item.document}"
2406
2416
  #if item.name == EMPTY then
@@ -2409,42 +2419,26 @@ module Meteor
2409
2419
  @pattern = Meteor::Core::Util::PatternCache.get(item.pattern)
2410
2420
  @root.document.sub!(@pattern,item.copy.parser.root_element.hook_document)
2411
2421
  #@root.document.sub!(@pattern,item.document)
2422
+ #item.copy.parser.element_cache.clear
2412
2423
  item.copy = nil
2413
2424
  else
2414
2425
  edit_document_1(item)
2415
- edit_pattern_(item)
2426
+ #edit_pattern_(item)
2416
2427
  end
2417
2428
  item.usable = false
2418
2429
  end
2419
2430
  end
2420
2431
  end
2421
2432
  protected :reflect
2422
-
2433
+
2423
2434
  #
2424
2435
  # 出力する
2425
2436
  #
2426
2437
  def flush
2427
- reflect
2428
2438
 
2429
2439
  #puts @root.document
2430
- if @root.element then
2431
- if !@root.element.origin.mono then
2432
- @_attributes = @root.element.attributes
2433
- #replace2regex(@_attributes)
2434
- if @root.element.origin.cx then
2435
- #@root.hookDocument << SET_CX_1 << @root.element.name << SPACE
2436
- #@root.hookDocument << @_attributes << SET_CX_2
2437
- #@root.hookDocument << @root.document << SET_CX_3
2438
- #@root.hookDocument << @root.element.name << SET_CX_4
2439
- @root.hook_document << "<!-- @#{@root.element.name} #{@_attributes}-->#{@root.document}<!-- /@#{@root.element.name} -->"
2440
- else
2441
- #@root.hookDocument << TAG_OPEN << @root.element.name
2442
- #@root.hookDocument << @_attributes << TAG_CLOSE << @root.document
2443
- #@root.hookDocument << TAG_OPEN3 << @root.element.name << TAG_CLOSE
2444
- @root.hook_document << "<#{@root.element.name}#{@_attributes}>#{@root.document}</#{@root.element.name}>"
2445
- end
2446
- @root.element = Element.new!(@root.element.origin,self)
2447
- else
2440
+ if @root.element then
2441
+ if @root.element.origin.mono then
2448
2442
  if @root.element.origin.cx then
2449
2443
  #@root.hookDocument << SET_CX_1 << @root.element.name << SPACE
2450
2444
  #@root.hookDocument << @root.element.attributes << SET_CX_2
@@ -2462,15 +2456,34 @@ module Meteor
2462
2456
  #@root.hook_document << @root.document
2463
2457
  @root.element = Element.new!(@root.element.origin,self)
2464
2458
  #@root.document = String.new(@root.element.document)
2459
+ else
2460
+ reflect
2461
+ @_attributes = @root.element.attributes
2462
+ #replace2regex(@_attributes)
2463
+ if @root.element.origin.cx then
2464
+ #@root.hookDocument << SET_CX_1 << @root.element.name << SPACE
2465
+ #@root.hookDocument << @_attributes << SET_CX_2
2466
+ #@root.hookDocument << @root.document << SET_CX_3
2467
+ #@root.hookDocument << @root.element.name << SET_CX_4
2468
+ @root.hook_document << "<!-- @#{@root.element.name} #{@_attributes}-->#{@root.document}<!-- /@#{@root.element.name} -->"
2469
+ else
2470
+ #@root.hookDocument << TAG_OPEN << @root.element.name
2471
+ #@root.hookDocument << @_attributes << TAG_CLOSE << @root.document
2472
+ #@root.hookDocument << TAG_OPEN3 << @root.element.name << TAG_CLOSE
2473
+ @root.hook_document << "<#{@root.element.name}#{@_attributes}>#{@root.document}</#{@root.element.name}>"
2474
+ end
2475
+ @root.element = Element.new!(@root.element.origin,self)
2465
2476
  end
2466
2477
  #@root.element.origin.document = @root.hook_document
2467
2478
  #@root.element.origin.name = EMPTY
2468
2479
  else
2480
+ reflect
2481
+ @element_cache.clear
2469
2482
  #フック判定がFALSEの場合
2470
2483
  clean
2471
2484
  end
2472
2485
  end
2473
-
2486
+
2474
2487
  def clean
2475
2488
  #CX開始タグ置換
2476
2489
  @pattern = @@pattern_clean1
@@ -2481,7 +2494,7 @@ module Meteor
2481
2494
  #@root.document << "<!-- Powered by Meteor (C)Yasumasa Ashida -->"
2482
2495
  end
2483
2496
  private :clean
2484
-
2497
+
2485
2498
  #
2486
2499
  # 要素をコピーする
2487
2500
  #
@@ -2492,9 +2505,9 @@ module Meteor
2492
2505
  if elm.empty then
2493
2506
  #内容あり要素の場合
2494
2507
  set_mono_info(elm)
2495
-
2508
+
2496
2509
  pif2 = create(self)
2497
-
2510
+
2498
2511
  @elm_ = Element.new!(elm,pif2)
2499
2512
 
2500
2513
  if !elm.mono then
@@ -2502,41 +2515,41 @@ module Meteor
2502
2515
  else
2503
2516
  pif2.root_element.document = String.new(elm.document)
2504
2517
  end
2505
-
2518
+
2506
2519
  @elm_
2507
2520
  end
2508
2521
  end
2509
- private :shadow
2510
-
2522
+ private :shadow
2523
+
2511
2524
  def set_mono_info(elm)
2512
2525
  end
2513
- private :set_mono_info
2514
-
2526
+ private :set_mono_info
2527
+
2515
2528
  #
2516
2529
  # フッククラスの処理を実行する
2517
2530
  # @param [Array] args 引数配列
2518
2531
  #
2519
2532
  def execute(*args)
2520
2533
  case args.length
2521
- when TWO
2522
- execute_2(args[0],args[1])
2523
- when THREE
2524
- execute_3(args[0],args[1],args[2])
2525
- else
2526
- raise ArgumentError
2534
+ when TWO
2535
+ execute_2(args[0],args[1])
2536
+ when THREE
2537
+ execute_3(args[0],args[1],args[2])
2538
+ else
2539
+ raise ArgumentError
2527
2540
  end
2528
2541
  end
2529
-
2542
+
2530
2543
  def execute_2(elm,hook)
2531
2544
  hook.do_action(elm)
2532
2545
  end
2533
2546
  private :execute_2
2534
-
2547
+
2535
2548
  def execute_3(elm,loop,list)
2536
2549
  loop.do_action(elm,list)
2537
2550
  end
2538
2551
  private :execute_3
2539
-
2552
+
2540
2553
  #
2541
2554
  # 正規表現対象文字を置換する
2542
2555
  #
@@ -2547,7 +2560,7 @@ module Meteor
2547
2560
  Regexp.quote(str)
2548
2561
  end
2549
2562
  private :escape_regex
2550
-
2563
+
2551
2564
  #def replace2regex(str)
2552
2565
  # #if str.include?(EN_1) then
2553
2566
  # # str.gsub!(@@pattern_sub_regex1,SUB_REGEX2)
@@ -2561,7 +2574,7 @@ module Meteor
2561
2574
  # #end
2562
2575
  #end
2563
2576
  #private :replace4regex
2564
-
2577
+
2565
2578
  #
2566
2579
  # @param [String] content 入力文字列
2567
2580
  # @return [String] 出力文字列
@@ -2660,7 +2673,7 @@ module Meteor
2660
2673
 
2661
2674
  end
2662
2675
  private :create
2663
-
2676
+
2664
2677
  end
2665
2678
 
2666
2679
  module Util
@@ -2845,7 +2858,7 @@ module Meteor
2845
2858
  MATCH_TAG = ['br','hr','img','input','meta','base']
2846
2859
  #MATCH_TAG_2 = "textarea|option|pre"
2847
2860
  MATCH_TAG_2 =['textarea','option','pre']
2848
-
2861
+
2849
2862
  HTTP_EQUIV = 'http-equiv'
2850
2863
  CONTENT_TYPE = 'Content-Type'
2851
2864
  CONTENT = 'content'
@@ -2911,35 +2924,35 @@ module Meteor
2911
2924
 
2912
2925
  #@@pattern_true = Regexp.new(TRUE)
2913
2926
  #@@pattern_false = Regexp.new(FALSE)
2914
-
2927
+
2915
2928
  TYPE_L = 'type'
2916
2929
  TYPE_U = 'TYPE'
2917
-
2930
+
2918
2931
  if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
2919
2932
  TABLE_FOR_ESCAPE_ = {
2920
- '&' => '&amp;',
2921
- '"' => '&quot;',
2922
- '\'' => '&apos;',
2923
- '<' => '&lt;',
2924
- '>' => '&gt;',
2925
- ' ' => '&nbsp;',
2926
- }
2927
-
2933
+ '&' => '&amp;',
2934
+ '"' => '&quot;',
2935
+ '\'' => '&apos;',
2936
+ '<' => '&lt;',
2937
+ '>' => '&gt;',
2938
+ ' ' => '&nbsp;',
2939
+ }
2940
+
2928
2941
  TABLE_FOR_ESCAPE_CONTENT_ = {
2929
- '&' => '&amp;',
2930
- '"' => '&quot;',
2931
- '\'' => '&apos;',
2932
- '<' => '&lt;',
2933
- '>' => '&gt;',
2934
- ' ' => '&nbsp;',
2935
- "\n" => '<br>',
2936
- }
2937
-
2942
+ '&' => '&amp;',
2943
+ '"' => '&quot;',
2944
+ '\'' => '&apos;',
2945
+ '<' => '&lt;',
2946
+ '>' => '&gt;',
2947
+ ' ' => '&nbsp;',
2948
+ "\n" => '<br>',
2949
+ }
2950
+
2938
2951
  PATTERN_ESCAPE = "[&\"'<> ]"
2939
2952
  PATTERN_ESCAPE_CONTENT = "[&\"'<> \\n]"
2940
-
2953
+
2941
2954
  @@pattern_escape = Regexp.new(PATTERN_ESCAPE)
2942
- @@pattern_escape_content = Regexp.new(PATTERN_ESCAPE_CONTENT)
2955
+ @@pattern_escape_content = Regexp.new(PATTERN_ESCAPE_CONTENT)
2943
2956
  else
2944
2957
  @@pattern_and_1 = Regexp.new(AND_1)
2945
2958
  @@pattern_lt_1 = Regexp.new(LT_1)
@@ -2954,18 +2967,18 @@ module Meteor
2954
2967
  @@pattern_and_2 = Regexp.new(AND_2)
2955
2968
  @@pattern_br_2 = Regexp.new(BR_2)
2956
2969
  end
2957
-
2958
-
2970
+
2971
+
2959
2972
  PATTERN_UNESCAPE = '&(amp|quot|apos|gt|lt|nbsp);'
2960
2973
  @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
2961
-
2974
+
2962
2975
  #@@pattern_match_tag = Regexp.new(MATCH_TAG)
2963
2976
  @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
2964
2977
  #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
2965
2978
 
2966
2979
  GET_ATTRS_MAP2='\\s(disabled|readonly|checked|selected|multiple)'
2967
2980
  @@pattern_get_attrs_map2 = Regexp.new(GET_ATTRS_MAP2)
2968
-
2981
+
2969
2982
  #
2970
2983
  # イニシャライザ
2971
2984
  #
@@ -2974,12 +2987,12 @@ module Meteor
2974
2987
  def initialize(*args)
2975
2988
  super(args)
2976
2989
  case args.length
2977
- when ZERO
2978
- initialize_0
2979
- when ONE
2980
- initialize_1(args[0])
2981
- else
2982
- raise ArgumentError
2990
+ when ZERO
2991
+ initialize_0
2992
+ when ONE
2993
+ initialize_1(args[0])
2994
+ else
2995
+ raise ArgumentError
2983
2996
  end
2984
2997
  end
2985
2998
 
@@ -3124,9 +3137,9 @@ module Meteor
3124
3137
  @elm_.attributes = @res[1]
3125
3138
  #空要素検索用パターン
3126
3139
  @elm_.pattern = @pattern_cc
3127
-
3140
+
3128
3141
  @elm_.document = @res[0]
3129
-
3142
+
3130
3143
  @elm_.parser = self
3131
3144
  end
3132
3145
  private :element_without_1
@@ -3169,11 +3182,11 @@ module Meteor
3169
3182
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
3170
3183
  #内容あり要素検索
3171
3184
  @res = @pattern.match(@root.document)
3172
-
3185
+
3173
3186
  if !@res then
3174
3187
  @res = element_with_3_2(elm_name)
3175
3188
  end
3176
-
3189
+
3177
3190
  if @res then
3178
3191
  element_with_3_1(elm_name)
3179
3192
  else
@@ -3181,11 +3194,11 @@ module Meteor
3181
3194
  end
3182
3195
  end
3183
3196
 
3184
- if @elm_ then
3185
- @elm_.arguments.store(attr_name, attr_value)
3186
- @elm_.arguments.recordable = true
3187
- end
3188
-
3197
+ #if @elm_ then
3198
+ # @elm_.arguments.store(attr_name, attr_value)
3199
+ # @elm_.arguments.recordable = true
3200
+ #end
3201
+
3189
3202
  @elm_
3190
3203
  end
3191
3204
  private :element_3
@@ -3254,7 +3267,7 @@ module Meteor
3254
3267
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
3255
3268
  #空要素検索
3256
3269
  @res = @pattern.match(@root.document)
3257
-
3270
+
3258
3271
  if @res then
3259
3272
  element_without_5(elm_name)
3260
3273
  else
@@ -3273,11 +3286,11 @@ module Meteor
3273
3286
  @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
3274
3287
  #内容あり要素検索
3275
3288
  @res = @pattern.match(@root.document)
3276
-
3289
+
3277
3290
  if !@res then
3278
3291
  @res = element_with_5_2(elm_name)
3279
3292
  end
3280
-
3293
+
3281
3294
  if @res then
3282
3295
  element_with_5_1(elm_name)
3283
3296
  else
@@ -3285,16 +3298,16 @@ module Meteor
3285
3298
  end
3286
3299
  end
3287
3300
 
3288
- if @elm_ then
3289
- @elm_.arguments.store(attr_name1, attr_value1)
3290
- @elm_.arguments.store(attr_name2, attr_value2)
3291
- @elm_.arguments.recordable = true
3292
- end
3293
-
3301
+ #if @elm_ then
3302
+ # @elm_.arguments.store(attr_name1, attr_value1)
3303
+ # @elm_.arguments.store(attr_name2, attr_value2)
3304
+ # @elm_.arguments.recordable = true
3305
+ #end
3306
+
3294
3307
  @elm_
3295
3308
  end
3296
3309
  private :element_5
3297
-
3310
+
3298
3311
  def element_without_5(elm_name)
3299
3312
  element_without_5_1(elm_name,TAG_SEARCH_NC_2_4_3_2)
3300
3313
  end
@@ -3416,9 +3429,9 @@ module Meteor
3416
3429
  elm.type_value
3417
3430
  end
3418
3431
  private :get_type
3419
-
3432
+
3420
3433
  def get_attribute_value_2_r(elm,match_p)
3421
-
3434
+
3422
3435
  @res = match_p.match(elm.attributes)
3423
3436
 
3424
3437
  if @res then
@@ -3428,7 +3441,7 @@ module Meteor
3428
3441
  end
3429
3442
  end
3430
3443
  private :get_attribute_value_2_r
3431
-
3444
+
3432
3445
  #
3433
3446
  # 要素の属性マップを取得する
3434
3447
  #
@@ -3437,17 +3450,17 @@ module Meteor
3437
3450
  #
3438
3451
  def get_attribute_map_1(elm)
3439
3452
  attrs = Meteor::AttributeMap.new
3440
-
3453
+
3441
3454
  elm.attributes.scan(@@pattern_get_attrs_map) do |a, b|
3442
3455
  attrs.store(a, unescape(b))
3443
3456
  end
3444
-
3457
+
3445
3458
  elm.attributes.scan(@@pattern_get_attrs_map2) do |a|
3446
3459
  attrs.store(a, TRUE)
3447
3460
  end
3448
-
3461
+
3449
3462
  attrs.recordable = true
3450
-
3463
+
3451
3464
  attrs
3452
3465
  end
3453
3466
  private :get_attribute_map_1
@@ -3460,7 +3473,7 @@ module Meteor
3460
3473
  elm.attributes.sub!(@pattern, EMPTY)
3461
3474
  else
3462
3475
  #属性検索用パターン
3463
- @pattern = Meteor::Core::Util::PatternCache.get(attr_name)
3476
+ @pattern = Meteor::Core::Util::PatternCache.get(attr_name)
3464
3477
  elm.attributes.sub!(@pattern, EMPTY)
3465
3478
  #end
3466
3479
  end
@@ -3522,7 +3535,7 @@ module Meteor
3522
3535
  def escape_content(content,elm_name)
3523
3536
  if RUBY_VERSION < RUBY_VERSION_1_9_0 then
3524
3537
  content = escape(content)
3525
-
3538
+
3526
3539
  if !is_match(MATCH_TAG_2,elm_name) then
3527
3540
  #「¥r?¥n」->「<br>」
3528
3541
  content.gsub!(@@pattern_br_1, BR_2)
@@ -3530,7 +3543,7 @@ module Meteor
3530
3543
  else
3531
3544
  content.gsub!(@@pattern_escape_content, TABLE_FOR_ESCAPE_CONTENT_)
3532
3545
  end
3533
-
3546
+
3534
3547
  content
3535
3548
  end
3536
3549
  private :escape_content
@@ -3559,21 +3572,21 @@ module Meteor
3559
3572
  #end
3560
3573
  content.gsub!(@@pattern_unescape) do
3561
3574
  case $1
3562
- when AND_3 then
3563
- AND_1
3564
- when QO_3 then
3565
- DOUBLE_QUATATION
3566
- when AP_3 then
3567
- AP_1
3568
- when GT_3 then
3569
- GT_1
3570
- when LT_3 then
3571
- LT_1
3572
- when NBSP_3 then
3573
- SPACE
3575
+ when AND_3 then
3576
+ AND_1
3577
+ when QO_3 then
3578
+ DOUBLE_QUATATION
3579
+ when AP_3 then
3580
+ AP_1
3581
+ when GT_3 then
3582
+ GT_1
3583
+ when LT_3 then
3584
+ LT_1
3585
+ when NBSP_3 then
3586
+ SPACE
3574
3587
  end
3575
3588
  end
3576
-
3589
+
3577
3590
  content
3578
3591
  end
3579
3592
  private :unescape
@@ -3614,7 +3627,7 @@ module Meteor
3614
3627
 
3615
3628
  #MATCH_TAG_2 = "textarea|option|pre"
3616
3629
  MATCH_TAG_2 = ['textarea','option','pre']
3617
-
3630
+
3618
3631
  ATTR_LOGIC = ['disabled','readonly','checked','selected','multiple']
3619
3632
  OPTION = 'option'
3620
3633
  SELECTED = 'selected'
@@ -3643,7 +3656,7 @@ module Meteor
3643
3656
  #@@pattern_readonly = Regexp.new(READONLY)
3644
3657
  #@@pattern_select = Regexp.new(SELECT)
3645
3658
  #@@pattern_multiple = Regexp.new(MULTIPLE)
3646
-
3659
+
3647
3660
  SELECTED_M = '\\sselected="[^"]*"\\s|\\sselected="[^"]*"$'
3648
3661
  SELECTED_M1 = '\\sselected="([^"]*)"\\s|\\sselected="([^"]*)"$'
3649
3662
  SELECTED_R = 'selected="[^"]*"'
@@ -3693,31 +3706,31 @@ module Meteor
3693
3706
 
3694
3707
  if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
3695
3708
  TABLE_FOR_ESCAPE_ = {
3696
- '&' => '&amp;',
3697
- '"' => '&quot;',
3698
- '\'' => '&apos;',
3699
- '<' => '&lt;',
3700
- '>' => '&gt;',
3701
- ' ' => '&nbsp;',
3702
- }
3703
-
3709
+ '&' => '&amp;',
3710
+ '"' => '&quot;',
3711
+ '\'' => '&apos;',
3712
+ '<' => '&lt;',
3713
+ '>' => '&gt;',
3714
+ ' ' => '&nbsp;',
3715
+ }
3716
+
3704
3717
  TABLE_FOR_ESCAPE_CONTENT_ = {
3705
- '&' => '&amp;',
3706
- '"' => '&quot;',
3707
- '\'' => '&apos;',
3708
- '<' => '&lt;',
3709
- '>' => '&gt;',
3710
- ' ' => '&nbsp;',
3711
- "\n" => '<br/>',
3712
- }
3713
-
3718
+ '&' => '&amp;',
3719
+ '"' => '&quot;',
3720
+ '\'' => '&apos;',
3721
+ '<' => '&lt;',
3722
+ '>' => '&gt;',
3723
+ ' ' => '&nbsp;',
3724
+ "\n" => '<br/>',
3725
+ }
3726
+
3714
3727
  PATTERN_ESCAPE = '[&"\'<> ]'
3715
3728
  PATTERN_ESCAPE_CONTENT = '[&"\'<> \\n]'
3716
3729
  @@pattern_escape = Regexp.new(PATTERN_ESCAPE)
3717
3730
  @@pattern_escape_content = Regexp.new(PATTERN_ESCAPE_CONTENT)
3718
-
3731
+
3719
3732
  else
3720
-
3733
+
3721
3734
  @@pattern_and_1 = Regexp.new(AND_1)
3722
3735
  @@pattern_lt_1 = Regexp.new(LT_1)
3723
3736
  @@pattern_gt_1 = Regexp.new(GT_1)
@@ -3732,12 +3745,12 @@ module Meteor
3732
3745
  @@pattern_space_2 = Regexp.new(NBSP_2)
3733
3746
  @@pattern_and_2 = Regexp.new(AND_2)
3734
3747
  @@pattern_br_2 = Regexp.new(BR_3)
3735
-
3748
+
3736
3749
  end
3737
-
3750
+
3738
3751
  PATTERN_UNESCAPE = '&(amp|quot|apos|gt|lt|nbsp);'
3739
3752
  @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
3740
-
3753
+
3741
3754
  #@@pattern_match_tag = Regexp.new(MATCH_TAG)
3742
3755
  @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
3743
3756
  #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
@@ -3749,12 +3762,12 @@ module Meteor
3749
3762
  def initialize(*args)
3750
3763
  super(args)
3751
3764
  case args.length
3752
- when ZERO
3753
- initialize_0
3754
- when ONE
3755
- initialize_1(args[0])
3756
- else
3757
- raise ArgumentError
3765
+ when ZERO
3766
+ initialize_0
3767
+ when ONE
3768
+ initialize_1(args[0])
3769
+ else
3770
+ raise ArgumentError
3758
3771
  end
3759
3772
  end
3760
3773
 
@@ -3824,11 +3837,11 @@ module Meteor
3824
3837
  #
3825
3838
  def analyze_content_type
3826
3839
  element(META_S,HTTP_EQUIV,CONTENT_TYPE)
3827
-
3840
+
3828
3841
  if !@elm_ then
3829
3842
  element(META,HTTP_EQUIV,CONTENT_TYPE)
3830
3843
  end
3831
-
3844
+
3832
3845
  if @elm_ then
3833
3846
  @root.content_type = @elm_.attribute(CONTENT)
3834
3847
  else
@@ -3894,10 +3907,10 @@ module Meteor
3894
3907
  #属性の置換
3895
3908
  elm.attributes.gsub!(replace_regex, EMPTY)
3896
3909
  end
3897
-
3910
+
3898
3911
  end
3899
3912
  private :edit_attributes_5
3900
-
3913
+
3901
3914
  def get_attribute_value_(elm,attr_name)
3902
3915
  if is_match(SELECTED, attr_name) && is_match(OPTION,elm.name) then
3903
3916
  get_attribute_value_2_r(elm,attr_name,@@pattern_selected_m1)
@@ -3925,9 +3938,9 @@ module Meteor
3925
3938
  elm.type_value
3926
3939
  end
3927
3940
  private :get_type
3928
-
3941
+
3929
3942
  def get_attribute_value_2_r(elm,attr_name,match_p)
3930
-
3943
+
3931
3944
  @res = match_p.match(elm.attributes)
3932
3945
 
3933
3946
  if @res then
@@ -3961,7 +3974,7 @@ module Meteor
3961
3974
  end
3962
3975
  end
3963
3976
  private :get_attribute_value_2_r
3964
-
3977
+
3965
3978
  #
3966
3979
  # 属性マップを取得する
3967
3980
  #
@@ -3970,7 +3983,7 @@ module Meteor
3970
3983
  #
3971
3984
  def get_attribute_map_1(elm)
3972
3985
  attrs = Meteor::AttributeMap.new
3973
-
3986
+
3974
3987
  elm.attributes.scan(@@pattern_get_attrs_map) do |a, b|
3975
3988
  if is_match(ATTR_LOGIC, a) && a==b then
3976
3989
  attrs.store(a, TRUE)
@@ -3979,11 +3992,11 @@ module Meteor
3979
3992
  end
3980
3993
  end
3981
3994
  attrs.recordable = true
3982
-
3995
+
3983
3996
  attrs
3984
3997
  end
3985
3998
  private :get_attribute_map_1
3986
-
3999
+
3987
4000
  def set_mono_info(elm)
3988
4001
 
3989
4002
  @res = @@pattern_set_mono1.match(elm.mixed_content)
@@ -4025,7 +4038,7 @@ module Meteor
4025
4038
  if content.include?(DOUBLE_QUATATION) then
4026
4039
  content.gsub!(@@pattern_dq_1,QO_2)
4027
4040
  end
4028
- #「'」->「&apos;」
4041
+ #「'」->「&apos;」
4029
4042
  if content.include?(AP_1) then
4030
4043
  content.gsub!(@@pattern_ap_1,AP_2)
4031
4044
  end
@@ -4036,16 +4049,16 @@ module Meteor
4036
4049
  else
4037
4050
  content.gsub!(@@pattern_escape,TABLE_FOR_ESCAPE_)
4038
4051
  end
4039
-
4052
+
4040
4053
  content
4041
4054
  end
4042
4055
  private :escape
4043
4056
 
4044
4057
  def escape_content(content,elm_name)
4045
-
4058
+
4046
4059
  if RUBY_VERSION < RUBY_VERSION_1_9_0 then
4047
4060
  content = escape(content)
4048
-
4061
+
4049
4062
  if !is_match(MATCH_TAG_2,elm_name) then
4050
4063
  #「¥r?¥n」->「<br>」
4051
4064
  content.gsub!(@@pattern_br_1, BR_2)
@@ -4081,21 +4094,21 @@ module Meteor
4081
4094
  #end
4082
4095
  content.gsub!(@@pattern_unescape) do
4083
4096
  case $1
4084
- when AND_3 then
4085
- AND_1
4086
- when QO_3 then
4087
- DOUBLE_QUATATION
4088
- when AP_3 then
4089
- AP_1
4090
- when GT_3 then
4091
- GT_1
4092
- when LT_3 then
4093
- LT_1
4094
- when NBSP_3 then
4095
- SPACE
4097
+ when AND_3 then
4098
+ AND_1
4099
+ when QO_3 then
4100
+ DOUBLE_QUATATION
4101
+ when AP_3 then
4102
+ AP_1
4103
+ when GT_3 then
4104
+ GT_1
4105
+ when LT_3 then
4106
+ LT_1
4107
+ when NBSP_3 then
4108
+ SPACE
4096
4109
  end
4097
4110
  end
4098
-
4111
+
4099
4112
  content
4100
4113
  end
4101
4114
  private :unescape
@@ -4122,7 +4135,7 @@ module Meteor
4122
4135
  #
4123
4136
  # XMLパーサ
4124
4137
  #
4125
- class ParserImpl < Meteor::Core::Kernel
4138
+ class ParserImpl < Meteor::Core::Kernel
4126
4139
 
4127
4140
  if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
4128
4141
  TABLE_FOR_ESCAPE_ = {
@@ -4131,7 +4144,7 @@ module Meteor
4131
4144
  '\'' => '&apos;',
4132
4145
  '<' => '&lt;',
4133
4146
  '>' => '&gt;',
4134
- }
4147
+ }
4135
4148
  PATTERN_ESCAPE = '[&\"\'<>]'
4136
4149
  @@pattern_escape = Regexp.new(PATTERN_ESCAPE)
4137
4150
  else
@@ -4151,7 +4164,7 @@ module Meteor
4151
4164
 
4152
4165
  PATTERN_UNESCAPE = '&(amp|quot|apos|gt|lt);'
4153
4166
  @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
4154
-
4167
+
4155
4168
  @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
4156
4169
 
4157
4170
  #
@@ -4163,12 +4176,12 @@ module Meteor
4163
4176
  super(args)
4164
4177
 
4165
4178
  case args.length
4166
- when ZERO
4167
- initialize_0
4168
- when ONE
4169
- initialize_1(args[0])
4170
- else
4171
- raise ArgumentError
4179
+ when ZERO
4180
+ initialize_0
4181
+ when ONE
4182
+ initialize_1(args[0])
4183
+ else
4184
+ raise ArgumentError
4172
4185
  end
4173
4186
  end
4174
4187
 
@@ -4177,8 +4190,8 @@ module Meteor
4177
4190
  #
4178
4191
  def initialize_0
4179
4192
  end
4180
- private :initialize_0
4181
-
4193
+ private :initialize_0
4194
+
4182
4195
  #
4183
4196
  # イニシャライザ
4184
4197
  #
@@ -4208,7 +4221,7 @@ module Meteor
4208
4221
  def read(file_path,encoding)
4209
4222
  super(file_path, encoding)
4210
4223
  end
4211
-
4224
+
4212
4225
  # コンテントタイプを取得する
4213
4226
  #
4214
4227
  # @return [Streing]コンテントタイプ
@@ -4216,7 +4229,7 @@ module Meteor
4216
4229
  def content_type()
4217
4230
  @root.content_type
4218
4231
  end
4219
-
4232
+
4220
4233
  def set_mono_info(elm)
4221
4234
 
4222
4235
  @res = @@pattern_set_mono1.match(elm.mixed_content)
@@ -4301,20 +4314,20 @@ module Meteor
4301
4314
  #else
4302
4315
  content.gsub!(@@pattern_unescape) do
4303
4316
  case $1
4304
- when AND_3 then
4305
- AND_1
4306
- when QO_3 then
4307
- DOUBLE_QUATATION
4308
- when AP_3 then
4309
- AP_1
4310
- when GT_3 then
4311
- GT_1
4312
- when LT_3 then
4313
- LT_1
4317
+ when AND_3 then
4318
+ AND_1
4319
+ when QO_3 then
4320
+ DOUBLE_QUATATION
4321
+ when AP_3 then
4322
+ AP_1
4323
+ when GT_3 then
4324
+ GT_1
4325
+ when LT_3 then
4326
+ LT_1
4314
4327
  end
4315
4328
  end
4316
4329
  #end
4317
-
4330
+
4318
4331
  content
4319
4332
  end
4320
4333
  private :unescape