asip-meteor 0.9.3.1 → 0.9.3.2

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 +660 -570
  2. metadata +3 -3
data/lib/meteor.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # -* coding: UTF-8 -*-
2
2
  # Meteor - A lightweight (X)HTML & XML parser
3
3
  #
4
- # Copyright (C) 2008 Yasumasa Ashida.
4
+ # Copyright (C) 2008-2009 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,18 +18,19 @@
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.3.1
21
+ # @version 0.9.3.2
22
22
  #
23
23
 
24
24
  module Meteor
25
25
 
26
- VERSION = "0.9.3.1"
26
+ VERSION = "0.9.3.2"
27
27
 
28
28
  RUBY_VERSION_1_9_0 = '1.9.0'
29
29
 
30
30
  if RUBY_VERSION < RUBY_VERSION_1_9_0 then
31
31
  require 'Kconv'
32
- E_UTF8 = 'UTF8'
32
+ #E_UTF8 = 'UTF8'
33
+ $KCODE = 'UTF8'
33
34
  end
34
35
 
35
36
  ZERO = 0
@@ -41,16 +42,18 @@ module Meteor
41
42
  SIX = 6
42
43
  SEVEN = 7
43
44
 
44
- CONTENT_STR = ':content'
45
-
46
45
  #
47
46
  # 要素クラス
48
47
  #
49
- class Element
48
+ class Element
50
49
 
51
50
  #
52
51
  # イニシャライザ
53
52
  # @param [Array] args 引数配列
53
+ # @overload def initialize(name)
54
+ # @param [String] name 名前
55
+ # @overload def initialize(elm)
56
+ # @param [Meteor::Element] elm 要素
54
57
  #
55
58
  def initialize(*args)
56
59
  case args.length
@@ -134,22 +137,20 @@ module Meteor
134
137
  end
135
138
  private :initialize_e
136
139
 
137
- attr_accessor :name #要素名
138
- attr_accessor :attributes #属性群
139
- attr_accessor :mixed_content #内容
140
- attr_accessor :pattern #パターン
141
- #attr_accessor :document #ドキュメント
142
- #attr_writer :document
143
- attr_accessor :document_sync
144
- attr_accessor :empty #内容存在フラグ
145
- attr_accessor :cx #コメント拡張タグフラグ
146
- attr_accessor :mono #子要素存在フラグ
147
- attr_accessor :parser #パーサ
148
- attr_accessor :type_value #タイプ属性
140
+ attr_accessor :name #[String] 要素名
141
+ attr_accessor :attributes #[String] 属性群
142
+ attr_accessor :mixed_content #[String] 内容
143
+ attr_accessor :pattern #[String] パターン
144
+ attr_accessor :document_sync #[true,false] ドキュメント更新フラグ
145
+ attr_accessor :empty #[true,false] 内容存在フラグ
146
+ attr_accessor :cx #[true,false] コメント拡張タグフラグ
147
+ attr_accessor :mono #[true,false] 子要素存在フラグ
148
+ attr_accessor :parser #[Meteor::Parser] パーサ
149
+ attr_accessor :type_value #[String] タイプ属性
149
150
  #attr_accessor :arguments #パターン変更用属性マップ
150
- attr_accessor :usable #有効・無効フラグ
151
- attr_accessor :origin #原本ポインタ
152
- attr_accessor :copy #複製ポインタ
151
+ attr_accessor :usable #[true,false] 有効・無効フラグ
152
+ attr_accessor :origin #[Meteor::Element] 原本ポインタ
153
+ attr_accessor :copy #[Meteor::Element] 複製ポインタ
153
154
 
154
155
  #
155
156
  # コピーを作成する
@@ -157,9 +158,9 @@ module Meteor
157
158
  #
158
159
  def self.new!(*args)
159
160
  case args.length
160
- when ONE
161
- #self.new_1!(args[0])
162
- args[0].clone
161
+ #when ONE
162
+ # #self.new_1!(args[0])
163
+ # args[0].clone
163
164
  when TWO
164
165
  @obj = args[1].root_element.element
165
166
  if @obj then
@@ -199,9 +200,31 @@ module Meteor
199
200
 
200
201
  #
201
202
  # 子要素を取得する
202
- #
203
- # @param [Array] args 引数配列
204
- # @return [Element] 子要素
203
+ # @overload def child(elm_name)
204
+ # @param [String] elm_name 要素名
205
+ # @return [Meteor::Element] 要素
206
+ # @overload def child(elm_name,attr_name,attr_value)
207
+ # @param [String] elm_name 要素名
208
+ # @param [String] attr_name 属性名
209
+ # @param [String] attr_value 属性値
210
+ # @return [Meteor::Element] 要素
211
+ # @overload def child(attr_name,attr_value)
212
+ # @param [String] attr_name 属性名
213
+ # @param [String] attr_value 属性値
214
+ # @return [Meteor::Element] 要素
215
+ # @overload def child(elm_name,attr_name1,attr_value1,attr_name2,attr_value2)
216
+ # @param [String] elm_name 要素の名前
217
+ # @param [String] attr_name1 属性名1
218
+ # @param [String] attr_value1 属性値2
219
+ # @param [String] attr_name2 属性名2
220
+ # @param [String] attr_value2 属性値2
221
+ # @return [Meteor::Element] 要素
222
+ # @overload def child(attr_name1,attr_value1,attr_name2,attr_value2)
223
+ # @param [String] attr_name1 属性名1
224
+ # @param [String] attr_value1 属性値2
225
+ # @param [String] attr_name2 属性名2
226
+ # @param [String] attr_value2 属性値2
227
+ # @return [Meteor::Element] 要素
205
228
  #
206
229
  def child(*args)
207
230
  @parser.element(*args)
@@ -209,37 +232,59 @@ module Meteor
209
232
 
210
233
  #
211
234
  # CX(コメント拡張)タグを取得する
212
- #
213
- # @param [Array] args 引数配列
214
- # @return [Meteor::Element] 要素
235
+ # @overload def cxtag(elm_name,id)
236
+ # @param [String] elm_name 要素名
237
+ # @param [String] id ID属性値
238
+ # @return [Meteor::Element] 要素
239
+ # @overload def cxtag(id)
240
+ # @param [String] id ID属性値
241
+ # @return [Meteor::Element] 要素
215
242
  #
216
243
  def cxtag(*args)
217
244
  @parser.cxtag(*args)
218
245
  end
246
+
219
247
  #
220
- # 属性を編集する or 属性の値を取得する
221
- #
222
- # @param [Array] args 引数配列
223
- # @return [String] 属性値
248
+ # @overload def attribute(attr_name,attr_value)
249
+ # 要素の属性をセットする
250
+ # @param [String] attr_name 属性名
251
+ # @param [String,true,false] attr_value 属性値
252
+ # @return [Meteor::Element] 要素
253
+ # @overload def attribute(attr_name)
254
+ # 要素の属性値を取得する
255
+ # @param [String] attr_name 属性名
256
+ # @return [String] 属性値
224
257
  #
225
258
  def attribute(*args)
226
259
  @parser.attribute(self,*args)
227
260
  end
228
261
 
229
262
  #
230
- # 属性マップを取得する
231
- #
232
- # @return [Meteor::AttributeMap] 属性マップ
263
+ # @overload def attribute_map(attr_map)
264
+ # 属性マップをセットする
265
+ # @param [Meteor::AttributeMap] attrMap 属性マップ
266
+ # @return [Meteor::Element] 要素
267
+ # @overload def attribute_map()
268
+ # 属性マップを取得する
269
+ # @return [Meteor::AttributeMap] 属性マップ
233
270
  #
234
- def attribute_map
235
- @parser.attribute_map(self)
271
+ def attribute_map(*args)
272
+ @parser.attribute_map(self,*args)
236
273
  end
237
274
 
238
275
  #
239
- # 内容をセットする or 内容を取得する
240
- #
241
- # @param [Array] args 引数配列
242
- # @return [String] 内容
276
+ # @overload def content(content,entity_ref=true)
277
+ # 要素の内容をセットする
278
+ # @param [String] content 要素の内容
279
+ # @param [true,false] entity_ref エンティティ参照フラグ
280
+ # @return [Meteor::Element] 要素
281
+ # @overload def content(content)
282
+ # 要素の内容をセットする
283
+ # @param [String] content 要素の内容
284
+ # @return [Meteor::Element] 要素
285
+ # @overload def content()
286
+ # 要素の内容を取得する
287
+ # @return [String] 内容
243
288
  #
244
289
  def content(*args)
245
290
  @parser.content(self,*args)
@@ -247,52 +292,55 @@ module Meteor
247
292
 
248
293
  #
249
294
  # 内容をセットする
250
- #
251
295
  # @param [String] value 内容
296
+ # @return [Meteor::Element] 要素
252
297
  #
253
298
  def content=(value)
254
299
  @parser.content(self,value)
255
300
  end
256
301
 
257
302
  #
258
- # 属性を編集するor内容をセットする
259
- #
303
+ # 属性をセットする
260
304
  # @param [String] name 属性の名前
261
- # @param [String] value 属性の値or内容
305
+ # @param [String] value 属性の値
306
+ # @return [Meteor::Element] 要素
262
307
  #
263
308
  def []=(name,value)
264
- #if !name.kind_of?(String) || CONTENT_STR != name then
265
- if CONTENT_STR != name then
266
- attribute(name,value)
267
- else
268
- @parser.content(self,value)
269
- end
309
+ ##if !name.kind_of?(String) || CONTENT_STR != name then
310
+ #if CONTENT_STR != name then
311
+ @parser.attribute(self,name,value)
312
+ #else
313
+ # @parser.content(self,value)
314
+ #end
270
315
  end
271
316
 
272
317
  #
273
- # 属性の値or内容を取得する
274
- #
318
+ # 属性の値を取得する
275
319
  # @param [String] name 属性の名前
276
- # @return [String] 属性の値or内容
320
+ # @return [String] 属性の値
277
321
  #
278
322
  def [](name)
279
- #if !name.kind_of?(String) || CONTENT_STR != name then
280
- if CONTENT_STR != name then
281
- attribute(name)
282
- else
283
- content()
284
- end
323
+ ##if !name.kind_of?(String) || CONTENT_STR != name then
324
+ #if CONTENT_STR != name then
325
+ @parser.attribute(self,name)
326
+ #else
327
+ # content()
328
+ #end
285
329
  end
286
330
 
287
331
  #
288
- # 属性を削除する
289
- #
290
- # @param args 引数配列
332
+ # 要素の属性を消す
333
+ # @param [String] attr_name 属性名
334
+ # @return [Meteor::Element] 要素
291
335
  #
292
- def remove_attribute(*args)
293
- @parser.remove_attribute(self,*args)
336
+ def remove_attribute(attr_name)
337
+ @parser.remove_attribute(self,attr_name)
294
338
  end
295
339
 
340
+ #
341
+ # ドキュメントをセットする
342
+ # @param [String] doc ドキュメント
343
+ #
296
344
  def document=(doc)
297
345
  @document_sync = false
298
346
  @document = doc
@@ -342,6 +390,9 @@ module Meteor
342
390
  @parser.remove_element(self)
343
391
  end
344
392
 
393
+ #
394
+ # 反映する
395
+ #
345
396
  def flush
346
397
  @parser.flush
347
398
  end
@@ -380,12 +431,12 @@ module Meteor
380
431
  #@element = nil
381
432
  end
382
433
 
383
- attr_accessor :content_type
384
- attr_accessor :kaigyo_code
385
- attr_accessor :character_encoding
386
- attr_accessor :document
387
- attr_accessor :hook_document
388
- attr_accessor :element
434
+ attr_accessor :content_type #[String] コンテントタイプ
435
+ attr_accessor :kaigyo_code #[String] 改行コード
436
+ attr_accessor :character_encoding #[String] エンコーディング
437
+ attr_accessor :document #[String] ドキュメント
438
+ attr_accessor :hook_document #[String] フック・ドキュメント
439
+ attr_accessor :element #[Meteor::Element] 要素
389
440
  end
390
441
 
391
442
  #
@@ -393,6 +444,12 @@ module Meteor
393
444
  #
394
445
  class AttributeMap
395
446
 
447
+ #
448
+ # イニシャライザ
449
+ # @overload def initialize
450
+ # @overload def initialize(attr_map)
451
+ # @param [Meteor::AttributeMap] attr_map 属性マップ
452
+ #
396
453
  def initialize(*args)
397
454
  case args.length
398
455
  when ZERO
@@ -418,6 +475,7 @@ module Meteor
418
475
 
419
476
  #
420
477
  # イニシャライザ
478
+ # @param [Meteor::AttributeMap] attr_map 属性マップ
421
479
  #
422
480
  def initialize_1(attr_map)
423
481
  #@map = Marshal.load(Marshal.dump(attrMap.map))
@@ -431,7 +489,6 @@ module Meteor
431
489
 
432
490
  #
433
491
  # 属性名と属性値を対としてセットする
434
- #
435
492
  # @param [String] name 属性名
436
493
  # @param [String] value 属性値
437
494
  #
@@ -461,7 +518,6 @@ module Meteor
461
518
 
462
519
  #
463
520
  # 属性名配列を取得する
464
- #
465
521
  # @return [Array] 属性名配列
466
522
  #
467
523
  def names
@@ -473,8 +529,7 @@ module Meteor
473
529
  end
474
530
 
475
531
  #
476
- # 属性名で属性値を取得する
477
- #
532
+ # 属性名で属性値を取得する
478
533
  # @param [String] name 属性名
479
534
  # @return [String] 属性値
480
535
  #
@@ -485,8 +540,7 @@ module Meteor
485
540
  end
486
541
 
487
542
  #
488
- # 属性名に対応した属性を削除する
489
- #
543
+ # 属性名に対応した属性を削除する
490
544
  # @param name 属性名
491
545
  #
492
546
  def delete(name)
@@ -497,9 +551,8 @@ module Meteor
497
551
  end
498
552
 
499
553
  #
500
- # 属性名で属性の変更状況を取得する
501
- #
502
- # @return [TrueClass,FalseClass] 属性の変更状況
554
+ # 属性名で属性の変更状況を取得する
555
+ # @return [true,false] 属性の変更状況
503
556
  #
504
557
  def changed(name)
505
558
  if @map[name] then
@@ -509,8 +562,7 @@ module Meteor
509
562
 
510
563
  #
511
564
  # 属性名で属性の削除状況を取得する
512
- #
513
- # @return [TrueClass,FalseClass] 属性の削除状況
565
+ # @return [true,false] 属性の削除状況
514
566
  #
515
567
  def removed(name)
516
568
  if @map[name] then
@@ -557,10 +609,10 @@ module Meteor
557
609
  #@removed = false
558
610
  end
559
611
 
560
- attr_accessor :name
561
- attr_accessor :value
562
- attr_accessor :changed
563
- attr_accessor :removed
612
+ attr_accessor :name #[String] 名前
613
+ attr_accessor :value #[String] 値
614
+ attr_accessor :changed #[true,false] 更新フラグ
615
+ attr_accessor :removed #[true,false] 削除フラグ
564
616
 
565
617
  end
566
618
 
@@ -583,12 +635,17 @@ module Meteor
583
635
  SLASH = '/'
584
636
  ENC_UTF8 = 'UTF-8'
585
637
 
586
- attr_accessor :base_dir
587
- attr_accessor :base_encoding
638
+ attr_accessor :base_dir #[String] 基準ディレクトリ
639
+ attr_accessor :base_encoding #[String] デフォルトエンコーディング
588
640
 
589
641
  #
590
642
  # イニシャライザ
591
- # @params [Array] args 引数配列
643
+ # @overload def initialize()
644
+ # @overload def initialize(bs_dir)
645
+ # @param [String] bs_dir 基準ディレクトリ
646
+ # @overload def initialize(bs_dir,bs_encoding)
647
+ # @param [String] bs_dir 基準ディレクトリ
648
+ # @param [String] bs_encoding デフォルトエンコーディング
592
649
  #
593
650
  def initialize(*args)
594
651
  case args.length
@@ -637,9 +694,21 @@ module Meteor
637
694
  private :initialize_1
638
695
 
639
696
  #
640
- # パーサをセットする
641
- # @param [Array] args 引数配列
642
- # @return [Meteor::Parser] パーサ
697
+ # @overload def parser(type,relative_path,encoding)
698
+ # パーサをセットする
699
+ # @param [Fixnum] type パーサのタイプ
700
+ # @param [String] relative_path 相対ファイルパス
701
+ # @param [String] encoding エンコーディング
702
+ # @return [Meteor::Parser] パーサ
703
+ # @overload def parser(type,relative_path)
704
+ # パーサをセットする
705
+ # @param [Fixnum] type パーサのタイプ
706
+ # @param [String] relative_path 相対ファイルパス
707
+ # @return [Meteor::Parser] パーサ
708
+ # @overload def parser(key)
709
+ # パーサを取得する
710
+ # @param [String] key キー
711
+ # @return [Meteor::Parser] パーサ
643
712
  #
644
713
  def parser(*args)
645
714
  case args.length
@@ -652,27 +721,8 @@ module Meteor
652
721
  end
653
722
  end
654
723
 
655
- #
656
- # パーサを取得する
657
- # @param [String] key キー
658
- # @return [Meteor::Parser] パーサ
659
- #
660
- def parser_1(key)
661
- @pif = @cache[key]
662
-
663
- if @pif.instance_of?(Meteor::Core::Html::ParserImpl) then
664
- Meteor::Core::Html::ParserImpl.new(@pif)
665
- elsif @pif.instance_of?(Meteor::Core::Xhtml::ParserImpl) then
666
- Meteor::Core::Xhtml::ParserImpl.new(@pif)
667
- elsif @pif.instance_of?(Meteor::Core::Xml::ParserImpl) then
668
- Meteor::Core::Xml::ParserImpl.new(@pif)
669
- end
670
- end
671
- private :parser_1
672
-
673
724
  #
674
725
  # パーサをセットする
675
- #
676
726
  # @param [Fixnum] type パーサのタイプ
677
727
  # @param [String] relative_path 相対ファイルパス
678
728
  # @param [String] encoding エンコーディング
@@ -692,17 +742,14 @@ module Meteor
692
742
  when Parser::HTML then
693
743
  html = Meteor::Core::Html::ParserImpl.new()
694
744
  html.read(File.expand_path(relative_path,@base_dir), encoding)
695
- html.doc_type = Parser::HTML
696
745
  @cache[relative_url] = html
697
746
  when Parser::XHTML then
698
747
  xhtml = Meteor::Core::Xhtml::ParserImpl.new()
699
748
  xhtml.read(File.expand_path(relative_path,@base_dir), encoding)
700
- xhtml.doc_type = Parser::XHTML
701
749
  @cache[relative_url] = xhtml
702
750
  when Parser::XML then
703
751
  xml = Meteor::Core::Xml::ParserImpl.new()
704
752
  xml.read(File.expand_path(relative_path,@base_dir), encoding)
705
- xml.doc_type = Parser::XML
706
753
  @cache[relative_url] = xml
707
754
  end
708
755
  end
@@ -710,7 +757,6 @@ module Meteor
710
757
 
711
758
  #
712
759
  # パーサをセットする
713
- #
714
760
  # @param [Fixnum] type パーサのタイプ
715
761
  # @param [String] relative_path 相対ファイルパス
716
762
  # @return [Meteor::Parser] パーサ
@@ -719,27 +765,24 @@ module Meteor
719
765
 
720
766
  paths = File.split(relative_path)
721
767
 
722
- if '.'.eql?(paths[0]) then
768
+ if CURRENT_DIR.eql?(paths[0]) then
723
769
  relative_url = File.basename(paths[1],ABST_EXT_NAME)
724
770
  else
725
- relative_url = [paths[0],File.basename(paths[1],'.*')].join("/")
771
+ relative_url = [paths[0],File.basename(paths[1],ABST_EXT_NAME)].join(SLASH)
726
772
  end
727
773
 
728
774
  case type
729
775
  when Parser::HTML then
730
776
  html = Meteor::Core::Html::ParserImpl.new()
731
777
  html.read(File.expand_path(relative_path,@base_dir), @base_encoding)
732
- html.doc_type = Parser::HTML
733
778
  @cache[relative_url] = html
734
779
  when Parser::XHTML then
735
780
  xhtml = Meteor::Core::Xhtml::ParserImpl.new()
736
781
  xhtml.read(File.expand_path(relative_path,@base_dir), @base_encoding)
737
- xhtml.doc_type = Parser::XHTML
738
782
  @cache[relative_url] = xhtml
739
783
  when Parser::XML then
740
784
  xml = Meteor::Core::Xml::ParserImpl.new()
741
785
  xml.read(File.expand_path(relative_path,@base_dir), @base_encoding)
742
- xml.doc_type = Parser::XML
743
786
  @cache[relative_url] = xml
744
787
  end
745
788
 
@@ -747,8 +790,25 @@ module Meteor
747
790
  private :parser_2
748
791
 
749
792
  #
750
- # パーサをセットする
793
+ # パーサを取得する
794
+ # @param [String] key キー
795
+ # @return [Meteor::Parser] パーサ
751
796
  #
797
+ def parser_1(key)
798
+ @pif = @cache[key]
799
+
800
+ if Meteor::Parser::HTML == @pif.doc_type then
801
+ Meteor::Core::Html::ParserImpl.new(@pif)
802
+ elsif Meteor::Parser::XHTML == @pif.doc_type then
803
+ Meteor::Core::Xhtml::ParserImpl.new(@pif)
804
+ elsif Meteor::Parser::XML == @pif.doc_type then
805
+ Meteor::Core::Xml::ParserImpl.new(@pif)
806
+ end
807
+ end
808
+ private :parser_1
809
+
810
+ #
811
+ # パーサをセットする
752
812
  # @param [Fixnum] type パーサのタイプ
753
813
  # @param [String] relative_url 相対URL
754
814
  # @param [String] document ドキュメント
@@ -759,38 +819,34 @@ module Meteor
759
819
  when Parser::HTML then
760
820
  html = Meteor::Core::Html::ParserImpl.new()
761
821
  html.parse(document)
762
- html.doc_type = Parser::HTML
763
822
  @cache[relative_url] = html
764
823
  when Parser::XHTML then
765
824
  xhtml = Meteor::Core::Xhtml::ParserImpl.new()
766
825
  xhtml.parse(document)
767
- xhtml.doc_type = Parser::XHTML
768
826
  @cache[relative_url] = xhtml
769
827
  when Parser::XML then
770
828
  xml = Meteor::Core::Xml::ParserImpl.new()
771
829
  xml.parse(document)
772
- xml.doc_type = Parser::XML
773
830
  @cache[relative_url] = xml
774
831
  end
775
832
  end
776
833
 
777
834
  #
778
835
  # パーサをセットする
779
- # @param [String] name 名前
780
- # @param [Meteor::Parser] pif パーサ
836
+ # @param [String] kay キー
837
+ # @param [Meteor::Parser] ps パーサ
781
838
  #
782
- def []=(name,pif)
783
- @cache[path] = pif
839
+ def []=(key,ps)
840
+ @cache[path] = ps
784
841
  end
785
842
 
786
843
  #
787
844
  # パーサを取得する
788
- #
789
- #
845
+ # @param [String] key キー
790
846
  # @return [Meteor::Parser] パーサ
791
847
  #
792
- def [](name)
793
- self.parser(name)
848
+ def [](key)
849
+ self.parser(key)
794
850
  end
795
851
 
796
852
  end
@@ -869,9 +925,9 @@ module Meteor
869
925
  DOUBLE_QUATATION = '"'
870
926
  TAG_OPEN = '<'
871
927
  TAG_OPEN3 = '</'
872
- TAG_OPEN4 = '<\\\\/'
928
+ #TAG_OPEN4 = '<\\\\/'
873
929
  TAG_CLOSE = '>'
874
- TAG_CLOSE2 = '\\/>'
930
+ #TAG_CLOSE2 = '\\/>'
875
931
  TAG_CLOSE3 = '/>'
876
932
  ATTR_EQ = '="'
877
933
  #element
@@ -1027,24 +1083,6 @@ module Meteor
1027
1083
  #SUB_REGEX2 = '\\1\\1\\\\\\\\\\2'
1028
1084
  #SUB_REGEX3 = '\\1\\1\\1\\1\\\\\\\\\\\\\\\\\\2'
1029
1085
 
1030
- if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
1031
- MODE_BF = 'r:'
1032
- MODE_AF = ':utf-8'
1033
-
1034
- @@pattern_get_attrs_map = Regexp.new(GET_ATTRS_MAP)
1035
-
1036
- @@pattern_clean1 = Regexp.new(CLEAN_1)
1037
- @@pattern_clean2 = Regexp.new(CLEAN_2)
1038
- else
1039
-
1040
- MODE = 'r'
1041
-
1042
- @@pattern_get_attrs_map = Regexp.new(GET_ATTRS_MAP,nil,E_UTF8)
1043
-
1044
- @@pattern_clean1 = Regexp.new(CLEAN_1,nil,E_UTF8)
1045
- @@pattern_clean2 = Regexp.new(CLEAN_2,nil,E_UTF8)
1046
- end
1047
-
1048
1086
  #BRAC_OPEN_1 = "\\\("
1049
1087
  #BRAC_OPEN_2 = "\\\\\\("
1050
1088
  #BRAC_CLOSE_1 = "\\\)"
@@ -1082,11 +1120,29 @@ module Meteor
1082
1120
 
1083
1121
  #@@pattern_sub_regex1 = Regexp.new(SUB_REGEX1)
1084
1122
 
1123
+ if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
1124
+ MODE_UTF8 = 'r:UTF-8'
1125
+ MODE_BF = 'r:'
1126
+ MODE_AF = ':utf-8'
1127
+
1128
+ @@pattern_get_attrs_map = Regexp.new(GET_ATTRS_MAP)
1129
+
1130
+ @@pattern_clean1 = Regexp.new(CLEAN_1)
1131
+ @@pattern_clean2 = Regexp.new(CLEAN_2)
1132
+ else
1133
+
1134
+ MODE = 'r'
1135
+
1136
+ @@pattern_get_attrs_map = Regexp.new(GET_ATTRS_MAP)
1137
+
1138
+ @@pattern_clean1 = Regexp.new(CLEAN_1)
1139
+ @@pattern_clean2 = Regexp.new(CLEAN_2)
1140
+ end
1141
+
1085
1142
  #
1086
1143
  # イニシャライザ
1087
- # @param [Array] args 引数配列
1088
1144
  #
1089
- def initialize(*args)
1145
+ def initialize
1090
1146
  #親要素
1091
1147
  #@parent = nil;
1092
1148
 
@@ -1141,19 +1197,17 @@ module Meteor
1141
1197
 
1142
1198
  #
1143
1199
  # ドキュメントを取得する
1144
- #
1145
1200
  # @return [String] ドキュメント
1146
1201
  #
1147
1202
  def document
1148
1203
  @root.document
1149
1204
  end
1150
1205
 
1151
- attr_accessor :element_cache
1152
- attr_accessor :doc_type
1206
+ attr_accessor :element_cache #[Hash] 要素キャッシュ
1207
+ attr_accessor :doc_type #[String] ドキュメントタイプ
1153
1208
 
1154
1209
  #
1155
1210
  # 文字エンコーディングをセットする
1156
- #
1157
1211
  # @param [String] enc 文字エンコーディング
1158
1212
  #
1159
1213
  def character_encoding=(enc)
@@ -1161,8 +1215,7 @@ module Meteor
1161
1215
  end
1162
1216
 
1163
1217
  #
1164
- # 文字エンコーディングを取得する
1165
- #
1218
+ # 文字エンコーディングを取得する
1166
1219
  # @param [String] 文字エンコーディング
1167
1220
  #
1168
1221
  def character_encoding
@@ -1171,7 +1224,6 @@ module Meteor
1171
1224
 
1172
1225
  #
1173
1226
  # ルート要素を取得する
1174
- #
1175
1227
  # @return [Meteor::RootElement] ルート要素
1176
1228
  #
1177
1229
  def root_element
@@ -1180,7 +1232,6 @@ module Meteor
1180
1232
 
1181
1233
  #
1182
1234
  # ファイルを読み込み、パーサにセットする
1183
- #
1184
1235
  # @param [String] filePath 入力ファイルの絶対パス
1185
1236
  # @param [String] encoding 入力ファイルの文字コード
1186
1237
  #
@@ -1191,7 +1242,8 @@ module Meteor
1191
1242
  #ファイルのオープン
1192
1243
  if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
1193
1244
  if ParserFactory::ENC_UTF8.eql?(encoding) then
1194
- io = File.open(file_path,MODE_BF << encoding)
1245
+ #io = File.open(file_path,MODE_BF << encoding)
1246
+ io = File.open(file_path,MODE_UTF8)
1195
1247
  else
1196
1248
  io = File.open(file_path,MODE_BF << encoding << MODE_AF)
1197
1249
  end
@@ -1203,8 +1255,8 @@ module Meteor
1203
1255
  io = open(file_path,MODE)
1204
1256
  @root.document = io.read
1205
1257
  #@root.document = @root.document.kconv(get_encoding(), Kconv.guess(@root.document))
1206
- #enc = Kconv.guess(@root.document)
1207
- enc = get_encoding
1258
+ enc = Kconv.guess(@root.document)
1259
+ #enc = get_encoding
1208
1260
  if !Kconv::UTF8.equal?(enc) then
1209
1261
  @root.document = @root.document.kconv(Kconv::UTF8, enc)
1210
1262
  end
@@ -1224,39 +1276,59 @@ module Meteor
1224
1276
  # e.printStackTrace();
1225
1277
  # this.setDocument(EMPTY);
1226
1278
  #}
1227
-
1279
+ #
1280
+ #def get_encoding()
1281
+ # case @character_encoding
1282
+ # when 'UTF-8','UTF8','u','U'
1283
+ # @encoding = 'UTF8'
1284
+ # Kconv::UTF8
1285
+ # when 'ISO-2022-JP','JIS'
1286
+ # Kconv::JIS
1287
+ # when 'Shift_JIS','SJIS','s','S'
1288
+ # @encoding = 'SJIS'
1289
+ # Kconv::SJIS
1290
+ # when 'EUC-JP','EUC','e','E'
1291
+ # @encoding = 'EUC'
1292
+ # Kconv::EUC
1293
+ # when 'ASCII'
1294
+ # Kconv::ASCII
1295
+ # #when "UTF-16"
1296
+ # # return KConv::UTF16
1297
+ # else
1298
+ # Kconv::UTF8
1299
+ # end
1300
+ #end
1301
+ #private :get_encoding
1228
1302
  end
1229
1303
 
1230
- #if RUBY_VERSION < RUBY_VERSION_1_9_0 then
1231
- def get_encoding()
1232
- case @character_encoding
1233
- when 'UTF-8','UTF8','u','U'
1234
- @encoding = 'UTF8'
1235
- Kconv::UTF8
1236
- when 'ISO-2022-JP','JIS'
1237
- Kconv::JIS
1238
- when 'Shift_JIS','SJIS','s','S'
1239
- @encoding = 'SJIS'
1240
- Kconv::SJIS
1241
- when 'EUC-JP','EUC','e','E'
1242
- @encoding = 'EUC'
1243
- Kconv::EUC
1244
- when 'ASCII'
1245
- Kconv::ASCII
1246
- #when "UTF-16"
1247
- # return KConv::UTF16
1248
- else
1249
- Kconv::UTF8
1250
- end
1251
- end
1252
- private :get_encoding
1253
- #end
1254
1304
 
1255
1305
  #
1256
1306
  # 要素を取得する
1257
- #
1258
- # @param [Array] args 引数配列
1259
- # @return [Meteor::Element] 要素
1307
+ # @overload def element(elm_name)
1308
+ # @param [String] elm_name 要素名
1309
+ # @return [Meteor::Element] 要素
1310
+ # @overload def element(elm_name,attr_name,attr_value)
1311
+ # @param [String] elm_name 要素名
1312
+ # @param [String] attr_name 属性名
1313
+ # @param [String] attr_value 属性値
1314
+ # @return [Meteor::Element] 要素
1315
+ # @overload def element(attr_name,attr_value)
1316
+ # @param [String] attr_name 属性名
1317
+ # @param [String] attr_value 属性値
1318
+ # @return [Meteor::Element] 要素
1319
+ # @overload def element(elm_name,attr_name1,attr_value1,attr_name2,attr_value2)
1320
+ # @param [String] elm_name 要素の名前
1321
+ # @param [String] attr_name1 属性名1
1322
+ # @param [String] attr_value1 属性値2
1323
+ # @param [String] attr_name2 属性名2
1324
+ # @param [String] attr_value2 属性値2
1325
+ # @return [Meteor::Element] 要素
1326
+ # @overload def element(attr_name1,attr_value1,attr_name2,attr_value2)
1327
+ # @param [String] attr_name1 属性名1
1328
+ # @param [String] attr_value1 属性値2
1329
+ # @param [String] attr_name2 属性名2
1330
+ # @param [String] attr_value2 属性値2
1331
+ # @return [Meteor::Element] 要素
1260
1332
  #
1261
1333
  def element(*args)
1262
1334
  case args.length
@@ -1397,7 +1469,6 @@ module Meteor
1397
1469
 
1398
1470
  #
1399
1471
  # 要素名と属性で検索し、要素を取得する
1400
- #
1401
1472
  # @param [String] elm_name 要素名
1402
1473
  # @param [String] attrName 属性名
1403
1474
  # @param [String] attr_value 属性値
@@ -1580,7 +1651,6 @@ module Meteor
1580
1651
 
1581
1652
  #
1582
1653
  # 属性(属性名="属性値")で検索し、要素を取得する
1583
- #
1584
1654
  # @param [String] attr_name 属性名
1585
1655
  # @param [String] attr_value 属性値
1586
1656
  # @return [Meteor::Element] 要素
@@ -1818,7 +1888,6 @@ module Meteor
1818
1888
 
1819
1889
  #
1820
1890
  # 属性1・属性2(属性名="属性値")で検索し、要素を取得する
1821
- #
1822
1891
  # @param [String] attr_name1 属性名1
1823
1892
  # @param [String] attr_value1 属性値1
1824
1893
  # @param [String] attr_name2 属性名2
@@ -2049,26 +2118,30 @@ module Meteor
2049
2118
  private :create_element_pattern
2050
2119
 
2051
2120
  #
2052
- # 要素の属性をセットする or 属性の値を取得する
2053
- #
2054
- # @param [Array] args 引数配列
2055
- # @return [String] 属性値
2121
+ # @overload def attribute(elm,attr_name,attr_value)
2122
+ # 要素の属性をセットする
2123
+ # @param [Meteor::Element] elm 要素
2124
+ # @param [String] attr_name 属性名
2125
+ # @param [String,true,false] attr_value 属性値
2126
+ # @return [Meteor::Element] 要素
2127
+ # @overload def attribute(elm,attr_name)
2128
+ # 要素の属性値を取得する
2129
+ # @param [Meteor::Element] elm 要素
2130
+ # @param [String] attr_name 属性名
2131
+ # @return [String] 属性値
2056
2132
  #
2057
2133
  def attribute(*args)
2058
2134
  case args.length
2059
2135
  #when ONE
2060
2136
  # get_attribute_value_1(args[0])
2061
2137
  when TWO
2062
- if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(String) then
2063
- get_attribute_value_2(args[0],args[1])
2064
- #elsif args[0].kind_of?(String) && args[1].kind_of?(String) then
2065
- # set_attribute_2(args[0],args[1])
2066
- elsif args[0].kind_of?(Meteor::Element) && args[1].kind_of?(Meteor::AttributeMap) then
2067
- args[0].document_sync = true
2068
- set_attribute_2_m(args[0],args[1])
2069
- else
2070
- raise ArgumentError
2071
- end
2138
+ #if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(String) then
2139
+ get_attribute_value(args[0],args[1])
2140
+ #elsif args[0].kind_of?(String) && args[1].kind_of?(String) then
2141
+ # set_attribute_2(args[0],args[1])
2142
+ #else
2143
+ # raise ArgumentError
2144
+ #end
2072
2145
  when THREE
2073
2146
  args[0].document_sync = true
2074
2147
  set_attribute_3(args[0],args[1],args[2])
@@ -2079,10 +2152,10 @@ module Meteor
2079
2152
 
2080
2153
  #
2081
2154
  # 要素の属性を編集する
2082
- #
2083
2155
  # @param [Meteor::Element] elm 要素
2084
2156
  # @param [String] attr_name 属性名
2085
- # @param [String,TrueClass,FalseClass] attr_value 属性値
2157
+ # @param [String,true,false] attr_value 属性値
2158
+ # @return [Meteor::Element] 要素
2086
2159
  #
2087
2160
  def set_attribute_3(elm,attr_name,attr_value)
2088
2161
  if !elm.cx then
@@ -2137,87 +2210,19 @@ module Meteor
2137
2210
  #elm.attributes << SPACE << attr_name << ATTR_EQ << @_attr_value << DOUBLE_QUATATION
2138
2211
  elm.attributes << " #{attr_name}=\"#{@_attr_value}\""
2139
2212
  end
2140
-
2141
- end
2142
- private :edit_attributes_
2143
-
2144
- def edit_document_1(elm)
2145
- edit_document_2(elm,TAG_CLOSE3)
2146
- end
2147
- private :edit_document_1
2148
-
2149
- def edit_document_2(elm,closer)
2150
- if !elm.cx then
2151
- @_attributes = elm.attributes
2152
- #replace2regex(@_attributes)
2153
-
2154
- if elm.empty then
2155
- #内容あり要素の場合
2156
- @_content = elm.mixed_content
2157
- ##replace2regex(@_content)
2158
- #if elm.origin then
2159
- # replace4regex(@_content)
2160
- #else
2161
- # replace2regex(@_content)
2162
- #end
2163
-
2164
- elm.document = '' << TAG_OPEN << elm.name << @_attributes << TAG_CLOSE << @_content << TAG_OPEN3 << elm.name << TAG_CLOSE
2165
- #elm.document = "<#{elm.name}#{@_attributes}>#{@_content}</#{elm.name}>"
2166
- else
2167
- #空要素の場合
2168
- elm.document = '' << TAG_OPEN << elm.name << @_attributes << closer
2169
- end
2170
- else
2171
- @_content = elm.mixed_content
2172
- #if elm.origin then
2173
- # replace4regex(@_content)
2174
- #else
2175
- # replace2regex(@_content)
2176
- #end
2177
-
2178
- #elm.document = '' << SET_CX_1 << elm.name << SPACE << elm.attributes << SET_CX_2
2179
- #elm.document << @_content << SET_CX_3 << elm.name << SET_CX_4
2180
- elm.document = "<!-- @#{elm.name} #{elm.attributes}-->#{@_content}<!-- /@#{elm.name} -->"
2181
- end
2182
-
2183
- #タグ置換
2184
- @pattern = Meteor::Core::Util::PatternCache.get(elm.pattern)
2185
- @root.document.sub!(@pattern,elm.document)
2186
2213
  end
2187
- private :edit_document_2
2188
-
2189
- #def edit_pattern_(elm)
2190
- #
2191
- # elm.arguments.map.each do |name, attr|
2192
- # if attr.changed then
2193
- # @_attr_value = escape_regex(attr.value)
2194
- # ##replace2regex(@_attr_value)
2195
- # #@pattern_cc = '' << name << SET_ATTR_1
2196
- # @pattern_cc = "#{attr.name}=\"[^\"]*\""
2197
- # @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
2198
- # #elm.pattern.gsub!(@pattern,'' << name << ATTR_EQ << @_attr_value << DOUBLE_QUATATION)
2199
- # elm.pattern.sub!(@pattern, "#{attr.name}=\"#{@_attr_value}\"")
2200
- # elsif attr.removed then
2201
- # @pattern_cc = '' << name << SET_ATTR_1
2202
- # #@pattern_cc = "#{attr_name}=\"[^\"]*\""
2203
- # @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
2204
- # elm.pattern.gsub!(@pattern, EMPTY)
2205
- # end
2206
- # end
2207
- #end
2208
- #private :edit_pattern_
2214
+ private :edit_attributes_
2209
2215
 
2210
2216
  #
2211
- # 要素の属性値を取得する
2212
- #
2217
+ # 要素の属性値を取得する
2213
2218
  # @param [Meteor::Element] elm 要素
2214
2219
  # @param [String] attr_name 属性名
2215
2220
  # @return [String] 属性値
2216
2221
  #
2217
- def get_attribute_value_2(elm,attr_name)
2222
+ def get_attribute_value(elm,attr_name)
2218
2223
  get_attribute_value_(elm,attr_name)
2219
2224
  end
2220
- private :get_attribute_value_2
2225
+ private :get_attribute_value
2221
2226
 
2222
2227
  def get_attribute_value_(elm,attr_name)
2223
2228
 
@@ -2235,27 +2240,36 @@ module Meteor
2235
2240
  private :get_attribute_value_
2236
2241
 
2237
2242
  #
2238
- # 属性マップを取得する
2239
- #
2240
- # @param [Array] args 引数配列
2241
- # @return [Meteor::AttributeMap] 属性マップ
2243
+ # @overload def attribute_map(elm,attr_map)
2244
+ # 属性マップをセットする
2245
+ # @param [Meteor::Element] elm 要素
2246
+ # @param [Meteor::AttributeMap] attrMap 属性マップ
2247
+ # @return [Meteor::Element] 要素
2248
+ # @overload def attribute_map(elm)
2249
+ # 属性マップを取得する
2250
+ # @param [Meteor::Element] elm 要素
2251
+ # @return [Meteor::AttributeMap] 属性マップ
2242
2252
  #
2243
2253
  def attribute_map(*args)
2244
2254
  case args.length
2245
2255
  when ONE
2246
- get_attribute_map_1(args[0])
2256
+ get_attribute_map(args[0])
2257
+ when TWO
2258
+ #if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(Meteor::AttributeMap) then
2259
+ args[0].document_sync = true
2260
+ set_attribute_map(args[0],args[1])
2261
+ #end
2247
2262
  else
2248
2263
  raise ArgumentError
2249
2264
  end
2250
2265
  end
2251
2266
 
2252
2267
  #
2253
- # 属性マップを取得する
2254
- #
2268
+ # 属性マップを取得する
2255
2269
  # @param [Meteor::Element] elm 要素
2256
2270
  # @return [Meteor::AttributeMap] 属性マップ
2257
2271
  #
2258
- def get_attribute_map_1(elm)
2272
+ def get_attribute_map(elm)
2259
2273
  attrs = Meteor::AttributeMap.new
2260
2274
 
2261
2275
  elm.attributes.scan(@@pattern_get_attrs_map) do |a, b|
@@ -2265,15 +2279,15 @@ module Meteor
2265
2279
 
2266
2280
  attrs
2267
2281
  end
2268
- private :get_attribute_map_1
2282
+ private :get_attribute_map
2269
2283
 
2270
2284
  #
2271
- # 要素の属性を編集する
2272
- #
2285
+ # 要素の属性マップをセットする
2273
2286
  # @param [Meteor::Element] elm 要素
2274
2287
  # @param [Meteor::AttributeMap] attrMap 属性マップ
2288
+ # @return [Meteor::Element] 要素
2275
2289
  #
2276
- def set_attribute_2_m(elm,attr_map)
2290
+ def set_attribute_map(elm,attr_map)
2277
2291
  if !elm.cx then
2278
2292
  attr_map.map.each do |name, attr|
2279
2293
  if attr_map.changed(name) then
@@ -2285,13 +2299,24 @@ module Meteor
2285
2299
  end
2286
2300
  elm
2287
2301
  end
2288
- private :set_attribute_2_m
2302
+ private :set_attribute_map
2289
2303
 
2290
2304
  #
2291
- # 要素の内容をセットする or 内容を取得する
2292
- #
2293
- # @param [Array] args 引数配列
2294
- # @return [String] 内容
2305
+ # @overload def content(elm,content,entity_ref=true)
2306
+ # 要素の内容をセットする
2307
+ # @param [Meteor::Element] elm 要素
2308
+ # @param [String] content 要素の内容
2309
+ # @param [true,false] entity_ref エンティティ参照フラグ
2310
+ # @return [Meteor::Element] 要素
2311
+ # @overload def content(elm,content)
2312
+ # 要素の内容をセットする
2313
+ # @param [Meteor::Element] elm 要素
2314
+ # @param [String] content 要素の内容
2315
+ # @return [Meteor::Element] 要素
2316
+ # @overload def content(elm)
2317
+ # 要素の内容を取得する
2318
+ # @param [Meteor::Element] elm 要素
2319
+ # @return [String] 内容
2295
2320
  #
2296
2321
  def content(*args)
2297
2322
  case args.length
@@ -2304,7 +2329,7 @@ module Meteor
2304
2329
  when TWO
2305
2330
  #if args[0].kind_of?(Meteor::Element) && args[1].kind_of?(String) then
2306
2331
  args[0].document_sync = true
2307
- set_content_2_s(args[0],args[1])
2332
+ set_content_2(args[0],args[1])
2308
2333
  #else
2309
2334
  # raise ArgumentError
2310
2335
  #end
@@ -2318,10 +2343,10 @@ module Meteor
2318
2343
 
2319
2344
  #
2320
2345
  # 要素の内容をセットする
2321
- #
2322
2346
  # @param [Meteor::Element] elm 要素
2323
2347
  # @param [String] content 要素の内容
2324
- # @param [TrueClass,FalseClass] entityRef エンティティ参照フラグ
2348
+ # @param [true,false] entityRef エンティティ参照フラグ
2349
+ # @return [Meteor::Element] 要素
2325
2350
  #
2326
2351
  def set_content_3(elm,content,entity_ref=true)
2327
2352
 
@@ -2334,22 +2359,22 @@ module Meteor
2334
2359
  private :set_content_3
2335
2360
 
2336
2361
  #
2337
- # 要素の内容を編集する
2338
- #
2362
+ # 要素の内容をセットする
2339
2363
  # @param [Meteor::Element] elm 要素
2340
2364
  # @param [String] content 要素の内容
2365
+ # @return [Meteor::Element] 要素
2341
2366
  #
2342
- def set_content_2_s(elm,content)
2367
+ def set_content_2(elm,content)
2343
2368
  #set_content_3(elm, content)
2344
2369
  elm.mixed_content = escape_content(content,elm)
2345
2370
  elm
2346
2371
  end
2347
- private :set_content_2_s
2372
+ private :set_content_2
2348
2373
 
2349
2374
  #
2350
- # 要素の内容を取得する
2351
- #
2375
+ # 要素の内容を取得する
2352
2376
  # @param [Meteor::Element] elm 要素
2377
+ # @return [String] 内容
2353
2378
  #
2354
2379
  def get_content_1(elm)
2355
2380
  if !elm.cx then
@@ -2366,27 +2391,11 @@ module Meteor
2366
2391
 
2367
2392
  #
2368
2393
  # 要素の属性を消す
2369
- #
2370
- # @param [Array] args 引数配列
2371
- #
2372
- def remove_attribute(*args)
2373
- case args.length
2374
- #when ONE
2375
- # remove_attribute_1(args[0])
2376
- when TWO
2377
- remove_attribute_2(args[0],args[1])
2378
- else
2379
- raise ArgumentError
2380
- end
2381
- end
2382
-
2383
- #
2384
- # 要素の属性を消す
2385
- #
2386
2394
  # @param [Meteor::Element] elm 要素
2387
2395
  # @param [String] attr_name 属性名
2396
+ # @return [Meteor::Element] 要素
2388
2397
  #
2389
- def remove_attribute_2(elm,attr_name)
2398
+ def remove_attribute(elm,attr_name)
2390
2399
  if !elm.cx then
2391
2400
 
2392
2401
  elm.document_sync = true
@@ -2397,12 +2406,11 @@ module Meteor
2397
2406
  # elm.arguments.delete(attr_name)
2398
2407
  # end
2399
2408
  #end
2400
-
2401
2409
  end
2402
2410
 
2403
2411
  elm
2404
2412
  end
2405
- private :remove_attribute_2
2413
+ private :remove_attribute
2406
2414
 
2407
2415
  def remove_attributes_(elm,attr_name)
2408
2416
  #属性検索用パターン
@@ -2410,23 +2418,27 @@ module Meteor
2410
2418
  #属性の置換
2411
2419
  elm.attributes.sub!(@pattern,EMPTY)
2412
2420
  end
2413
- private :remove_attributes_
2421
+ private :remove_attributes_
2414
2422
 
2415
2423
  #
2416
2424
  # 要素を消す
2417
- #
2418
2425
  # @param [Meteor::Element] elm 要素
2419
2426
  #
2420
2427
  def remove_element(elm)
2421
2428
  replace(elm,EMPTY)
2422
2429
  elm.usable = false
2430
+ nil
2423
2431
  end
2424
2432
 
2425
2433
  #
2426
2434
  # CX(コメント拡張)タグを取得する
2427
- #
2428
- # @param [Array] args 引数配列
2429
- # @return [Meteor::Element] 要素
2435
+ # @overload def cxtag(elm_name,id)
2436
+ # @param [String] elm_name 要素名
2437
+ # @param [String] id ID属性値
2438
+ # @return [Meteor::Element] 要素
2439
+ # @overload def cxtag(id)
2440
+ # @param [String] id ID属性値
2441
+ # @return [Meteor::Element] 要素
2430
2442
  #
2431
2443
  def cxtag(*args)
2432
2444
  case args.length
@@ -2447,7 +2459,6 @@ module Meteor
2447
2459
 
2448
2460
  #
2449
2461
  # 要素名とID属性で検索し、CX(コメント拡張)タグを取得する
2450
- #
2451
2462
  # @param [String] elm_name 要素名
2452
2463
  # @param [String] id ID属性値
2453
2464
  # @return [Meteor::Element] 要素
@@ -2491,7 +2502,6 @@ module Meteor
2491
2502
 
2492
2503
  #
2493
2504
  # ID属性で検索し、CX(コメント拡張)タグを取得する
2494
- #
2495
2505
  # @param [String] id ID属性値
2496
2506
  # @return [Meteor::Element] 要素
2497
2507
  #
@@ -2516,7 +2526,6 @@ module Meteor
2516
2526
 
2517
2527
  #
2518
2528
  # 要素を置換する
2519
- #
2520
2529
  # @param [Meteor::Element] elm 要素
2521
2530
  # @param [String] replaceDocument 置換文字列
2522
2531
  #
@@ -2554,12 +2563,56 @@ module Meteor
2554
2563
  end
2555
2564
  protected :reflect
2556
2565
 
2566
+ def edit_document_1(elm)
2567
+ edit_document_2(elm,TAG_CLOSE3)
2568
+ end
2569
+ private :edit_document_1
2570
+
2571
+ def edit_document_2(elm,closer)
2572
+ if !elm.cx then
2573
+ @_attributes = elm.attributes
2574
+ #replace2regex(@_attributes)
2575
+
2576
+ if elm.empty then
2577
+ #内容あり要素の場合
2578
+ @_content = elm.mixed_content
2579
+ ##replace2regex(@_content)
2580
+ #if elm.origin then
2581
+ # replace4regex(@_content)
2582
+ #else
2583
+ # replace2regex(@_content)
2584
+ #end
2585
+
2586
+ elm.document = '' << TAG_OPEN << elm.name << @_attributes << TAG_CLOSE << @_content << TAG_OPEN3 << elm.name << TAG_CLOSE
2587
+ #elm.document = "<#{elm.name}#{@_attributes}>#{@_content}</#{elm.name}>"
2588
+ else
2589
+ #空要素の場合
2590
+ elm.document = '' << TAG_OPEN << elm.name << @_attributes << closer
2591
+ end
2592
+ else
2593
+ @_content = elm.mixed_content
2594
+ #if elm.origin then
2595
+ # replace4regex(@_content)
2596
+ #else
2597
+ # replace2regex(@_content)
2598
+ #end
2599
+
2600
+ #elm.document = '' << SET_CX_1 << elm.name << SPACE << elm.attributes << SET_CX_2
2601
+ #elm.document << @_content << SET_CX_3 << elm.name << SET_CX_4
2602
+ elm.document = "<!-- @#{elm.name} #{elm.attributes}-->#{@_content}<!-- /@#{elm.name} -->"
2603
+ end
2604
+
2605
+ #タグ置換
2606
+ @pattern = Meteor::Core::Util::PatternCache.get(elm.pattern)
2607
+ @root.document.sub!(@pattern,elm.document)
2608
+ end
2609
+ private :edit_document_2
2610
+
2557
2611
  #
2558
- # 出力する
2612
+ # 反映する
2559
2613
  #
2560
2614
  def flush
2561
-
2562
- #puts @root.document
2615
+
2563
2616
  if @root.element then
2564
2617
  if @root.element.origin.mono then
2565
2618
  if @root.element.origin.cx then
@@ -2678,20 +2731,6 @@ module Meteor
2678
2731
  end
2679
2732
  private :escape_regex
2680
2733
 
2681
- #def replace2regex(str)
2682
- # #if str.include?(EN_1) then
2683
- # # str.gsub!(@@pattern_sub_regex1,SUB_REGEX2)
2684
- # #end
2685
- #end
2686
- #private :replace2regex
2687
-
2688
- #def replace4regex(str)
2689
- # #if str.include?(EN_1) then
2690
- # # str.gsub!(@@pattern_sub_regex1,SUB_REGEX3)
2691
- # #end
2692
- #end
2693
- #private :replace4regex
2694
-
2695
2734
  #
2696
2735
  # @param [String] content 入力文字列
2697
2736
  # @return [String] 出力文字列
@@ -2747,7 +2786,6 @@ module Meteor
2747
2786
  end
2748
2787
  private :is_match
2749
2788
 
2750
-
2751
2789
  def is_match_r(regex,str)
2752
2790
  if regex.match(str.downcase) then
2753
2791
  true
@@ -2778,19 +2816,53 @@ module Meteor
2778
2816
  private :is_match_s
2779
2817
 
2780
2818
  def create(pif)
2781
- if pif.instance_of?(Meteor::Core::Html::ParserImpl) then
2819
+ case pif.doc_type
2820
+ when Parser::HTML then
2782
2821
  pif = Meteor::Core::Html::ParserImpl.new
2783
- elsif pif.instance_of?(Meteor::Core::Xhtml::ParserImpl) then
2822
+ when Parser::XHTML then
2784
2823
  pif = Meteor::Core::Xhtml::ParserImpl.new
2785
- elsif pif.instance_of?(Meteor::Core::Xml::ParserImpl) then
2824
+ when Parser::XML then
2786
2825
  pif = Meteor::Core::Xml::ParserImpl.new
2787
2826
  else
2788
2827
  pif = nil
2789
2828
  end
2790
-
2791
2829
  end
2792
2830
  private :create
2793
2831
 
2832
+ #def edit_pattern_(elm)
2833
+ #
2834
+ # elm.arguments.map.each do |name, attr|
2835
+ # if attr.changed then
2836
+ # @_attr_value = escape_regex(attr.value)
2837
+ # ##replace2regex(@_attr_value)
2838
+ # #@pattern_cc = '' << name << SET_ATTR_1
2839
+ # @pattern_cc = "#{attr.name}=\"[^\"]*\""
2840
+ # @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
2841
+ # #elm.pattern.gsub!(@pattern,'' << name << ATTR_EQ << @_attr_value << DOUBLE_QUATATION)
2842
+ # elm.pattern.sub!(@pattern, "#{attr.name}=\"#{@_attr_value}\"")
2843
+ # elsif attr.removed then
2844
+ # @pattern_cc = '' << name << SET_ATTR_1
2845
+ # #@pattern_cc = "#{attr_name}=\"[^\"]*\""
2846
+ # @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
2847
+ # elm.pattern.gsub!(@pattern, EMPTY)
2848
+ # end
2849
+ # end
2850
+ #end
2851
+ #private :edit_pattern_
2852
+
2853
+ #def replace2regex(str)
2854
+ # #if str.include?(EN_1) then
2855
+ # # str.gsub!(@@pattern_sub_regex1,SUB_REGEX2)
2856
+ # #end
2857
+ #end
2858
+ #private :replace2regex
2859
+
2860
+ #def replace4regex(str)
2861
+ # #if str.include?(EN_1) then
2862
+ # # str.gsub!(@@pattern_sub_regex1,SUB_REGEX3)
2863
+ # #end
2864
+ #end
2865
+ #private :replace4regex
2794
2866
  end
2795
2867
 
2796
2868
  module Util
@@ -2807,83 +2879,108 @@ module Meteor
2807
2879
  def initialize
2808
2880
  end
2809
2881
 
2882
+
2883
+ #
2884
+ # パターンを取得する
2885
+ # @overload def get(regex)
2886
+ # @param [String] regex 正規表現
2887
+ # @return [Regexp] パターン
2888
+ # @overload def get(regex,option)
2889
+ # @param [String] regex 正規表現
2890
+ # @param [Fixnum] option オプション
2891
+ # @return [Regexp] パターン
2892
+ #
2810
2893
  def self.get(*args)
2811
2894
  case args.length
2812
2895
  when ONE
2813
- get_1(args[0])
2896
+ #get_1(args[0])
2897
+ if !@@regex_cache[args[0].to_sym] then
2898
+ #if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
2899
+ @@regex_cache[args[0].to_sym] = Regexp.new(args[0], Regexp::MULTILINE)
2900
+ #else
2901
+ # @@regex_cache[args[0].to_sym] = Regexp.new(args[0], Regexp::MULTILINE,E_UTF8)
2902
+ #end
2903
+ end
2904
+ @@regex_cache[args[0].to_sym]
2814
2905
  when TWO
2815
- get_2(args[0], args[1])
2906
+ #get_2(args[0], args[1])
2907
+ if !@@regex_cache[args[0].to_sym] then
2908
+ #if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
2909
+ @@regex_cache[args[0].to_sym] = Regexp.new(args[0], args[1])
2910
+ #else
2911
+ # @@regex_cache[args[0].to_sym] = Regexp.new(args[0], args[1],E_UTF8)
2912
+ #end
2913
+ end
2914
+ @@regex_cache[args[0].to_sym]
2816
2915
  else
2817
2916
  raise ArgumentError
2818
2917
  end
2819
2918
  end
2820
2919
 
2920
+ ##
2921
+ ## パターンを取得する
2922
+ ## @param [String] regex 正規表現
2923
+ ## @return [Regexp] パターン
2924
+ ##
2925
+ #def self.get_1(regex)
2926
+ # ##pattern = @@regex_cache[regex]
2927
+ # ##
2928
+ # ##if pattern == nil then
2929
+ # #if regex.kind_of?(String) then
2930
+ # if !@@regex_cache[regex.to_sym] then
2931
+ # #pattern = Regexp.new(regex)
2932
+ # #@@regex_cache[regex] = pattern
2933
+ # if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
2934
+ # @@regex_cache[regex.to_sym] = Regexp.new(regex, Regexp::MULTILINE)
2935
+ # else
2936
+ # @@regex_cache[regex.to_sym] = Regexp.new(regex, Regexp::MULTILINE,E_UTF8)
2937
+ # end
2938
+ # end
2821
2939
  #
2822
- # パターンを取得する
2823
- # @param [String] regex 正規表現
2824
- # @return [Regexp] パターン
2825
- #
2826
- def self.get_1(regex)
2827
- #pattern = @@regex_cache[regex]
2828
- #
2829
- #if pattern == nil then
2830
- if regex.kind_of?(String) then
2831
- if !@@regex_cache[regex.to_sym] then
2832
- #pattern = Regexp.new(regex)
2833
- #@@regex_cache[regex] = pattern
2834
- if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
2835
- @@regex_cache[regex.to_sym] = Regexp.new(regex, Regexp::MULTILINE)
2836
- else
2837
- @@regex_cache[regex.to_sym] = Regexp.new(regex, Regexp::MULTILINE,E_UTF8)
2838
- end
2839
- end
2840
-
2841
- #return pattern
2842
- @@regex_cache[regex.to_sym]
2843
- elsif regex.kind_of?(Symbol) then
2844
- if !@@regex_cache[regex] then
2845
- if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
2846
- @@regex_cache[regex] = Regexp.new(regex.to_s, Regexp::MULTILINE)
2847
- else
2848
- @@regex_cache[regex] = Regexp.new(regex.to_s, Regexp::MULTILINE,E_UTF8)
2849
- end
2850
- end
2851
-
2852
- @@regex_cache[regex]
2853
- end
2854
- end
2940
+ # #return pattern
2941
+ # @@regex_cache[regex.to_sym]
2942
+ # ##elsif regex.kind_of?(Symbol) then
2943
+ # ## if !@@regex_cache[regex] then
2944
+ # ## if RUBY_VERSION >= RUBY_VERSION_1_9_0 then
2945
+ # ## @@regex_cache[regex.object_id] = Regexp.new(regex.to_s, Regexp::MULTILINE)
2946
+ # ## else
2947
+ # ## @@regex_cache[regex.object_id] = Regexp.new(regex.to_s, Regexp::MULTILINE,E_UTF8)
2948
+ # ## end
2949
+ # ## end
2950
+ # ##
2951
+ # ## @@regex_cache[regex]
2952
+ # #end
2953
+ #end
2855
2954
 
2955
+ ##
2956
+ ## パターンを取得する
2957
+ ## @param [String] regex 正規表現
2958
+ ## @param [Fixnum] option オプション
2959
+ ## @return [Regexp] パターン
2960
+ ##
2961
+ #def self.get_2(regex, option)
2962
+ # ##pattern = @@regex_cache[regex]
2963
+ # ##
2964
+ # ##if pattern == nil then
2965
+ # #if regex.kind_of?(String) then
2966
+ # if !@@regex_cache[regex.to_sym] then
2967
+ # #pattern = Regexp.new(regex)
2968
+ # #@@regex_cache[regex] = pattern
2969
+ # @@regex_cache[regex.to_sym] = Regexp.new(regex, option,E_UTF8)
2970
+ # end
2856
2971
  #
2857
- # パターンを取得する
2858
- # @param [String] regex 正規表現
2859
- # @return [Regexp] パターン
2860
- #
2861
- def self.get_2(regex, option)
2862
- #pattern = @@regex_cache[regex]
2863
- #
2864
- #if pattern == nil then
2865
- if regex.kind_of?(String) then
2866
- if !@@regex_cache[regex.to_sym] then
2867
- #pattern = Regexp.new(regex)
2868
- #@@regex_cache[regex] = pattern
2869
- @@regex_cache[regex.to_sym] = Regexp.new(regex, option,E_UTF8)
2870
- end
2871
-
2872
- #return pattern
2873
- @@regex_cache[regex.to_sym]
2874
- elsif regex.kind_of?(Symbol) then
2875
- if !@@regex_cache[regex] then
2876
- @@regex_cache[regex] = Regexp.new(regex.to_s, option,E_UTF8)
2877
- end
2878
-
2879
- @@regex_cache[regex]
2880
- end
2881
- end
2972
+ # #return pattern
2973
+ # @@regex_cache[regex.to_sym]
2974
+ # ##elsif regex.kind_of?(Symbol) then
2975
+ # ## if !@@regex_cache[regex] then
2976
+ # ## @@regex_cache[regex] = Regexp.new(regex.to_s, option,E_UTF8)
2977
+ # ## end
2978
+ # ##
2979
+ # ## @@regex_cache[regex]
2980
+ # #end
2981
+ #end
2882
2982
  end
2883
2983
 
2884
-
2885
- #if RUBY_VERSION < RUBY_VERSION_1_9_0 then
2886
-
2887
2984
  class OrderHash < Hash
2888
2985
 
2889
2986
  def initialize
@@ -2962,9 +3059,7 @@ module Meteor
2962
3059
  end
2963
3060
  return hash_tmp
2964
3061
  end
2965
- end
2966
-
2967
- #end
3062
+ end
2968
3063
 
2969
3064
  end
2970
3065
 
@@ -3094,46 +3189,51 @@ module Meteor
3094
3189
  @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
3095
3190
  @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
3096
3191
  @@pattern_get_attrs_map2 = Regexp.new(GET_ATTRS_MAP2)
3192
+
3193
+ #@@pattern_match_tag = Regexp.new(MATCH_TAG)
3194
+ #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
3097
3195
  else
3098
- @@pattern_selected_m = Regexp.new(SELECTED_M,nil,E_UTF8)
3099
- @@pattern_selected_r = Regexp.new(SELECTED_R,nil,E_UTF8)
3100
- @@pattern_checked_m = Regexp.new(CHECKED_M,nil,E_UTF8)
3101
- @@pattern_checked_r = Regexp.new(CHECKED_R,nil,E_UTF8)
3102
- @@pattern_disabled_m = Regexp.new(DISABLED_M,nil,E_UTF8)
3103
- @@pattern_disabled_r = Regexp.new(DISABLED_R,nil,E_UTF8)
3104
- @@pattern_readonly_m = Regexp.new(READONLY_M,nil,E_UTF8)
3105
- @@pattern_readonly_r = Regexp.new(READONLY_R,nil,E_UTF8)
3106
- @@pattern_multiple_m = Regexp.new(MULTIPLE_M,nil,E_UTF8)
3107
- @@pattern_multiple_r = Regexp.new(MULTIPLE_R,nil,E_UTF8)
3108
-
3109
- @@pattern_and_1 = Regexp.new(AND_1,nil,E_UTF8)
3110
- @@pattern_lt_1 = Regexp.new(LT_1,nil,E_UTF8)
3111
- @@pattern_gt_1 = Regexp.new(GT_1,nil,E_UTF8)
3112
- @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION,nil,E_UTF8)
3113
- @@pattern_space_1 = Regexp.new(SPACE,nil,E_UTF8)
3114
- @@pattern_br_1 = Regexp.new(BR_1,nil,E_UTF8)
3115
- @@pattern_lt_2 = Regexp.new(LT_2,nil,E_UTF8)
3116
- @@pattern_gt_2 = Regexp.new(GT_2,nil,E_UTF8)
3117
- @@pattern_dq_2 = Regexp.new(QO_2,nil,E_UTF8)
3118
- @@pattern_space_2 = Regexp.new(NBSP_2,nil,E_UTF8)
3119
- @@pattern_and_2 = Regexp.new(AND_2,nil,E_UTF8)
3120
- @@pattern_br_2 = Regexp.new(BR_2,nil,E_UTF8)
3121
-
3122
- @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE,nil,E_UTF8)
3123
- @@pattern_set_mono1 = Regexp.new(SET_MONO_1,nil,E_UTF8)
3124
- @@pattern_get_attrs_map2 = Regexp.new(GET_ATTRS_MAP2,nil,E_UTF8)
3125
- end
3196
+ @@pattern_selected_m = Regexp.new(SELECTED_M)
3197
+ @@pattern_selected_r = Regexp.new(SELECTED_R)
3198
+ @@pattern_checked_m = Regexp.new(CHECKED_M)
3199
+ @@pattern_checked_r = Regexp.new(CHECKED_R)
3200
+ @@pattern_disabled_m = Regexp.new(DISABLED_M)
3201
+ @@pattern_disabled_r = Regexp.new(DISABLED_R)
3202
+ @@pattern_readonly_m = Regexp.new(READONLY_M)
3203
+ @@pattern_readonly_r = Regexp.new(READONLY_R)
3204
+ @@pattern_multiple_m = Regexp.new(MULTIPLE_M)
3205
+ @@pattern_multiple_r = Regexp.new(MULTIPLE_R)
3206
+
3207
+ @@pattern_and_1 = Regexp.new(AND_1)
3208
+ @@pattern_lt_1 = Regexp.new(LT_1)
3209
+ @@pattern_gt_1 = Regexp.new(GT_1)
3210
+ @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION)
3211
+ @@pattern_space_1 = Regexp.new(SPACE)
3212
+ @@pattern_br_1 = Regexp.new(BR_1)
3213
+ @@pattern_lt_2 = Regexp.new(LT_2)
3214
+ @@pattern_gt_2 = Regexp.new(GT_2)
3215
+ @@pattern_dq_2 = Regexp.new(QO_2)
3216
+ @@pattern_space_2 = Regexp.new(NBSP_2)
3217
+ @@pattern_and_2 = Regexp.new(AND_2)
3218
+ @@pattern_br_2 = Regexp.new(BR_2)
3219
+
3220
+ @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
3221
+ @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
3222
+ @@pattern_get_attrs_map2 = Regexp.new(GET_ATTRS_MAP2)
3126
3223
 
3127
- #@@pattern_match_tag = Regexp.new(MATCH_TAG)
3128
- #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
3224
+ #@@pattern_match_tag = Regexp.new(MATCH_TAG)
3225
+ #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
3226
+ end
3129
3227
 
3130
3228
  #
3131
3229
  # イニシャライザ
3132
- #
3133
- # @param [Array] args 引数配列
3230
+ # @overload def initialize
3231
+ # @overload def initialize(ps)
3232
+ # @param [Meteor::Parser] ps パーサ
3134
3233
  #
3135
3234
  def initialize(*args)
3136
- super(args)
3235
+ super()
3236
+ @doc_type = Parser::HTML
3137
3237
  case args.length
3138
3238
  when ZERO
3139
3239
  initialize_0
@@ -3160,13 +3260,11 @@ module Meteor
3160
3260
  @root.hook_document = String.new(ps.root_element.hook_document)
3161
3261
  @root.content_type = String.new(ps.content_type);
3162
3262
  @root.kaigyo_code = ps.root_element.kaigyo_code
3163
- @doc_type = ps.doc_type
3164
3263
  end
3165
3264
  private :initialize_1
3166
3265
 
3167
3266
  #
3168
- # ドキュメントをパーサにセットする
3169
- #
3267
+ # ドキュメントをパーサにセットする
3170
3268
  # @param [String] document ドキュメント
3171
3269
  #
3172
3270
  def parse(document)
@@ -3175,8 +3273,7 @@ module Meteor
3175
3273
  end
3176
3274
 
3177
3275
  #
3178
- # ファイルを読み込み、パーサにセットする
3179
- #
3276
+ # ファイルを読み込み、パーサにセットする
3180
3277
  # @param [String] filePath ファイルパス
3181
3278
  # @param [String] encoding エンコーディング
3182
3279
  #
@@ -3198,9 +3295,9 @@ module Meteor
3198
3295
  end
3199
3296
  private :analyze_ml
3200
3297
 
3298
+ #
3201
3299
  # コンテントタイプを取得する
3202
- #
3203
- # @return [Streing]コンテントタイプ
3300
+ # @return [String]コンテントタイプ
3204
3301
  #
3205
3302
  def content_type
3206
3303
  @root.content_type
@@ -3249,7 +3346,6 @@ module Meteor
3249
3346
 
3250
3347
  #
3251
3348
  # 要素名で検索し、要素を取得する
3252
- #
3253
3349
  # @param [String] elm_name 要素名
3254
3350
  # @return [Meteor::Element] 要素
3255
3351
  #
@@ -3303,7 +3399,6 @@ module Meteor
3303
3399
 
3304
3400
  #
3305
3401
  # 要素名、属性(属性名="属性値")で検索し、要素を取得する
3306
- #
3307
3402
  # @param [String] elm_name 要素名
3308
3403
  # @param [String] attr_name 属性名
3309
3404
  # @param [String] attr_value 属性値
@@ -3366,8 +3461,7 @@ module Meteor
3366
3461
  private :element_without_3
3367
3462
 
3368
3463
  #
3369
- # 属性(属性名="属性値")で検索し、要素を取得する
3370
- #
3464
+ # 属性(属性名="属性値")で検索し、要素を取得する
3371
3465
  # @param [String] attr_name 属性名
3372
3466
  # @param [String] attr_value 属性値
3373
3467
  # @return [Meteor::Element] 要素
@@ -3394,13 +3488,12 @@ module Meteor
3394
3488
  private :element_2
3395
3489
 
3396
3490
  #
3397
- # 要素名と属性1・属性2(属性名="属性値")で検索し、要素を取得する
3398
- #
3491
+ # 要素名と属性1・属性2(属性名="属性値")で検索し、要素を取得する
3399
3492
  # @param [String] elm_name 要素名
3400
- # @param attr_name1 属性名1
3401
- # @param attr_value1 属性値1
3402
- # @param attr_name2 属性名2
3403
- # @param attr_value2 属性値2
3493
+ # @param [String] attr_name1 属性名1
3494
+ # @param [String] attr_value1 属性値1
3495
+ # @param [String] attr_name2 属性名2
3496
+ # @param [String] attr_value2 属性値2
3404
3497
  # @return [Meteor::Element] 要素
3405
3498
  #
3406
3499
  def element_5(elm_name,attr_name1,attr_value1,attr_name2,attr_value2)
@@ -3556,20 +3649,20 @@ module Meteor
3556
3649
 
3557
3650
  def get_attribute_value_(elm,attr_name)
3558
3651
  if is_match(SELECTED, attr_name) && is_match(OPTION,elm.name) then
3559
- get_attribute_value_2_r(elm,@@pattern_selected_m)
3560
- #get_attribute_value_2_r(elm,SELECTED_M)
3652
+ get_attribute_value_r(elm,@@pattern_selected_m)
3653
+ #get_attribute_value_r(elm,SELECTED_M)
3561
3654
  elsif is_match(MULTIPLE, attr_name) && is_match(SELECT,elm.name)
3562
- get_attribute_value_2_r(elm,@@pattern_multiple_m)
3563
- #get_attribute_value_2_r(elm,MULTIPLE_M)
3655
+ get_attribute_value_r(elm,@@pattern_multiple_m)
3656
+ #get_attribute_value_r(elm,MULTIPLE_M)
3564
3657
  elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name) then
3565
- get_attribute_value_2_r(elm,@@pattern_disabled_m)
3566
- #get_attribute_value_2_r(elm,DISABLED_M)
3658
+ get_attribute_value_r(elm,@@pattern_disabled_m)
3659
+ #get_attribute_value_r(elm,DISABLED_M)
3567
3660
  elsif is_match(CHECKED, attr_name) && is_match(INPUT,elm.name) && is_match(RADIO, get_type(elm)) then
3568
- get_attribute_value_2_r(elm,@@pattern_checked_m)
3569
- #get_attribute_value_2_r(elm,CHECKED_M)
3661
+ get_attribute_value_r(elm,@@pattern_checked_m)
3662
+ #get_attribute_value_r(elm,CHECKED_M)
3570
3663
  elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA,elm.name) || (is_match(INPUT,elm.name) && is_match(READONLY_TYPE, get_type(elm)))) then
3571
- get_attribute_value_2_r(elm,@@pattern_readonly_m)
3572
- #get_attribute_value_2_r(elm,READONLY_M)
3664
+ get_attribute_value_r(elm,@@pattern_readonly_m)
3665
+ #get_attribute_value_r(elm,READONLY_M)
3573
3666
  else
3574
3667
  super(elm,attr_name)
3575
3668
  end
@@ -3587,7 +3680,7 @@ module Meteor
3587
3680
  end
3588
3681
  private :get_type
3589
3682
 
3590
- def get_attribute_value_2_r(elm,match_p)
3683
+ def get_attribute_value_r(elm,match_p)
3591
3684
 
3592
3685
  @res = match_p.match(elm.attributes)
3593
3686
 
@@ -3597,7 +3690,7 @@ module Meteor
3597
3690
  FALSE
3598
3691
  end
3599
3692
  end
3600
- private :get_attribute_value_2_r
3693
+ private :get_attribute_value_r
3601
3694
 
3602
3695
  #
3603
3696
  # 要素の属性マップを取得する
@@ -3605,7 +3698,7 @@ module Meteor
3605
3698
  # @param [Meteor::Element] elm 要素
3606
3699
  # @return [Meteor::AttributeMap] 属性マップ
3607
3700
  #
3608
- def get_attribute_map_1(elm)
3701
+ def get_attribute_map(elm)
3609
3702
  attrs = Meteor::AttributeMap.new
3610
3703
 
3611
3704
  elm.attributes.scan(@@pattern_get_attrs_map) do |a, b|
@@ -3620,9 +3713,9 @@ module Meteor
3620
3713
 
3621
3714
  attrs
3622
3715
  end
3623
- private :get_attribute_map_1
3716
+ private :get_attribute_map
3624
3717
 
3625
- def remove_attributes_(elm,attr_name)
3718
+ def remove_attribute_(elm,attr_name)
3626
3719
  #検索対象属性の論理型是非判定
3627
3720
  if !is_match(ATTR_LOGIC,attr_name) then
3628
3721
  #属性検索用パターン
@@ -3891,51 +3984,57 @@ module Meteor
3891
3984
 
3892
3985
  @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
3893
3986
  @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
3987
+
3988
+ #@@pattern_match_tag = Regexp.new(MATCH_TAG)
3989
+ #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
3894
3990
  else
3895
- @@pattern_selected_m = Regexp.new(SELECTED_M,nil,E_UTF8)
3896
- @@pattern_selected_m1 = Regexp.new(SELECTED_M1,nil,E_UTF8)
3897
- @@pattern_selected_r = Regexp.new(SELECTED_R,nil,E_UTF8)
3898
- @@pattern_checked_m = Regexp.new(CHECKED_M,nil,E_UTF8)
3899
- @@pattern_checked_m1 = Regexp.new(CHECKED_M1,nil,E_UTF8)
3900
- @@pattern_checked_r = Regexp.new(CHECKED_R,nil,E_UTF8)
3901
- @@pattern_disabled_m = Regexp.new(DISABLED_M,nil,E_UTF8)
3902
- @@pattern_disabled_m1 = Regexp.new(DISABLED_M1,nil,E_UTF8)
3903
- @@pattern_disabled_r = Regexp.new(DISABLED_R,nil,E_UTF8)
3904
- @@pattern_readonly_m = Regexp.new(READONLY_M,nil,E_UTF8)
3905
- @@pattern_readonly_m1 = Regexp.new(READONLY_M1,nil,E_UTF8)
3906
- @@pattern_readonly_r = Regexp.new(READONLY_R,nil,E_UTF8)
3907
- @@pattern_multiple_m = Regexp.new(MULTIPLE_M,nil,E_UTF8)
3908
- @@pattern_multiple_m1 = Regexp.new(MULTIPLE_M1,nil,E_UTF8)
3909
- @@pattern_multiple_r = Regexp.new(MULTIPLE_R,nil,E_UTF8)
3910
-
3911
- @@pattern_and_1 = Regexp.new(AND_1,nil,E_UTF8)
3912
- @@pattern_lt_1 = Regexp.new(LT_1,nil,E_UTF8)
3913
- @@pattern_gt_1 = Regexp.new(GT_1,nil,E_UTF8)
3914
- @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION,nil,E_UTF8)
3915
- @@pattern_ap_1 = Regexp.new(AP_1,nil,E_UTF8)
3916
- @@pattern_space_1 = Regexp.new(SPACE,nil,E_UTF8)
3917
- @@pattern_br_1 = Regexp.new(BR_1,nil,E_UTF8)
3918
- @@pattern_lt_2 = Regexp.new(LT_2,nil,E_UTF8)
3919
- @@pattern_gt_2 = Regexp.new(GT_2,nil,E_UTF8)
3920
- @@pattern_dq_2 = Regexp.new(QO_2,nil,E_UTF8)
3921
- @@pattern_ap_2 = Regexp.new(AP_2,nil,E_UTF8)
3922
- @@pattern_space_2 = Regexp.new(NBSP_2,nil,E_UTF8)
3923
- @@pattern_and_2 = Regexp.new(AND_2,nil,E_UTF8)
3924
- @@pattern_br_2 = Regexp.new(BR_3,nil,E_UTF8)
3925
-
3926
- @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE,nil,E_UTF8)
3927
- @@pattern_set_mono1 = Regexp.new(SET_MONO_1,nil,E_UTF8)
3928
- end
3991
+ @@pattern_selected_m = Regexp.new(SELECTED_M)
3992
+ @@pattern_selected_m1 = Regexp.new(SELECTED_M1)
3993
+ @@pattern_selected_r = Regexp.new(SELECTED_R)
3994
+ @@pattern_checked_m = Regexp.new(CHECKED_M)
3995
+ @@pattern_checked_m1 = Regexp.new(CHECKED_M1)
3996
+ @@pattern_checked_r = Regexp.new(CHECKED_R)
3997
+ @@pattern_disabled_m = Regexp.new(DISABLED_M)
3998
+ @@pattern_disabled_m1 = Regexp.new(DISABLED_M1)
3999
+ @@pattern_disabled_r = Regexp.new(DISABLED_R)
4000
+ @@pattern_readonly_m = Regexp.new(READONLY_M)
4001
+ @@pattern_readonly_m1 = Regexp.new(READONLY_M1)
4002
+ @@pattern_readonly_r = Regexp.new(READONLY_R)
4003
+ @@pattern_multiple_m = Regexp.new(MULTIPLE_M)
4004
+ @@pattern_multiple_m1 = Regexp.new(MULTIPLE_M1)
4005
+ @@pattern_multiple_r = Regexp.new(MULTIPLE_R)
3929
4006
 
3930
- #@@pattern_match_tag = Regexp.new(MATCH_TAG)
3931
- #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
4007
+ @@pattern_and_1 = Regexp.new(AND_1)
4008
+ @@pattern_lt_1 = Regexp.new(LT_1)
4009
+ @@pattern_gt_1 = Regexp.new(GT_1)
4010
+ @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION)
4011
+ @@pattern_ap_1 = Regexp.new(AP_1)
4012
+ @@pattern_space_1 = Regexp.new(SPACE)
4013
+ @@pattern_br_1 = Regexp.new(BR_1)
4014
+ @@pattern_lt_2 = Regexp.new(LT_2)
4015
+ @@pattern_gt_2 = Regexp.new(GT_2)
4016
+ @@pattern_dq_2 = Regexp.new(QO_2)
4017
+ @@pattern_ap_2 = Regexp.new(AP_2)
4018
+ @@pattern_space_2 = Regexp.new(NBSP_2)
4019
+ @@pattern_and_2 = Regexp.new(AND_2)
4020
+ @@pattern_br_2 = Regexp.new(BR_3)
4021
+
4022
+ @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
4023
+ @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
4024
+
4025
+ #@@pattern_match_tag = Regexp.new(MATCH_TAG)
4026
+ #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
4027
+ end
3932
4028
 
3933
4029
  #
3934
4030
  # イニシャライザ
3935
- # @param [Array] args 引数配列
4031
+ # @overload def initialize
4032
+ # @overload def initialize(ps)
4033
+ # @param [Meteor::Parser] ps パーサ
3936
4034
  #
3937
4035
  def initialize(*args)
3938
- super(args)
4036
+ super()
4037
+ @doc_type = Parser::XHTML
3939
4038
  case args.length
3940
4039
  when ZERO
3941
4040
  initialize_0
@@ -3955,7 +4054,6 @@ module Meteor
3955
4054
 
3956
4055
  #
3957
4056
  # イニシャライザ
3958
- #
3959
4057
  # @param [Meteor::Parser] ps パーサ
3960
4058
  #
3961
4059
  def initialize_1(ps)
@@ -3963,13 +4061,11 @@ module Meteor
3963
4061
  @root.hook_document = String.new(ps.root_element.hook_document)
3964
4062
  @root.content_type = String.new(ps.content_type)
3965
4063
  @root.kaigyo_code = ps.root_element.kaigyo_code
3966
- @doc_type = ps.doc_type
3967
4064
  end
3968
4065
  private :initialize_1
3969
4066
 
3970
4067
  #
3971
4068
  # ドキュメントをパーサにセットする
3972
- #
3973
4069
  # @param [String] document ドキュメント
3974
4070
  #
3975
4071
  def parse(document)
@@ -3979,7 +4075,6 @@ module Meteor
3979
4075
 
3980
4076
  #
3981
4077
  # ファイルを読み込み、パーサにセットする
3982
- #
3983
4078
  # @param file_path ファイルパス
3984
4079
  # @param encoding エンコーディング
3985
4080
  #
@@ -4002,7 +4097,6 @@ module Meteor
4002
4097
 
4003
4098
  #
4004
4099
  # コンテントタイプを取得する
4005
- #
4006
4100
  # @return [String] コンテントタイプ
4007
4101
  #
4008
4102
  def content_type()
@@ -4096,15 +4190,15 @@ module Meteor
4096
4190
 
4097
4191
  def get_attribute_value_(elm,attr_name)
4098
4192
  if is_match(SELECTED, attr_name) && is_match(OPTION,elm.name) then
4099
- get_attribute_value_2_r(elm,attr_name,@@pattern_selected_m1)
4193
+ get_attribute_value_r(elm,attr_name,@@pattern_selected_m1)
4100
4194
  elsif is_match(MULTIPLE, attr_name) && is_match(SELECT,elm.name)
4101
- get_attribute_value_2_r(elm,attr_name,@@pattern_multiple_m1)
4195
+ get_attribute_value_r(elm,attr_name,@@pattern_multiple_m1)
4102
4196
  elsif is_match(DISABLED, attr_name) && is_match(DISABLE_ELEMENT, elm.name) then
4103
- get_attribute_value_2_r(elm,attr_name,@@pattern_disabled_m1)
4197
+ get_attribute_value_r(elm,attr_name,@@pattern_disabled_m1)
4104
4198
  elsif is_match(CHECKED, attr_name) && is_match(INPUT,elm.name) && is_match(RADIO, get_type(elm)) then
4105
- get_attribute_value_2_r(elm,attr_name,@@pattern_checked_m1)
4199
+ get_attribute_value_r(elm,attr_name,@@pattern_checked_m1)
4106
4200
  elsif is_match(READONLY, attr_name) && (is_match(TEXTAREA,elm.name) || (is_match(INPUT,elm.name) && is_match(READONLY_TYPE, get_type(elm)))) then
4107
- get_attribute_value_2_r(elm,attr_name,@@pattern_readonly_m1)
4201
+ get_attribute_value_r(elm,attr_name,@@pattern_readonly_m1)
4108
4202
  else
4109
4203
  super(elm,attr_name)
4110
4204
  end
@@ -4113,16 +4207,16 @@ module Meteor
4113
4207
 
4114
4208
  def get_type(elm)
4115
4209
  if !elm.type_value
4116
- elm.type_value = get_attribute_value_2(elm, TYPE_L)
4210
+ elm.type_value = get_attribute_value(elm, TYPE_L)
4117
4211
  if !elm.type_value then
4118
- elm.type_value = get_attribute_value_2(elm, TYPE_U)
4212
+ elm.type_value = get_attribute_value(elm, TYPE_U)
4119
4213
  end
4120
4214
  end
4121
4215
  elm.type_value
4122
4216
  end
4123
4217
  private :get_type
4124
4218
 
4125
- def get_attribute_value_2_r(elm,attr_name,match_p)
4219
+ def get_attribute_value_r(elm,attr_name,match_p)
4126
4220
 
4127
4221
  @res = match_p.match(elm.attributes)
4128
4222
 
@@ -4156,7 +4250,7 @@ module Meteor
4156
4250
  FALSE
4157
4251
  end
4158
4252
  end
4159
- private :get_attribute_value_2_r
4253
+ private :get_attribute_value_r
4160
4254
 
4161
4255
  #
4162
4256
  # 属性マップを取得する
@@ -4164,7 +4258,7 @@ module Meteor
4164
4258
  # @param [Meteor::Element] elm 要素
4165
4259
  # @return [Meteor::AttributeMap] 属性マップ
4166
4260
  #
4167
- def get_attribute_map_1(elm)
4261
+ def get_attribute_map(elm)
4168
4262
  attrs = Meteor::AttributeMap.new
4169
4263
 
4170
4264
  elm.attributes.scan(@@pattern_get_attrs_map) do |a, b|
@@ -4178,7 +4272,7 @@ module Meteor
4178
4272
 
4179
4273
  attrs
4180
4274
  end
4181
- private :get_attribute_map_1
4275
+ private :get_attribute_map
4182
4276
 
4183
4277
  def set_mono_info(elm)
4184
4278
 
@@ -4333,29 +4427,30 @@ module Meteor
4333
4427
  @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
4334
4428
  @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
4335
4429
  else
4336
- @@pattern_and_1 = Regexp.new(AND_1,nil,E_UTF8)
4337
- @@pattern_lt_1 = Regexp.new(LT_1,nil,E_UTF8)
4338
- @@pattern_gt_1 = Regexp.new(GT_1,nil,E_UTF8)
4339
- @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION,nil,E_UTF8)
4340
- @@pattern_ap_1 = Regexp.new(AP_1,nil,E_UTF8)
4341
- @@pattern_lt_2 = Regexp.new(LT_2,nil,E_UTF8)
4342
- @@pattern_gt_2 = Regexp.new(GT_2,nil,E_UTF8)
4343
- @@pattern_dq_2 = Regexp.new(QO_2,nil,E_UTF8)
4344
- @@pattern_ap_2 = Regexp.new(AP_2,nil,E_UTF8)
4345
- @@pattern_and_2 = Regexp.new(AND_2,nil,E_UTF8)
4346
-
4347
- @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE,nil,E_UTF8)
4348
- @@pattern_set_mono1 = Regexp.new(SET_MONO_1,nil,E_UTF8)
4430
+ @@pattern_and_1 = Regexp.new(AND_1)
4431
+ @@pattern_lt_1 = Regexp.new(LT_1)
4432
+ @@pattern_gt_1 = Regexp.new(GT_1)
4433
+ @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION)
4434
+ @@pattern_ap_1 = Regexp.new(AP_1)
4435
+ @@pattern_lt_2 = Regexp.new(LT_2)
4436
+ @@pattern_gt_2 = Regexp.new(GT_2)
4437
+ @@pattern_dq_2 = Regexp.new(QO_2)
4438
+ @@pattern_ap_2 = Regexp.new(AP_2)
4439
+ @@pattern_and_2 = Regexp.new(AND_2)
4440
+
4441
+ @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
4442
+ @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
4349
4443
  end
4350
4444
 
4351
4445
  #
4352
4446
  # イニシャライザ
4353
- #
4354
- # @param [Array] args 引数配列
4447
+ # @overload def initialize
4448
+ # @overload def initialize(ps)
4449
+ # @param [Meteor::Parser] ps パーサ
4355
4450
  #
4356
4451
  def initialize(*args)
4357
- super(args)
4358
-
4452
+ super()
4453
+ @doc_type = Parser::XML
4359
4454
  case args.length
4360
4455
  when ZERO
4361
4456
  initialize_0
@@ -4375,19 +4470,16 @@ module Meteor
4375
4470
 
4376
4471
  #
4377
4472
  # イニシャライザ
4378
- #
4379
4473
  # @param [Meteor::Parser] ps パーサ
4380
4474
  #
4381
4475
  def initialize_1(ps)
4382
4476
  @root.document = String.new(ps.document)
4383
4477
  @root.hook_document = String.new(ps.root_element.hook_document)
4384
- @doc_type = ps.doc_type
4385
4478
  end
4386
4479
  private :initialize_1
4387
4480
 
4388
4481
  #
4389
4482
  # ドキュメントをパーサにセットする
4390
- #
4391
4483
  # @param [String] document ドキュメント
4392
4484
  #
4393
4485
  def parse(document)
@@ -4396,7 +4488,6 @@ module Meteor
4396
4488
 
4397
4489
  #
4398
4490
  # ファイルを読み込み、パーサにセットする
4399
- #
4400
4491
  # @param file_path ファイルパス
4401
4492
  # @param encoding エンコーディング
4402
4493
  #
@@ -4405,7 +4496,6 @@ module Meteor
4405
4496
  end
4406
4497
 
4407
4498
  # コンテントタイプを取得する
4408
- #
4409
4499
  # @return [Streing]コンテントタイプ
4410
4500
  #
4411
4501
  def content_type()