meteor 0.9.24 → 0.9.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ChangeLog +8 -0
- data/Gemfile.lock +1 -1
- data/demo/html.rb +1 -1
- data/lib/meteor/core/kernel.rb +118 -134
- data/lib/meteor/element.rb +68 -50
- data/lib/meteor/ml/html4/parser_impl.rb +24 -24
- data/lib/meteor/parsers.rb +1 -1
- data/lib/meteor/root_element.rb +5 -2
- data/lib/meteor.rb +2 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a6776307290552674dcb55922ddc18ed004c4b79c1176c80ddd9f60ad87b0b1d
|
|
4
|
+
data.tar.gz: ec1e5797f5e09c537603b7ac67866cd51ab0cbbd80f6dd30074d9e43642b0fb4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f9b7bdd39d61dc47cf3929eda3a4b9a08399d3b72223b6ac9a392ebce76566b11872bb6a186e73f793fa58e2b897ead3fd2e4aeb3cac08c8a08f3eae5731c9d6
|
|
7
|
+
data.tar.gz: 940e99265e10e13149cc4fc0bd50732d8ee9b1f3c7a66dfcc2ecf012fc8e7602b016041ae6453b444085dfcdfe97be6fb6f7fc4818050015c06df5872925c5f0
|
data/ChangeLog
CHANGED
data/Gemfile.lock
CHANGED
data/demo/html.rb
CHANGED
|
@@ -43,7 +43,7 @@ elm_text1["required"] = true
|
|
|
43
43
|
# elm_select1['multiple'] = true # elm_select1.attr(multiple: true)
|
|
44
44
|
# puts elm_select1['multiple'] # puts elm_select1.attr('multiple')
|
|
45
45
|
|
|
46
|
-
# elm_select1.unsafe_content = "<option id=\"
|
|
46
|
+
# elm_select1.unsafe_content = "<option id=\"option1-2\">オプション1-2</option>"
|
|
47
47
|
|
|
48
48
|
# elm_option1 = root.element('option', id: 'option1')
|
|
49
49
|
# elm_option1['selected'] = true # elm_option1.attr(selected: true)
|
data/lib/meteor/core/kernel.rb
CHANGED
|
@@ -111,18 +111,22 @@ module Meteor
|
|
|
111
111
|
# set character encoding (文字エンコーディングをセットする)
|
|
112
112
|
# @param [String] enc character encoding (文字エンコーディング)
|
|
113
113
|
#
|
|
114
|
-
def
|
|
115
|
-
@root.
|
|
114
|
+
def enc=(enc)
|
|
115
|
+
@root.enc = enc
|
|
116
116
|
end
|
|
117
117
|
|
|
118
|
+
alias_method :character_encoding=, :enc=
|
|
119
|
+
|
|
118
120
|
#
|
|
119
121
|
# get character encoding (文字エンコーディングを取得する)
|
|
120
122
|
# @return [String] character encoding (文字エンコーディング)
|
|
121
123
|
#
|
|
122
|
-
def
|
|
123
|
-
@root.
|
|
124
|
+
def enc
|
|
125
|
+
@root.enc
|
|
124
126
|
end
|
|
125
127
|
|
|
128
|
+
alias_method :character_encoding, :enc
|
|
129
|
+
|
|
126
130
|
#
|
|
127
131
|
# get root element (ルート要素を取得する)
|
|
128
132
|
# @return [Meteor::RootElement] root element (ルート要素)
|
|
@@ -158,23 +162,25 @@ module Meteor
|
|
|
158
162
|
#
|
|
159
163
|
def read(file_path, enc)
|
|
160
164
|
# try {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
io = File.open(file_path, "r:UTF-8")
|
|
165
|
+
self.enc = enc
|
|
166
|
+
mode = if enc == "UTF-8"
|
|
167
|
+
# String.new("") << "r:" << enc
|
|
168
|
+
"r:UTF-8"
|
|
166
169
|
else
|
|
167
|
-
|
|
170
|
+
String.new("") << "r:" << enc << ":utf-8"
|
|
168
171
|
end
|
|
169
172
|
|
|
173
|
+
# open file (ファイルのオープン)
|
|
174
|
+
io = File.open(file_path, mode)
|
|
175
|
+
|
|
170
176
|
# load and save (読込及び格納)
|
|
171
177
|
@root.document = io.read
|
|
172
178
|
|
|
173
|
-
parse
|
|
174
|
-
|
|
175
179
|
# close file (ファイルのクローズ)
|
|
176
180
|
io.close
|
|
177
181
|
|
|
182
|
+
parse
|
|
183
|
+
|
|
178
184
|
return @root.document
|
|
179
185
|
end
|
|
180
186
|
|
|
@@ -317,15 +323,15 @@ module Meteor
|
|
|
317
323
|
@pattern_cc = "<#{@_name}(|\\s[^<>]*)\\/>|<#{@_name}((?:|\\s[^<>]*))>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
318
324
|
|
|
319
325
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
|
320
|
-
# search of
|
|
326
|
+
# search of normal element (内容あり要素検索)
|
|
321
327
|
@res = @pattern.match(@root.document)
|
|
322
328
|
|
|
323
329
|
if @res
|
|
324
330
|
if @res[1]
|
|
325
|
-
|
|
331
|
+
element_void_1(name)
|
|
326
332
|
else
|
|
327
|
-
# puts '---
|
|
328
|
-
|
|
333
|
+
# puts '---element_normal_1'
|
|
334
|
+
element_normal_1(name)
|
|
329
335
|
end
|
|
330
336
|
# else
|
|
331
337
|
end
|
|
@@ -335,7 +341,7 @@ module Meteor
|
|
|
335
341
|
|
|
336
342
|
private :element_1
|
|
337
343
|
|
|
338
|
-
def
|
|
344
|
+
def element_normal_1(name)
|
|
339
345
|
@elm_ = Meteor::Element.new(name)
|
|
340
346
|
|
|
341
347
|
unless @on_search
|
|
@@ -356,21 +362,21 @@ module Meteor
|
|
|
356
362
|
# document (全体)
|
|
357
363
|
@elm_.document = @res[0]
|
|
358
364
|
end
|
|
359
|
-
#
|
|
365
|
+
# normal element search pattern (内容あり要素検索用パターン)
|
|
360
366
|
# @pattern_cc = String.new('') << "<" << @_name << '(?:|\\s[^<>]*)>((?!(' << @_name
|
|
361
367
|
# @pattern_cc << '[^<>]*>)).)*<\\/' << @_name << '>'
|
|
362
368
|
@pattern_cc = "<#{@_name}(|\\s[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
363
369
|
|
|
364
370
|
@elm_.pattern = @pattern_cc
|
|
365
|
-
@elm_.
|
|
371
|
+
@elm_.normal = true
|
|
366
372
|
@elm_.parser = self
|
|
367
373
|
|
|
368
374
|
@elm_
|
|
369
375
|
end
|
|
370
376
|
|
|
371
|
-
private :
|
|
377
|
+
private :element_normal_1
|
|
372
378
|
|
|
373
|
-
def
|
|
379
|
+
def element_void_1(name)
|
|
374
380
|
# element (要素)
|
|
375
381
|
@elm_ = Meteor::Element.new(name)
|
|
376
382
|
# attribute (属性)
|
|
@@ -382,14 +388,14 @@ module Meteor
|
|
|
382
388
|
# @pattern_cc = "<#{@_name}(|\\s[^<>]*)\\/>"
|
|
383
389
|
@elm_.pattern = @pattern_cc
|
|
384
390
|
|
|
385
|
-
@elm_.
|
|
391
|
+
@elm_.normal = false
|
|
386
392
|
|
|
387
393
|
@elm_.parser = self
|
|
388
394
|
|
|
389
395
|
@elm_
|
|
390
396
|
end
|
|
391
397
|
|
|
392
|
-
private :
|
|
398
|
+
private :element_void_1
|
|
393
399
|
|
|
394
400
|
#
|
|
395
401
|
# get element using tag name and attribute(name="value") (要素のタグ名と属性(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -411,7 +417,7 @@ module Meteor
|
|
|
411
417
|
@res1 = @pattern.match(@root.document)
|
|
412
418
|
|
|
413
419
|
if @res1 && @res1[1] || !@res1
|
|
414
|
-
@res2 =
|
|
420
|
+
@res2 = element_normal_3_2
|
|
415
421
|
@pattern_cc_2 = @pattern_cc
|
|
416
422
|
|
|
417
423
|
# puts @res2.captures.length
|
|
@@ -423,27 +429,27 @@ module Meteor
|
|
|
423
429
|
@res = @res1
|
|
424
430
|
# @pattern_cc = @pattern_cc_1
|
|
425
431
|
if @res[1]
|
|
426
|
-
|
|
432
|
+
element_void_3(name)
|
|
427
433
|
else
|
|
428
|
-
|
|
434
|
+
element_normal_3_1(name)
|
|
429
435
|
end
|
|
430
436
|
elsif @res1.begin(0) > @res2.begin(0)
|
|
431
437
|
@res = @res2
|
|
432
438
|
# @pattern_cc = @pattern_cc_2
|
|
433
|
-
|
|
439
|
+
element_normal_3_1(name)
|
|
434
440
|
end
|
|
435
441
|
elsif @res1 && !@res2
|
|
436
442
|
@res = @res1
|
|
437
443
|
# @pattern_cc = @pattern_cc_1
|
|
438
444
|
if @res[1]
|
|
439
|
-
|
|
445
|
+
element_void_3(name)
|
|
440
446
|
else
|
|
441
|
-
|
|
447
|
+
element_normal_3_1(name)
|
|
442
448
|
end
|
|
443
449
|
elsif @res2 && !@res1
|
|
444
450
|
@res = @res2
|
|
445
451
|
# @pattern_cc = @pattern_cc_2
|
|
446
|
-
|
|
452
|
+
element_normal_3_1(name)
|
|
447
453
|
else
|
|
448
454
|
if @error_check
|
|
449
455
|
puts(Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message)
|
|
@@ -470,7 +476,7 @@ module Meteor
|
|
|
470
476
|
|
|
471
477
|
private :quote_element_3
|
|
472
478
|
|
|
473
|
-
def
|
|
479
|
+
def element_normal_3_1(name)
|
|
474
480
|
# puts @res.captures.length
|
|
475
481
|
case @res.captures.length
|
|
476
482
|
when FOUR
|
|
@@ -482,7 +488,7 @@ module Meteor
|
|
|
482
488
|
@elm_.mixed_content = @res[2]
|
|
483
489
|
# document (全体)
|
|
484
490
|
@elm_.document = @res[0]
|
|
485
|
-
#
|
|
491
|
+
# normal element search pattern (内容あり要素検索用パターン)
|
|
486
492
|
# @pattern_cc = String.new('')<< "<" << @_name << '\\s[^<>]*' << @_attr_name << '="'
|
|
487
493
|
# @pattern_cc << @_attr_value << '"[^<>]*>((?!(' << @_name
|
|
488
494
|
# @pattern_cc << '[^<>]*>)).)*<\\/' << @_name << '>'
|
|
@@ -490,7 +496,7 @@ module Meteor
|
|
|
490
496
|
|
|
491
497
|
@elm_.pattern = @pattern_cc
|
|
492
498
|
|
|
493
|
-
@elm_.
|
|
499
|
+
@elm_.normal = true
|
|
494
500
|
|
|
495
501
|
@elm_.parser = self
|
|
496
502
|
when FIVE
|
|
@@ -502,7 +508,7 @@ module Meteor
|
|
|
502
508
|
@elm_.mixed_content = @res[3]
|
|
503
509
|
# document (全体)
|
|
504
510
|
@elm_.document = @res[0]
|
|
505
|
-
#
|
|
511
|
+
# normal element search pattern (内容あり要素検索用パターン)
|
|
506
512
|
# @pattern_cc = String.new('')<< "<" << @_name << '\\s[^<>]*' << @_attr_name << '="'
|
|
507
513
|
# @pattern_cc << @_attr_value << '"[^<>]*>((?!(' << @_name
|
|
508
514
|
# @pattern_cc << '[^<>]*>)).)*<\\/' << @_name << '>'
|
|
@@ -510,7 +516,7 @@ module Meteor
|
|
|
510
516
|
|
|
511
517
|
@elm_.pattern = @pattern_cc
|
|
512
518
|
|
|
513
|
-
@elm_.
|
|
519
|
+
@elm_.normal = true
|
|
514
520
|
|
|
515
521
|
@elm_.parser = self
|
|
516
522
|
|
|
@@ -530,10 +536,10 @@ module Meteor
|
|
|
530
536
|
end
|
|
531
537
|
# document (全体)
|
|
532
538
|
@elm_.document = @res[0]
|
|
533
|
-
#
|
|
539
|
+
# normal element search pattern (内容あり要素検索用パターン)
|
|
534
540
|
@elm_.pattern = @pattern_cc
|
|
535
541
|
|
|
536
|
-
@elm_.
|
|
542
|
+
@elm_.normal = true
|
|
537
543
|
|
|
538
544
|
@elm_.parser = self
|
|
539
545
|
end
|
|
@@ -541,10 +547,10 @@ module Meteor
|
|
|
541
547
|
@elm_
|
|
542
548
|
end
|
|
543
549
|
|
|
544
|
-
private :
|
|
550
|
+
private :element_normal_3_1
|
|
545
551
|
|
|
546
|
-
def
|
|
547
|
-
|
|
552
|
+
def element_normal_3_2
|
|
553
|
+
element_pattern_normal_3_2
|
|
548
554
|
|
|
549
555
|
if @sbuf.length == ZERO || @cnt != ZERO
|
|
550
556
|
return nil
|
|
@@ -556,9 +562,9 @@ module Meteor
|
|
|
556
562
|
@res
|
|
557
563
|
end
|
|
558
564
|
|
|
559
|
-
private :
|
|
565
|
+
private :element_normal_3_2
|
|
560
566
|
|
|
561
|
-
def
|
|
567
|
+
def element_pattern_normal_3_2
|
|
562
568
|
# @pattern_cc_1 = String.new('') << "<" << @_name << '(\\s[^<>]*' << @_attr_name << '="'
|
|
563
569
|
# @pattern_cc_1 << @_attr_value << '(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))'
|
|
564
570
|
@pattern_cc_1 = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))"
|
|
@@ -577,7 +583,7 @@ module Meteor
|
|
|
577
583
|
@pattern_cc_2_2 = String.new("") << ".*?)<\\/" << @_name << ">"
|
|
578
584
|
# @pattern_cc_2_2 = ".*?)<\\/#{@_name}>"
|
|
579
585
|
|
|
580
|
-
# search of
|
|
586
|
+
# search of normal element (内容あり要素検索)
|
|
581
587
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
|
|
582
588
|
|
|
583
589
|
@sbuf = String.new("")
|
|
@@ -592,15 +598,15 @@ module Meteor
|
|
|
592
598
|
@pattern_cc = @sbuf
|
|
593
599
|
end
|
|
594
600
|
|
|
595
|
-
private :
|
|
601
|
+
private :element_pattern_normal_3_2
|
|
596
602
|
|
|
597
|
-
def
|
|
598
|
-
|
|
603
|
+
def element_void_3(name)
|
|
604
|
+
element_void_3_1(name, "\"[^<>]*)\\/>")
|
|
599
605
|
end
|
|
600
606
|
|
|
601
|
-
private :
|
|
607
|
+
private :element_void_3
|
|
602
608
|
|
|
603
|
-
def
|
|
609
|
+
def element_void_3_1(name, closer)
|
|
604
610
|
# element (要素)
|
|
605
611
|
@elm_ = Meteor::Element.new(name)
|
|
606
612
|
# attribute (属性)
|
|
@@ -616,7 +622,7 @@ module Meteor
|
|
|
616
622
|
@elm_
|
|
617
623
|
end
|
|
618
624
|
|
|
619
|
-
private :
|
|
625
|
+
private :element_void_3_1
|
|
620
626
|
|
|
621
627
|
#
|
|
622
628
|
# get element using attribute(name="value") (属性(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -649,7 +655,7 @@ module Meteor
|
|
|
649
655
|
@res1 = @pattern.match(@root.document)
|
|
650
656
|
|
|
651
657
|
if @res1 && @res1[1] || !@res1
|
|
652
|
-
@res2 =
|
|
658
|
+
@res2 = element_normal_2_2
|
|
653
659
|
@pattern_cc_2 = @pattern_cc
|
|
654
660
|
|
|
655
661
|
# puts @res2.captures.length
|
|
@@ -661,27 +667,27 @@ module Meteor
|
|
|
661
667
|
@res = @res1
|
|
662
668
|
# @pattern_cc = @pattern_cc_1
|
|
663
669
|
if @res[1]
|
|
664
|
-
|
|
670
|
+
element_void_2
|
|
665
671
|
else
|
|
666
|
-
|
|
672
|
+
element_normal_2_1
|
|
667
673
|
end
|
|
668
674
|
elsif @res1.begin(0) > @res2.begin(0)
|
|
669
675
|
@res = @res2
|
|
670
676
|
# @pattern_cc = @pattern_cc_2
|
|
671
|
-
|
|
677
|
+
element_normal_2_1
|
|
672
678
|
end
|
|
673
679
|
elsif @res1 && !@res2
|
|
674
680
|
@res = @res1
|
|
675
681
|
# @pattern_cc = @pattern_cc_1
|
|
676
682
|
if @res[1]
|
|
677
|
-
|
|
683
|
+
element_void_2
|
|
678
684
|
else
|
|
679
|
-
|
|
685
|
+
element_normal_2_1
|
|
680
686
|
end
|
|
681
687
|
elsif @res2 && !@res1
|
|
682
688
|
@res = @res2
|
|
683
689
|
# @pattern_cc = @pattern_cc_2
|
|
684
|
-
|
|
690
|
+
element_normal_2_1
|
|
685
691
|
else
|
|
686
692
|
if @error_check
|
|
687
693
|
puts Meteor::Exception::NoSuchElementException.new(attr_name, attr_value).message
|
|
@@ -717,7 +723,7 @@ module Meteor
|
|
|
717
723
|
private :element_pattern_2
|
|
718
724
|
|
|
719
725
|
=begin
|
|
720
|
-
def
|
|
726
|
+
def element_normal_2_1
|
|
721
727
|
# puts @res.captures.length
|
|
722
728
|
case @res.captures.length
|
|
723
729
|
when FOUR
|
|
@@ -737,7 +743,7 @@ module Meteor
|
|
|
737
743
|
@ pattern_cc = "<#{@_name}\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*>((?!(#{@_name}[^<>]*>)).)*<\\/#{@_name}>"
|
|
738
744
|
|
|
739
745
|
@elm_.pattern = @pattern_cc
|
|
740
|
-
@elm_.
|
|
746
|
+
@elm_.normal = true
|
|
741
747
|
@elm_.parser = self
|
|
742
748
|
when FIVE,SEVEN
|
|
743
749
|
@_name = @res[3]
|
|
@@ -756,7 +762,7 @@ module Meteor
|
|
|
756
762
|
@pattern_cc = "<#{@_name}\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*>((?!(#{@_name}[^<>]*>)).)*<\\/#{@_name}>"
|
|
757
763
|
|
|
758
764
|
@elm_.pattern = @pattern_cc
|
|
759
|
-
@elm_.
|
|
765
|
+
@elm_.normal = true
|
|
760
766
|
@elm_.parser = self
|
|
761
767
|
when THREE,SIX
|
|
762
768
|
# puts @res[1]
|
|
@@ -773,20 +779,20 @@ module Meteor
|
|
|
773
779
|
# pattern (内容あり要素検索用パターン)
|
|
774
780
|
@elm_.pattern = @pattern_cc
|
|
775
781
|
|
|
776
|
-
@elm_.
|
|
782
|
+
@elm_.normal = true
|
|
777
783
|
@elm_.parser = self
|
|
778
784
|
end
|
|
779
785
|
@elm_
|
|
780
786
|
end
|
|
781
787
|
|
|
782
|
-
private :
|
|
788
|
+
private :element_normal_2_1
|
|
783
789
|
|
|
784
|
-
def
|
|
790
|
+
def element_normal_2_2
|
|
785
791
|
# @pattern_cc_1 = String.new('') << "<" << @_name << '(\\s[^<>]*' << @_attr_name << '="'
|
|
786
792
|
# @pattern_cc_1 << @_attr_value << '(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))'
|
|
787
793
|
@pattern_cc_1 = "<([^<>\"]*)(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}(?:[^<>\\/]*>|(?:(?!([^<>]*\\/>))[^<>]*>)))"
|
|
788
794
|
|
|
789
|
-
# search of
|
|
795
|
+
# search of normal element (内容あり要素検索)
|
|
790
796
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
|
|
791
797
|
@sbuf = String.new('')
|
|
792
798
|
|
|
@@ -804,7 +810,7 @@ module Meteor
|
|
|
804
810
|
@res = @pattern.match(@root.document)
|
|
805
811
|
end
|
|
806
812
|
|
|
807
|
-
private :
|
|
813
|
+
private :element_normal_2_2
|
|
808
814
|
|
|
809
815
|
def create_pattern_2(args_cnt)
|
|
810
816
|
@pattern_cc_1b = String.new('') << "<" << @_name << '(\\s[^<>\\/]*>|((?!([^<>]*\\/>))[^<>]*>))'
|
|
@@ -821,13 +827,13 @@ module Meteor
|
|
|
821
827
|
@pattern_1b = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b)
|
|
822
828
|
end
|
|
823
829
|
|
|
824
|
-
def
|
|
825
|
-
|
|
830
|
+
def element_void_2
|
|
831
|
+
element_void_2_1('"[^<>]*\\/>')
|
|
826
832
|
end
|
|
827
833
|
|
|
828
|
-
private :
|
|
834
|
+
private :element_void_2
|
|
829
835
|
|
|
830
|
-
def
|
|
836
|
+
def element_void_2_1(closer)
|
|
831
837
|
# element (要素)
|
|
832
838
|
@elm_ = Element.new(@res[1])
|
|
833
839
|
# attribute (属性)
|
|
@@ -842,7 +848,7 @@ module Meteor
|
|
|
842
848
|
@elm_
|
|
843
849
|
end
|
|
844
850
|
|
|
845
|
-
private :
|
|
851
|
+
private :element_void_2_1
|
|
846
852
|
=end
|
|
847
853
|
|
|
848
854
|
#
|
|
@@ -863,7 +869,7 @@ module Meteor
|
|
|
863
869
|
@res1 = @pattern.match(@root.document)
|
|
864
870
|
|
|
865
871
|
if @res1 && @res1[1] || !@res1
|
|
866
|
-
@res2 =
|
|
872
|
+
@res2 = element_normal_5_2
|
|
867
873
|
@pattern_cc_2 = @pattern_cc
|
|
868
874
|
|
|
869
875
|
# puts @res2.captures.length
|
|
@@ -875,27 +881,27 @@ module Meteor
|
|
|
875
881
|
@res = @res1
|
|
876
882
|
# @pattern_cc = @pattern_cc_1
|
|
877
883
|
if @res[1]
|
|
878
|
-
|
|
884
|
+
element_void_5(name)
|
|
879
885
|
else
|
|
880
|
-
|
|
886
|
+
element_normal_5_1(name)
|
|
881
887
|
end
|
|
882
888
|
elsif @res1.begin(0) > @res2.begin(0)
|
|
883
889
|
@res = @res2
|
|
884
890
|
# @pattern_cc = @pattern_cc_2
|
|
885
|
-
|
|
891
|
+
element_normal_5_1(name)
|
|
886
892
|
end
|
|
887
893
|
elsif @res1 && !@res2
|
|
888
894
|
@res = @res1
|
|
889
895
|
# @pattern_cc = @pattern_cc_1
|
|
890
896
|
if @res[1]
|
|
891
|
-
|
|
897
|
+
element_void_5(name)
|
|
892
898
|
else
|
|
893
|
-
|
|
899
|
+
element_normal_5_1(name)
|
|
894
900
|
end
|
|
895
901
|
elsif @res2 && !@res1
|
|
896
902
|
@res = @res2
|
|
897
903
|
# @pattern_cc = @pattern_cc_2
|
|
898
|
-
|
|
904
|
+
element_normal_5_1(name)
|
|
899
905
|
else
|
|
900
906
|
if @error_check
|
|
901
907
|
puts(Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message)
|
|
@@ -919,7 +925,7 @@ module Meteor
|
|
|
919
925
|
|
|
920
926
|
private :quote_element_5
|
|
921
927
|
|
|
922
|
-
def
|
|
928
|
+
def element_normal_5_1(name)
|
|
923
929
|
|
|
924
930
|
# puts @res.captures.length
|
|
925
931
|
case @res.captures.length
|
|
@@ -942,7 +948,7 @@ module Meteor
|
|
|
942
948
|
@pattern_cc = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
943
949
|
|
|
944
950
|
@elm_.pattern = @pattern_cc
|
|
945
|
-
@elm_.
|
|
951
|
+
@elm_.normal = true
|
|
946
952
|
@elm_.parser = self
|
|
947
953
|
when FIVE
|
|
948
954
|
# element (要素)
|
|
@@ -963,7 +969,7 @@ module Meteor
|
|
|
963
969
|
@pattern_cc = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
964
970
|
|
|
965
971
|
@elm_.pattern = @pattern_cc
|
|
966
|
-
@elm_.
|
|
972
|
+
@elm_.normal = true
|
|
967
973
|
@elm_.parser = self
|
|
968
974
|
|
|
969
975
|
when THREE, SIX
|
|
@@ -975,20 +981,20 @@ module Meteor
|
|
|
975
981
|
@elm_.mixed_content = @res[3]
|
|
976
982
|
# document (全体)
|
|
977
983
|
@elm_.document = @res[0]
|
|
978
|
-
#
|
|
984
|
+
# normal element search pattern (要素ありタグ検索用パターン)
|
|
979
985
|
@elm_.pattern = @pattern_cc
|
|
980
986
|
|
|
981
|
-
@elm_.
|
|
987
|
+
@elm_.normal = true
|
|
982
988
|
@elm_.parser = self
|
|
983
989
|
end
|
|
984
990
|
|
|
985
991
|
@elm_
|
|
986
992
|
end
|
|
987
993
|
|
|
988
|
-
private :
|
|
994
|
+
private :element_normal_5_1
|
|
989
995
|
|
|
990
|
-
def
|
|
991
|
-
|
|
996
|
+
def element_normal_5_2
|
|
997
|
+
element_pattern_normal_5_2
|
|
992
998
|
|
|
993
999
|
if @sbuf.length == ZERO || @cnt != ZERO
|
|
994
1000
|
return nil
|
|
@@ -1000,9 +1006,9 @@ module Meteor
|
|
|
1000
1006
|
@res
|
|
1001
1007
|
end
|
|
1002
1008
|
|
|
1003
|
-
private :
|
|
1009
|
+
private :element_normal_5_2
|
|
1004
1010
|
|
|
1005
|
-
def
|
|
1011
|
+
def element_pattern_normal_5_2
|
|
1006
1012
|
|
|
1007
1013
|
# @pattern_cc_1 = String.new('') << "<" << @_name << '(\\s[^<>]*(?:' << @_attr_name1 << '="'
|
|
1008
1014
|
# @pattern_cc_1 << @_attr_value1 << '"[^<>]*' << @_attr_name2 << '="'
|
|
@@ -1029,7 +1035,7 @@ module Meteor
|
|
|
1029
1035
|
# @pattern_cc_2_1 = ".*?<\\/#{@_name}>"
|
|
1030
1036
|
# @pattern_cc_2_2 = ".*?)<\\/#{@_name}>"
|
|
1031
1037
|
|
|
1032
|
-
# search of
|
|
1038
|
+
# search of normal element (内容あり要素検索)
|
|
1033
1039
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1)
|
|
1034
1040
|
|
|
1035
1041
|
@sbuf = String.new("")
|
|
@@ -1042,15 +1048,15 @@ module Meteor
|
|
|
1042
1048
|
@pattern_cc = @sbuf
|
|
1043
1049
|
end
|
|
1044
1050
|
|
|
1045
|
-
private :
|
|
1051
|
+
private :element_pattern_normal_5_2
|
|
1046
1052
|
|
|
1047
|
-
def
|
|
1048
|
-
|
|
1053
|
+
def element_void_5(name)
|
|
1054
|
+
element_void_5_1(name, "\")[^<>]*)\\/>")
|
|
1049
1055
|
end
|
|
1050
1056
|
|
|
1051
|
-
private :
|
|
1057
|
+
private :element_void_5
|
|
1052
1058
|
|
|
1053
|
-
def
|
|
1059
|
+
def element_void_5_1(name, closer)
|
|
1054
1060
|
# element (要素)
|
|
1055
1061
|
@elm_ = Meteor::Element.new(name)
|
|
1056
1062
|
# attribute (属性)
|
|
@@ -1070,7 +1076,7 @@ module Meteor
|
|
|
1070
1076
|
@elm_
|
|
1071
1077
|
end
|
|
1072
1078
|
|
|
1073
|
-
private :
|
|
1079
|
+
private :element_void_5_1
|
|
1074
1080
|
|
|
1075
1081
|
#
|
|
1076
1082
|
# get element using attribute1,2(name="value") (属性1・属性2(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -1388,24 +1394,24 @@ module Meteor
|
|
|
1388
1394
|
# if @res
|
|
1389
1395
|
case args.size
|
|
1390
1396
|
when ONE
|
|
1391
|
-
if @elm_.
|
|
1392
|
-
|
|
1397
|
+
if @elm_.normal
|
|
1398
|
+
element_normal_1(@elm_.name)
|
|
1393
1399
|
else
|
|
1394
|
-
|
|
1400
|
+
element_void_1(@elm_.name)
|
|
1395
1401
|
end
|
|
1396
1402
|
|
|
1397
1403
|
when TWO, THREE
|
|
1398
|
-
if @elm_.
|
|
1399
|
-
|
|
1404
|
+
if @elm_.normal
|
|
1405
|
+
element_normal_3_1(@elm_.name)
|
|
1400
1406
|
else
|
|
1401
|
-
|
|
1407
|
+
element_void_3(@elm_.name)
|
|
1402
1408
|
end
|
|
1403
1409
|
|
|
1404
1410
|
when FOUR, FIVE
|
|
1405
|
-
if @elm_.
|
|
1406
|
-
|
|
1411
|
+
if @elm_.normal
|
|
1412
|
+
element_normal_5_1(@elm_.name)
|
|
1407
1413
|
else
|
|
1408
|
-
|
|
1414
|
+
element_void_5(@elm_.name)
|
|
1409
1415
|
end
|
|
1410
1416
|
end
|
|
1411
1417
|
|
|
@@ -1846,7 +1852,7 @@ module Meteor
|
|
|
1846
1852
|
#
|
|
1847
1853
|
def get_content_1(elm)
|
|
1848
1854
|
if !elm.cx
|
|
1849
|
-
if elm.
|
|
1855
|
+
if elm.normal
|
|
1850
1856
|
unescape_content(elm.mixed_content, elm)
|
|
1851
1857
|
else
|
|
1852
1858
|
nil
|
|
@@ -1955,7 +1961,7 @@ module Meteor
|
|
|
1955
1961
|
# pattren (要素検索パターン)
|
|
1956
1962
|
@elm_.pattern = @pattern_cc
|
|
1957
1963
|
|
|
1958
|
-
@elm_.
|
|
1964
|
+
@elm_.normal = true
|
|
1959
1965
|
|
|
1960
1966
|
@elm_.parser = self
|
|
1961
1967
|
else
|
|
@@ -2073,7 +2079,7 @@ module Meteor
|
|
|
2073
2079
|
# self.document_hook << @root.kaigyo_code << "<#{self.element_hook.name}#{self.element_hook.attributes}>#{self.element_hook.mixed_content}</#{self.element_hook.name}>"
|
|
2074
2080
|
end
|
|
2075
2081
|
|
|
2076
|
-
self.element_hook =
|
|
2082
|
+
self.element_hook = self.element_hook.origin.clone(self)
|
|
2077
2083
|
else
|
|
2078
2084
|
reflect
|
|
2079
2085
|
@_attributes = self.element_hook.attributes
|
|
@@ -2097,7 +2103,7 @@ module Meteor
|
|
|
2097
2103
|
# self.document_hook << @root.kaigyo_code << "<#{self.element_hook.name}#{@_attributes}>#{@root.document}</#{self.element_hook.name}>"
|
|
2098
2104
|
end
|
|
2099
2105
|
|
|
2100
|
-
self.element_hook =
|
|
2106
|
+
self.element_hook = self.element_hook.origin.clone(self)
|
|
2101
2107
|
end
|
|
2102
2108
|
else
|
|
2103
2109
|
reflect
|
|
@@ -2125,13 +2131,13 @@ module Meteor
|
|
|
2125
2131
|
# @return [Meteor::Element] element (要素)
|
|
2126
2132
|
#
|
|
2127
2133
|
def shadow(elm)
|
|
2128
|
-
if elm.
|
|
2129
|
-
# case of
|
|
2134
|
+
if elm.normal
|
|
2135
|
+
# case of normal element (内容あり要素の場合)
|
|
2130
2136
|
set_mono_info(elm)
|
|
2131
2137
|
|
|
2132
|
-
pif2 =
|
|
2138
|
+
pif2 = self.class.new(self)
|
|
2133
2139
|
|
|
2134
|
-
@elm_ =
|
|
2140
|
+
@elm_ = elm.clone(pif2)
|
|
2135
2141
|
|
|
2136
2142
|
if !elm.mono
|
|
2137
2143
|
pif2.root_element.document = String.new(elm.mixed_content)
|
|
@@ -2148,7 +2154,6 @@ module Meteor
|
|
|
2148
2154
|
# private :shadow
|
|
2149
2155
|
|
|
2150
2156
|
def set_mono_info(elm)
|
|
2151
|
-
|
|
2152
2157
|
@res = @@pattern_set_mono1.match(elm.mixed_content)
|
|
2153
2158
|
|
|
2154
2159
|
if @res
|
|
@@ -2164,7 +2169,7 @@ module Meteor
|
|
|
2164
2169
|
elsif regex.kind_of?(Array)
|
|
2165
2170
|
is_match_a(regex, str)
|
|
2166
2171
|
elsif regex.kind_of?(String)
|
|
2167
|
-
if regex
|
|
2172
|
+
if regex == str.downcase
|
|
2168
2173
|
true
|
|
2169
2174
|
else
|
|
2170
2175
|
false
|
|
@@ -2189,9 +2194,7 @@ module Meteor
|
|
|
2189
2194
|
def is_match_a(regex, str)
|
|
2190
2195
|
str = str.downcase
|
|
2191
2196
|
regex.each do |item|
|
|
2192
|
-
if item
|
|
2193
|
-
return true
|
|
2194
|
-
end
|
|
2197
|
+
return true if item == str
|
|
2195
2198
|
end
|
|
2196
2199
|
|
|
2197
2200
|
false
|
|
@@ -2209,25 +2212,6 @@ module Meteor
|
|
|
2209
2212
|
|
|
2210
2213
|
private :is_match_s
|
|
2211
2214
|
|
|
2212
|
-
def create(pif)
|
|
2213
|
-
case pif.doc_type
|
|
2214
|
-
when Parser::HTML
|
|
2215
|
-
Meteor::Ml::Html::ParserImpl.new
|
|
2216
|
-
when Parser::XML
|
|
2217
|
-
Meteor::Ml::Xml::ParserImpl.new
|
|
2218
|
-
when Parser::XHTML
|
|
2219
|
-
Meteor::Ml::Xhtml::ParserImpl.new
|
|
2220
|
-
when Parser::HTML4
|
|
2221
|
-
Meteor::Ml::Html4::ParserImpl.new
|
|
2222
|
-
when Parser::XHTML4
|
|
2223
|
-
Meteor::Ml::Xhtml4::ParserImpl.new
|
|
2224
|
-
else
|
|
2225
|
-
nil
|
|
2226
|
-
end
|
|
2227
|
-
end
|
|
2228
|
-
|
|
2229
|
-
private :create
|
|
2230
|
-
|
|
2231
2215
|
def escape(content)
|
|
2232
2216
|
# replace special character (特殊文字の置換)
|
|
2233
2217
|
content = content.gsub(@@pattern_escape, TABLE_FOR_ESCAPE_)
|
data/lib/meteor/element.rb
CHANGED
|
@@ -17,8 +17,8 @@ module Meteor
|
|
|
17
17
|
# @return [String] pattern (パターン)
|
|
18
18
|
# @!attribute [rw] document_sync
|
|
19
19
|
# @return [true,false] document update flag (ドキュメント更新フラグ)
|
|
20
|
-
# @!attribute [rw]
|
|
21
|
-
# @return [true,false] content
|
|
20
|
+
# @!attribute [rw] normal
|
|
21
|
+
# @return [true,false] content normal flag (内容存在フラグ)
|
|
22
22
|
# @!attribute [rw] cx
|
|
23
23
|
# @return [true,false] comment extension tag flag (コメント拡張タグフラグ)
|
|
24
24
|
# @!attribute [rw] mono
|
|
@@ -43,7 +43,7 @@ module Meteor
|
|
|
43
43
|
attr_accessor :raw_content
|
|
44
44
|
attr_accessor :pattern
|
|
45
45
|
attr_accessor :document_sync
|
|
46
|
-
attr_accessor :
|
|
46
|
+
attr_accessor :normal
|
|
47
47
|
attr_accessor :cx
|
|
48
48
|
attr_accessor :mono
|
|
49
49
|
attr_accessor :parser
|
|
@@ -56,6 +56,9 @@ module Meteor
|
|
|
56
56
|
alias_method :tag, :name
|
|
57
57
|
alias_method :tag=, :name=
|
|
58
58
|
|
|
59
|
+
alias_method :empty, :normal
|
|
60
|
+
alias_method :empty=, :normal=
|
|
61
|
+
|
|
59
62
|
#
|
|
60
63
|
# initializer (イニシャライザ)
|
|
61
64
|
# @overload initialize(name)
|
|
@@ -77,19 +80,7 @@ module Meteor
|
|
|
77
80
|
raise ArgumentError
|
|
78
81
|
end
|
|
79
82
|
when Meteor::TWO
|
|
80
|
-
|
|
81
|
-
@attributes = String.new(args[0].attributes)
|
|
82
|
-
@mixed_content = String.new(args[0].mixed_content)
|
|
83
|
-
# @pattern = String.new(args[0].pattern)
|
|
84
|
-
@pattern = args[0].pattern
|
|
85
|
-
@document = String.new(args[0].document)
|
|
86
|
-
@empty = args[0].empty
|
|
87
|
-
@cx = args[0].cx
|
|
88
|
-
@mono = args[0].mono
|
|
89
|
-
@parser = args[1]
|
|
90
|
-
# @usable = false
|
|
91
|
-
@origin = args[0]
|
|
92
|
-
args[0].copy = self
|
|
83
|
+
initialize_2(args[0], args[1])
|
|
93
84
|
when Meteor::ZERO
|
|
94
85
|
else
|
|
95
86
|
raise ArgumentError
|
|
@@ -107,7 +98,7 @@ module Meteor
|
|
|
107
98
|
# @pattern = nil
|
|
108
99
|
# @document = nil
|
|
109
100
|
# @parser=nil
|
|
110
|
-
# @
|
|
101
|
+
# @normal = false
|
|
111
102
|
# @cx = false
|
|
112
103
|
# @mono = false
|
|
113
104
|
# @parent = false
|
|
@@ -121,45 +112,48 @@ module Meteor
|
|
|
121
112
|
# @param [Meteor::Element] elm element (要素)
|
|
122
113
|
#
|
|
123
114
|
def initialize_e(elm)
|
|
124
|
-
|
|
125
|
-
@attributes = String.new(elm.attributes)
|
|
126
|
-
# @pattern = String.new(elm.pattern)
|
|
127
|
-
@pattern = elm.pattern
|
|
128
|
-
@document = String.new(elm.document)
|
|
129
|
-
@empty = elm.empty
|
|
130
|
-
@cx = elm.cx
|
|
131
|
-
@mono = elm.mono
|
|
132
|
-
@origin = elm
|
|
133
|
-
@parser = elm.parser
|
|
115
|
+
initialize_2(elm, elm.parser)
|
|
134
116
|
@usable = true
|
|
135
117
|
end
|
|
136
118
|
|
|
137
119
|
private :initialize_e
|
|
138
120
|
|
|
121
|
+
def initialize_2(elm, ps)
|
|
122
|
+
@parser = ps
|
|
123
|
+
if self.normal
|
|
124
|
+
ps.element(elm)
|
|
125
|
+
else
|
|
126
|
+
@name = elm.name
|
|
127
|
+
@attributes = String.new(elm.attributes)
|
|
128
|
+
@mixed_content = String.new(elm.mixed_content)
|
|
129
|
+
# @pattern = String.new(elm.pattern)
|
|
130
|
+
@pattern = elm.pattern
|
|
131
|
+
@document = String.new(elm.document)
|
|
132
|
+
@normal = elm.normal
|
|
133
|
+
@cx = elm.cx
|
|
134
|
+
@mono = elm.mono
|
|
135
|
+
@origin = elm
|
|
136
|
+
# @usable = false
|
|
137
|
+
elm.copy = self
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
private :initialize_2
|
|
142
|
+
|
|
139
143
|
#
|
|
140
|
-
#
|
|
141
|
-
# @overload
|
|
142
|
-
# @
|
|
144
|
+
# clone (複製する)
|
|
145
|
+
# @overload clone()
|
|
146
|
+
# @return [Meteor::Element] element (要素)
|
|
147
|
+
# @overload clone(ps)
|
|
143
148
|
# @param [Meteor::Parser] ps parser (パーサ)
|
|
144
149
|
# @return [Meteor::Element] element (要素)
|
|
145
150
|
#
|
|
146
|
-
def
|
|
151
|
+
def clone(*args)
|
|
147
152
|
case args.length
|
|
148
|
-
when Meteor::
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
@obj.mixed_content = String.new(args[0].mixed_content)
|
|
153
|
-
# @obj.pattern = String.new(args[0].pattern)
|
|
154
|
-
@obj.document = String.new(args[0].document)
|
|
155
|
-
@obj
|
|
156
|
-
else
|
|
157
|
-
@obj = self.new(args[0], args[1])
|
|
158
|
-
args[1].element_hook = @obj
|
|
159
|
-
@obj
|
|
160
|
-
end
|
|
161
|
-
else
|
|
162
|
-
raise ArgumentError
|
|
153
|
+
when Meteor::ZERO
|
|
154
|
+
clone_0
|
|
155
|
+
when Meteor::ONE
|
|
156
|
+
clone_1(args[0])
|
|
163
157
|
end
|
|
164
158
|
end
|
|
165
159
|
|
|
@@ -167,7 +161,7 @@ module Meteor
|
|
|
167
161
|
# clone (複製する)
|
|
168
162
|
# @return [Meteor::Element] element (要素)
|
|
169
163
|
#
|
|
170
|
-
def
|
|
164
|
+
def clone_0
|
|
171
165
|
obj = self.parser.element_cache[self.object_id]
|
|
172
166
|
if obj
|
|
173
167
|
obj.attributes = String.new(self.attributes)
|
|
@@ -177,12 +171,36 @@ module Meteor
|
|
|
177
171
|
obj.usable = true
|
|
178
172
|
obj
|
|
179
173
|
else
|
|
180
|
-
obj = self.new(self)
|
|
174
|
+
obj = self.class.new(self)
|
|
181
175
|
self.parser.element_cache[self.object_id] = obj
|
|
182
176
|
obj
|
|
183
177
|
end
|
|
184
178
|
end
|
|
185
179
|
|
|
180
|
+
private :clone_0
|
|
181
|
+
|
|
182
|
+
#
|
|
183
|
+
# clone (複製する)
|
|
184
|
+
# @param [Meteor::Parser] ps parser (パーサ)
|
|
185
|
+
# @return [Meteor::Element] element (要素)
|
|
186
|
+
#
|
|
187
|
+
def clone_1(ps)
|
|
188
|
+
obj = ps.element_hook
|
|
189
|
+
if obj
|
|
190
|
+
obj.attributes = String.new(self.attributes)
|
|
191
|
+
obj.mixed_content = String.new(self.mixed_content)
|
|
192
|
+
# obj.pattern = String.new(self.pattern)
|
|
193
|
+
obj.document = String.new(self.document)
|
|
194
|
+
obj
|
|
195
|
+
else
|
|
196
|
+
obj = self.class.new(self, ps)
|
|
197
|
+
ps.element_hook = obj
|
|
198
|
+
obj
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
private :clone_1
|
|
203
|
+
|
|
186
204
|
#
|
|
187
205
|
# set document (ドキュメントをセットする)
|
|
188
206
|
# @param [String] doc document (ドキュメント)
|
|
@@ -205,7 +223,7 @@ module Meteor
|
|
|
205
223
|
# @pattern_cc = String.new('') << '<!-- @' << elm.name << ' ' << elm.attributes << '-->' << elm.mixed_content << '<!-- /@' << elm.name << ' -->'
|
|
206
224
|
@document = "<!-- @#{@name} #{@attributes} -->#{@mixed_content}<!-- /@#{@name} -->"
|
|
207
225
|
else
|
|
208
|
-
if @
|
|
226
|
+
if @normal
|
|
209
227
|
# @pattern_cc = String.new('') << "<" << elm.name << elm.attributes << '>' << elm.mixed_content << '</' << elm.name << '>'
|
|
210
228
|
@document = "<#{@name}#{@attributes}>#{@mixed_content}</#{@name}>"
|
|
211
229
|
else
|
|
@@ -218,7 +236,7 @@ module Meteor
|
|
|
218
236
|
# @pattern_cc = String.new('') << '<!-- @' << elm.name << ' ' << elm.attributes << '-->' << elm.mixed_content << '<!-- /@' << elm.name << ' -->'
|
|
219
237
|
@document = "<!-- @#{@name} #{@attributes} -->#{@mixed_content}<!-- /@#{@name} -->"
|
|
220
238
|
else
|
|
221
|
-
if @
|
|
239
|
+
if @normal
|
|
222
240
|
# @pattern_cc = String.new('') << "<" << elm.name << elm.attributes << '>' << elm.mixed_content << '</' << elm.name << '>'
|
|
223
241
|
@document = "<#{@name}#{@attributes}>#{@mixed_content}</#{@name}>"
|
|
224
242
|
else
|
|
@@ -195,7 +195,7 @@ module Meteor
|
|
|
195
195
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
|
196
196
|
@res = @pattern.match(@root.document)
|
|
197
197
|
if @res
|
|
198
|
-
|
|
198
|
+
element_void_1(name)
|
|
199
199
|
else
|
|
200
200
|
if @error_check
|
|
201
201
|
puts(Meteor::Exception::NoSuchElementException.new(name).message)
|
|
@@ -204,18 +204,18 @@ module Meteor
|
|
|
204
204
|
@elm_ = nil
|
|
205
205
|
end
|
|
206
206
|
else
|
|
207
|
-
#
|
|
207
|
+
# normal element search pattern (内容あり要素検索用パターン()
|
|
208
208
|
# @pattern_cc = String.new('') << "<" << @_name << '(|\\s[^<>]*)>(((?!(' << @_name
|
|
209
209
|
# @pattern_cc << '[^<>]*>)).)*)<\\/' << @_name << '>'
|
|
210
210
|
@pattern_cc = "<#{@_name}(|\\s[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
211
211
|
|
|
212
212
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
|
213
|
-
# search of
|
|
213
|
+
# search of normal element (内容あり要素検索)
|
|
214
214
|
@res = @pattern.match(@root.document)
|
|
215
|
-
# case of
|
|
215
|
+
# case of normal element (内容あり要素の場合)
|
|
216
216
|
if @res
|
|
217
217
|
@on_search = true
|
|
218
|
-
|
|
218
|
+
element_normal_1(name)
|
|
219
219
|
else
|
|
220
220
|
if @error_check
|
|
221
221
|
puts(Meteor::Exception::NoSuchElementException.new(name).message)
|
|
@@ -230,7 +230,7 @@ module Meteor
|
|
|
230
230
|
|
|
231
231
|
private :element_1
|
|
232
232
|
|
|
233
|
-
def
|
|
233
|
+
def element_void_1(name)
|
|
234
234
|
@elm_ = Meteor::Element.new(name)
|
|
235
235
|
# attribute (属性)
|
|
236
236
|
@elm_.attributes = @res[1]
|
|
@@ -242,7 +242,7 @@ module Meteor
|
|
|
242
242
|
@elm_.parser = self
|
|
243
243
|
end
|
|
244
244
|
|
|
245
|
-
private :
|
|
245
|
+
private :element_void_1
|
|
246
246
|
|
|
247
247
|
#
|
|
248
248
|
# get element using tag name and attribute(name="value") (要素のタグ名、属性(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -270,7 +270,7 @@ module Meteor
|
|
|
270
270
|
# void element search (空要素検索)
|
|
271
271
|
@res = @pattern.match(@root.document)
|
|
272
272
|
if @res
|
|
273
|
-
|
|
273
|
+
element_void_3(name)
|
|
274
274
|
else
|
|
275
275
|
if @error_check
|
|
276
276
|
puts(Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message)
|
|
@@ -279,22 +279,22 @@ module Meteor
|
|
|
279
279
|
@elm_ = nil
|
|
280
280
|
end
|
|
281
281
|
else
|
|
282
|
-
#
|
|
282
|
+
# normal element search pattern (内容あり要素検索パターン)
|
|
283
283
|
# @pattern_cc = String.new('') << "<" << @_name << '(\\s[^<>]*' << @_attr_name << '="'
|
|
284
284
|
# @pattern_cc << @_attr_value << '"[^<>]*)>(((?!(' << @_name
|
|
285
285
|
# @pattern_cc << '[^<>]*>)).)*)<\\/' << @_name << '>'
|
|
286
286
|
@pattern_cc = "<#{@_name}(\\s[^<>]*#{@_attr_name}=\"#{@_attr_value}\"[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
287
287
|
|
|
288
288
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
|
289
|
-
# search of
|
|
289
|
+
# search of normal element (内容あり要素検索)
|
|
290
290
|
@res = @pattern.match(@root.document)
|
|
291
291
|
|
|
292
292
|
if !@res && !is_match(@@match_tag_nne, name)
|
|
293
|
-
@res =
|
|
293
|
+
@res = element_normal_3_2
|
|
294
294
|
end
|
|
295
295
|
|
|
296
296
|
if @res
|
|
297
|
-
|
|
297
|
+
element_normal_3_1(name)
|
|
298
298
|
else
|
|
299
299
|
if @error_check
|
|
300
300
|
puts(Meteor::Exception::NoSuchElementException.new(name, attr_name, attr_value).message)
|
|
@@ -309,11 +309,11 @@ module Meteor
|
|
|
309
309
|
|
|
310
310
|
private :element_3
|
|
311
311
|
|
|
312
|
-
def
|
|
313
|
-
|
|
312
|
+
def element_void_3(name)
|
|
313
|
+
element_void_3_1(name, "\"[^<>]*)>")
|
|
314
314
|
end
|
|
315
315
|
|
|
316
|
-
private :
|
|
316
|
+
private :element_void_3
|
|
317
317
|
|
|
318
318
|
#
|
|
319
319
|
# get element using attribute(name="value") (属性(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -373,7 +373,7 @@ module Meteor
|
|
|
373
373
|
@res = @pattern.match(@root.document)
|
|
374
374
|
|
|
375
375
|
if @res
|
|
376
|
-
|
|
376
|
+
element_void_5(name)
|
|
377
377
|
else
|
|
378
378
|
if @error_check
|
|
379
379
|
puts(
|
|
@@ -386,7 +386,7 @@ module Meteor
|
|
|
386
386
|
@elm_ = nil
|
|
387
387
|
end
|
|
388
388
|
else
|
|
389
|
-
#
|
|
389
|
+
# normal element search pattern (内容あり要素検索パターン)
|
|
390
390
|
# @pattern_cc = String.new('') << "<" << @_name << '(\\s[^<>]*(?:' << @_attr_name1 << '="'
|
|
391
391
|
# @pattern_cc << @_attr_value1 << '"[^<>]*' << @_attr_name2 << '="'
|
|
392
392
|
# @pattern_cc << @_attr_value2 << '"|' << @_attr_name2 << '="'
|
|
@@ -396,15 +396,15 @@ module Meteor
|
|
|
396
396
|
@pattern_cc = "<#{@_name}(\\s[^<>]*(?:#{@_attr_name1}=\"#{@_attr_value1}\"[^<>]*#{@_attr_name2}=\"#{@_attr_value2}\"|#{@_attr_name2}=\"#{@_attr_value2}\"[^<>]*#{@_attr_name1}=\"#{@_attr_value1}\")[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
397
397
|
|
|
398
398
|
@pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc)
|
|
399
|
-
# search of
|
|
399
|
+
# search of normal element (内容あり要素検索)
|
|
400
400
|
@res = @pattern.match(@root.document)
|
|
401
401
|
|
|
402
402
|
if !@res && !is_match(@@match_tag_nne, tag)
|
|
403
|
-
@res =
|
|
403
|
+
@res = element_normal_5_2
|
|
404
404
|
end
|
|
405
405
|
|
|
406
406
|
if @res
|
|
407
|
-
|
|
407
|
+
element_normal_5_1(name)
|
|
408
408
|
else
|
|
409
409
|
if @error_check
|
|
410
410
|
puts(
|
|
@@ -423,11 +423,11 @@ module Meteor
|
|
|
423
423
|
|
|
424
424
|
private :element_5
|
|
425
425
|
|
|
426
|
-
def
|
|
427
|
-
|
|
426
|
+
def element_void_5(name)
|
|
427
|
+
element_void_5_1(name, "\")[^<>]*)>")
|
|
428
428
|
end
|
|
429
429
|
|
|
430
|
-
private :
|
|
430
|
+
private :element_void_5
|
|
431
431
|
|
|
432
432
|
#
|
|
433
433
|
# get element using attribute1,2(name="value") (属性1・属性2(属性名="属性値")で検索し、要素を取得する)
|
|
@@ -493,7 +493,7 @@ module Meteor
|
|
|
493
493
|
@res = match_p.match(elm.attributes)
|
|
494
494
|
|
|
495
495
|
if !@res
|
|
496
|
-
if
|
|
496
|
+
if elm.attributes != "" && elm.attributes.strip != ""
|
|
497
497
|
elm.attributes = String.new("") << " " << elm.attributes.strip
|
|
498
498
|
else
|
|
499
499
|
elm.attributes = String.new("")
|
data/lib/meteor/parsers.rb
CHANGED
|
@@ -190,7 +190,7 @@ module Meteor
|
|
|
190
190
|
if paths.length == 1
|
|
191
191
|
return File.basename(paths[0], ".*")
|
|
192
192
|
else
|
|
193
|
-
if
|
|
193
|
+
if paths[0] == "."
|
|
194
194
|
paths.delete_at(0)
|
|
195
195
|
paths[paths.length - 1] = File.basename(paths[paths.length - 1], ".*")
|
|
196
196
|
return String.new("") << "/" << paths.join("/")
|
data/lib/meteor/root_element.rb
CHANGED
|
@@ -11,14 +11,17 @@ module Meteor
|
|
|
11
11
|
# @return [String] newline (改行コード)
|
|
12
12
|
# @!attribute [rw] charset
|
|
13
13
|
# @return [String] charset (文字コード)
|
|
14
|
-
# @!attribute [rw]
|
|
14
|
+
# @!attribute [rw] enc
|
|
15
15
|
# @return [String] character encoding (文字エンコーディング)
|
|
16
16
|
#
|
|
17
17
|
class RootElement < Element
|
|
18
18
|
attr_accessor :content_type
|
|
19
19
|
attr_accessor :kaigyo_code
|
|
20
20
|
attr_accessor :charset
|
|
21
|
-
attr_accessor :
|
|
21
|
+
attr_accessor :enc
|
|
22
22
|
# attr_accessor :document #[String] document (ドキュメント)
|
|
23
|
+
|
|
24
|
+
alias_method :character_encoding, :enc
|
|
25
|
+
alias_method :character_encoding=, :enc=
|
|
23
26
|
end
|
|
24
27
|
end
|
data/lib/meteor.rb
CHANGED
|
@@ -36,11 +36,11 @@ require "meteor/ml/xml/parser_impl"
|
|
|
36
36
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
37
37
|
#
|
|
38
38
|
# @author Yasumasa Ashida
|
|
39
|
-
# @version 0.9.
|
|
39
|
+
# @version 0.9.26
|
|
40
40
|
#
|
|
41
41
|
|
|
42
42
|
module Meteor
|
|
43
|
-
VERSION = "0.9.
|
|
43
|
+
VERSION = "0.9.26"
|
|
44
44
|
|
|
45
45
|
# require 'fileutils'
|
|
46
46
|
|