meteor 0.9.20 → 0.9.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ChangeLog +8 -0
- data/Gemfile.lock +1 -1
- data/lib/meteor/core/kernel.rb +107 -10
- data/lib/meteor/core/util/pattern_cache.rb +4 -4
- data/lib/meteor/elements.rb +4 -4
- data/lib/meteor/ml/html4/parser_impl.rb +5 -100
- data/lib/meteor/ml/xhtml4/parser_impl.rb +5 -98
- data/lib/meteor/parsers.rb +17 -17
- 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: ec1fa5d45083f5b41c12374b02afa97f609abfd602cadb73b5b02634ef7eb899
|
|
4
|
+
data.tar.gz: c23916a4fb90c750ae8a7cec4566bd8fa264b12eb02b31fdd28f638d7aedf21d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2001c1c0e0308fbebd123f242e2f553e3231f22ba7f6b2e8ceed25ef438a1cd6d758d955f64e07edecfaa1ad85ddb8454a139eca0cc8bc5f1c608cab72fa0616
|
|
7
|
+
data.tar.gz: 5af3fa38323c059cd3308a6aa3e80d804081233486956aec32bd816d79b3e3a42ae541506eaf8ca0dc0f721765ae5d9c234b124b22695b673e263f5cecfbf1b7
|
data/ChangeLog
CHANGED
data/Gemfile.lock
CHANGED
data/lib/meteor/core/kernel.rb
CHANGED
|
@@ -52,6 +52,39 @@ module Meteor
|
|
|
52
52
|
@@pattern_clean1 = Regexp.new("<!--\\s@[^<>]*\\s[^<>]*(\\s)*-->")
|
|
53
53
|
@@pattern_clean2 = Regexp.new("<!--\\s\\/@[^<>]*(\\s)*-->")
|
|
54
54
|
|
|
55
|
+
BR = "<br>"
|
|
56
|
+
BR_RE = BR
|
|
57
|
+
|
|
58
|
+
TABLE_FOR_ESCAPE_ = {
|
|
59
|
+
"&" => "&",
|
|
60
|
+
"\"" => """,
|
|
61
|
+
"'" => "'",
|
|
62
|
+
"<" => "<",
|
|
63
|
+
">" => ">",
|
|
64
|
+
" " => " "
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
TABLE_FOR_ESCAPE_CONTENT_ = {
|
|
68
|
+
"&" => "&",
|
|
69
|
+
"\"" => """,
|
|
70
|
+
"'" => "'",
|
|
71
|
+
"<" => "<",
|
|
72
|
+
">" => ">",
|
|
73
|
+
" " => " ",
|
|
74
|
+
"\r\n" => BR,
|
|
75
|
+
"\r" => BR,
|
|
76
|
+
"\n" => BR
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
PATTERN_ESCAPE = "[&\"'<> ]"
|
|
80
|
+
PATTERN_ESCAPE_CONTENT = "[&\"'<> \\n]"
|
|
81
|
+
@@pattern_escape = Regexp.new(PATTERN_ESCAPE)
|
|
82
|
+
@@pattern_escape_content = Regexp.new(PATTERN_ESCAPE_CONTENT)
|
|
83
|
+
|
|
84
|
+
PATTERN_UNESCAPE = "&(amp|quot|apos|gt|lt|nbsp);"
|
|
85
|
+
@@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
|
|
86
|
+
@@pattern_br_2 = Regexp.new(BR_RE)
|
|
87
|
+
|
|
55
88
|
attr_accessor :element_cache
|
|
56
89
|
attr_accessor :doc_type
|
|
57
90
|
attr_accessor :document_hook
|
|
@@ -323,7 +356,7 @@ module Meteor
|
|
|
323
356
|
# document (全体)
|
|
324
357
|
@elm_.document = @res[0]
|
|
325
358
|
end
|
|
326
|
-
#
|
|
359
|
+
# content-rich element search pattern (内容あり要素検索用パターン)
|
|
327
360
|
# @pattern_cc = String.new('') << "<" << @_name << '(?:|\\s[^<>]*)>((?!(' << @_name
|
|
328
361
|
# @pattern_cc << '[^<>]*>)).)*<\\/' << @_name << '>'
|
|
329
362
|
@pattern_cc = "<#{@_name}(|\\s[^<>]*)>(((?!(#{@_name}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
@@ -441,15 +474,15 @@ module Meteor
|
|
|
441
474
|
# puts @res.captures.length
|
|
442
475
|
case @res.captures.length
|
|
443
476
|
when FOUR
|
|
444
|
-
# 要素
|
|
477
|
+
# element (要素)
|
|
445
478
|
@elm_ = Meteor::Element.new(name)
|
|
446
|
-
# 属性
|
|
479
|
+
# attribute (属性)
|
|
447
480
|
@elm_.attributes = @res[1]
|
|
448
|
-
# 内容
|
|
481
|
+
# content (内容)
|
|
449
482
|
@elm_.mixed_content = @res[2]
|
|
450
|
-
# 全体
|
|
483
|
+
# document (全体)
|
|
451
484
|
@elm_.document = @res[0]
|
|
452
|
-
# 内容あり要素検索用パターン
|
|
485
|
+
# content-rich element search pattern (内容あり要素検索用パターン)
|
|
453
486
|
# @pattern_cc = String.new('')<< "<" << @_name << '\\s[^<>]*' << @_attr_name << '="'
|
|
454
487
|
# @pattern_cc << @_attr_value << '"[^<>]*>((?!(' << @_name
|
|
455
488
|
# @pattern_cc << '[^<>]*>)).)*<\\/' << @_name << '>'
|
|
@@ -469,7 +502,7 @@ module Meteor
|
|
|
469
502
|
@elm_.mixed_content = @res[3]
|
|
470
503
|
# document (全体)
|
|
471
504
|
@elm_.document = @res[0]
|
|
472
|
-
#
|
|
505
|
+
# content-rich element search pattern (内容あり要素検索用パターン)
|
|
473
506
|
# @pattern_cc = String.new('')<< "<" << @_name << '\\s[^<>]*' << @_attr_name << '="'
|
|
474
507
|
# @pattern_cc << @_attr_value << '"[^<>]*>((?!(' << @_name
|
|
475
508
|
# @pattern_cc << '[^<>]*>)).)*<\\/' << @_name << '>'
|
|
@@ -497,7 +530,7 @@ module Meteor
|
|
|
497
530
|
end
|
|
498
531
|
# document (全体)
|
|
499
532
|
@elm_.document = @res[0]
|
|
500
|
-
#
|
|
533
|
+
# content-rich element search pattern (内容あり要素検索用パターン)
|
|
501
534
|
@elm_.pattern = @pattern_cc
|
|
502
535
|
|
|
503
536
|
@elm_.empty = true
|
|
@@ -942,7 +975,7 @@ module Meteor
|
|
|
942
975
|
@elm_.mixed_content = @res[3]
|
|
943
976
|
# document (全体)
|
|
944
977
|
@elm_.document = @res[0]
|
|
945
|
-
#
|
|
978
|
+
# content-rich element search pattern (要素ありタグ検索用パターン)
|
|
946
979
|
@elm_.pattern = @pattern_cc
|
|
947
980
|
|
|
948
981
|
@elm_.empty = true
|
|
@@ -2069,7 +2102,6 @@ module Meteor
|
|
|
2069
2102
|
else
|
|
2070
2103
|
reflect
|
|
2071
2104
|
@element_cache.clear
|
|
2072
|
-
# フック判定が"false"の場合
|
|
2073
2105
|
clean
|
|
2074
2106
|
end
|
|
2075
2107
|
end
|
|
@@ -2195,6 +2227,71 @@ module Meteor
|
|
|
2195
2227
|
end
|
|
2196
2228
|
|
|
2197
2229
|
private :create
|
|
2230
|
+
|
|
2231
|
+
def escape(content)
|
|
2232
|
+
# replace special character (特殊文字の置換)
|
|
2233
|
+
content = content.gsub(@@pattern_escape, TABLE_FOR_ESCAPE_)
|
|
2234
|
+
|
|
2235
|
+
content
|
|
2236
|
+
end
|
|
2237
|
+
|
|
2238
|
+
def escape_content(content, elm)
|
|
2239
|
+
# replace special character (特殊文字の置換)
|
|
2240
|
+
content = content.gsub(@@pattern_escape_content, TABLE_FOR_ESCAPE_CONTENT_)
|
|
2241
|
+
|
|
2242
|
+
content
|
|
2243
|
+
end
|
|
2244
|
+
|
|
2245
|
+
private :escape
|
|
2246
|
+
private :escape_content
|
|
2247
|
+
|
|
2248
|
+
def unescape(content)
|
|
2249
|
+
# replace special character (特殊文字の置換)
|
|
2250
|
+
# 「<」<-「<」
|
|
2251
|
+
# 「>」<-「>」
|
|
2252
|
+
# 「"」<-「"l」
|
|
2253
|
+
# 「 」<-「 」
|
|
2254
|
+
# 「&」<-「&」
|
|
2255
|
+
content.gsub(@@pattern_unescape) do
|
|
2256
|
+
case $1
|
|
2257
|
+
when "amp"
|
|
2258
|
+
"&"
|
|
2259
|
+
when "quot"
|
|
2260
|
+
"\""
|
|
2261
|
+
when "apos"
|
|
2262
|
+
"'"
|
|
2263
|
+
when "gt"
|
|
2264
|
+
">"
|
|
2265
|
+
when "lt"
|
|
2266
|
+
"<"
|
|
2267
|
+
when "nbsp"
|
|
2268
|
+
" "
|
|
2269
|
+
end
|
|
2270
|
+
end
|
|
2271
|
+
|
|
2272
|
+
content
|
|
2273
|
+
end
|
|
2274
|
+
|
|
2275
|
+
private :unescape
|
|
2276
|
+
|
|
2277
|
+
def br_to_newline(content)
|
|
2278
|
+
if (elm.cx || !is_match(@@match_tag_2, elm.name)) && content.include?(BR)
|
|
2279
|
+
# 「<br>」->「¥r?¥n」
|
|
2280
|
+
content.gsub!(@@pattern_br_2, @root.kaigyo_code)
|
|
2281
|
+
end
|
|
2282
|
+
end
|
|
2283
|
+
|
|
2284
|
+
private :br_to_newline
|
|
2285
|
+
|
|
2286
|
+
def unescape_content(content, elm)
|
|
2287
|
+
content_ = unescape(content)
|
|
2288
|
+
|
|
2289
|
+
br_to_newline(content_)
|
|
2290
|
+
|
|
2291
|
+
content_
|
|
2292
|
+
end
|
|
2293
|
+
|
|
2294
|
+
private :unescape_content
|
|
2198
2295
|
end
|
|
2199
2296
|
end
|
|
2200
2297
|
end
|
|
@@ -76,10 +76,10 @@ module Meteor
|
|
|
76
76
|
# end
|
|
77
77
|
|
|
78
78
|
##
|
|
79
|
-
## パターンを取得する
|
|
80
|
-
## @param [String] regex 正規表現
|
|
81
|
-
## @param [Integer] option オプション
|
|
82
|
-
## @return [Regexp] パターン
|
|
79
|
+
## get pattern (パターンを取得する)
|
|
80
|
+
## @param [String] regex (正規表現)
|
|
81
|
+
## @param [Integer] option (オプション)
|
|
82
|
+
## @return [Regexp] psttern (パターン)
|
|
83
83
|
##
|
|
84
84
|
# def self.get_2(regex, option)
|
|
85
85
|
# ## pattern = @@regex_cache[regex]
|
data/lib/meteor/elements.rb
CHANGED
|
@@ -24,13 +24,13 @@ module Meteor
|
|
|
24
24
|
|
|
25
25
|
#
|
|
26
26
|
#@overload add(type,relative_path,enc)
|
|
27
|
-
#
|
|
27
|
+
# add parser (パーサを追加する)
|
|
28
28
|
# @param [Integer] type type of parser (パーサ・タイプ)
|
|
29
29
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
30
30
|
# @param [String] enc character encoding (エンコーディング)
|
|
31
31
|
# @return [Meteor::Parser] parser (パーサ)
|
|
32
32
|
#@overload add(type,relative_path)
|
|
33
|
-
#
|
|
33
|
+
# add parser (パーサを追加する)
|
|
34
34
|
# @param [Integer] type type of parser (パーサ・タイプ)
|
|
35
35
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
36
36
|
# @return [Meteor::Parser] parser (パーサ)
|
|
@@ -41,13 +41,13 @@ module Meteor
|
|
|
41
41
|
|
|
42
42
|
#
|
|
43
43
|
# @overload add_str(type, relative_url, doc)
|
|
44
|
-
#
|
|
44
|
+
# add parser (パーサを追加する)
|
|
45
45
|
# @param [Integer] type type of parser (パーサ・タイプ)
|
|
46
46
|
# @param [String] relative_url relative URL (相対URL)
|
|
47
47
|
# @param [String] doc document (ドキュメント)
|
|
48
48
|
# @return [Meteor::Parser] parser (パーサ)
|
|
49
49
|
# @overload add_str(relative_url, doc)
|
|
50
|
-
#
|
|
50
|
+
# add parser (パーサを追加する)
|
|
51
51
|
# @param [String] relative_url relative URL (相対URL)
|
|
52
52
|
# @param [String] doc document (ドキュメント)
|
|
53
53
|
# @return [Meteor::Parser] parser (パーサ)
|
|
@@ -12,6 +12,7 @@ module Meteor
|
|
|
12
12
|
# KAIGYO_CODE = "\r\n|\n|\r"
|
|
13
13
|
KAIGYO_CODE = ["\r\n", "\n", "\r"]
|
|
14
14
|
BR = "<br>"
|
|
15
|
+
BR_RE = BR
|
|
15
16
|
|
|
16
17
|
# @@match_tag = "br|hr|img|input|meta|base"
|
|
17
18
|
#[Array] void elemets (空要素)
|
|
@@ -52,7 +53,6 @@ module Meteor
|
|
|
52
53
|
# @@pattern_true = Regexp.new("true")
|
|
53
54
|
# @@pattern_false = Regexp.new("false")
|
|
54
55
|
|
|
55
|
-
|
|
56
56
|
GET_ATTRS_MAP2 = "\\s(disabled|readonly|checked|selected|multiple)"
|
|
57
57
|
|
|
58
58
|
@@pattern_selected_m = Regexp.new(SELECTED_M)
|
|
@@ -71,36 +71,6 @@ module Meteor
|
|
|
71
71
|
# @@pattern_match_tag = Regexp.new(@@match_tag)
|
|
72
72
|
# @@pattern_match_tag2 = Regexp.new(@@match_tag_2)
|
|
73
73
|
|
|
74
|
-
TABLE_FOR_ESCAPE_ = {
|
|
75
|
-
"&" => "&",
|
|
76
|
-
"\"" => """,
|
|
77
|
-
"'" => "'",
|
|
78
|
-
"<" => "<",
|
|
79
|
-
">" => ">",
|
|
80
|
-
" " => " "
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
TABLE_FOR_ESCAPE_CONTENT_ = {
|
|
84
|
-
"&" => "&",
|
|
85
|
-
"\"" => """,
|
|
86
|
-
"'" => "'",
|
|
87
|
-
"<" => "<",
|
|
88
|
-
">" => ">",
|
|
89
|
-
" " => " ",
|
|
90
|
-
"\r\n" => "<br>",
|
|
91
|
-
"\r" => "<br>",
|
|
92
|
-
"\n" => "<br>"
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
PATTERN_ESCAPE = "[&\"'<> ]"
|
|
96
|
-
PATTERN_ESCAPE_CONTENT = "[&\"'<> \\n]"
|
|
97
|
-
@@pattern_escape = Regexp.new(PATTERN_ESCAPE)
|
|
98
|
-
@@pattern_escape_content = Regexp.new(PATTERN_ESCAPE_CONTENT)
|
|
99
|
-
|
|
100
|
-
PATTERN_UNESCAPE = "&(amp|quot|apos|gt|lt|nbsp);"
|
|
101
|
-
@@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
|
|
102
|
-
@@pattern_br_2 = Regexp.new(BR)
|
|
103
|
-
|
|
104
74
|
#
|
|
105
75
|
# initializer (イニシャライザ)
|
|
106
76
|
# @overload initialize
|
|
@@ -234,7 +204,7 @@ module Meteor
|
|
|
234
204
|
@elm_ = nil
|
|
235
205
|
end
|
|
236
206
|
else
|
|
237
|
-
#
|
|
207
|
+
# content-rich element search pattern (内容あり要素検索用パターン()
|
|
238
208
|
# @pattern_cc = String.new('') << "<" << @_name << '(|\\s[^<>]*)>(((?!(' << @_name
|
|
239
209
|
# @pattern_cc << '[^<>]*>)).)*)<\\/' << @_name << '>'
|
|
240
210
|
@pattern_cc = "<#{@_name}(|\\s[^<>]*)>(((?!(#{tag}[^<>]*>)).)*)<\\/#{@_name}>"
|
|
@@ -308,7 +278,7 @@ module Meteor
|
|
|
308
278
|
@elm_ = nil
|
|
309
279
|
end
|
|
310
280
|
else
|
|
311
|
-
#
|
|
281
|
+
# content-rich element search pattern (内容あり要素検索パターン)
|
|
312
282
|
# @pattern_cc = String.new('') << "<" << @_name << '(\\s[^<>]*' << @_attr_name << '="'
|
|
313
283
|
# @pattern_cc << @_attr_value << '"[^<>]*)>(((?!(' << @_name
|
|
314
284
|
# @pattern_cc << '[^<>]*>)).)*)<\\/' << @_name << '>'
|
|
@@ -387,7 +357,7 @@ module Meteor
|
|
|
387
357
|
def element_5(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
|
388
358
|
quote_element_5(name, attr_name1, attr_value1, attr_name2, attr_value2)
|
|
389
359
|
|
|
390
|
-
# 空要素の場合(<->内容あり要素の場合)
|
|
360
|
+
# case of void element (空要素の場合(<->内容あり要素の場合))
|
|
391
361
|
if is_match(@@match_tag, name)
|
|
392
362
|
# void element search pattern (空要素検索パターン)
|
|
393
363
|
# @pattern_cc = String.new('') << "<" << @_name << '(\\s[^<>]*(?:' << @_attr_name1 << '="'
|
|
@@ -415,7 +385,7 @@ module Meteor
|
|
|
415
385
|
@elm_ = nil
|
|
416
386
|
end
|
|
417
387
|
else
|
|
418
|
-
#
|
|
388
|
+
# content-rich element search pattern (内容あり要素検索パターン)
|
|
419
389
|
# @pattern_cc = String.new('') << "<" << @_name << '(\\s[^<>]*(?:' << @_attr_name1 << '="'
|
|
420
390
|
# @pattern_cc << @_attr_value1 << '"[^<>]*' << @_attr_name2 << '="'
|
|
421
391
|
# @pattern_cc << @_attr_value2 << '"|' << @_attr_name2 << '="'
|
|
@@ -646,71 +616,6 @@ module Meteor
|
|
|
646
616
|
end
|
|
647
617
|
|
|
648
618
|
private :remove_attrs_
|
|
649
|
-
|
|
650
|
-
def escape(content)
|
|
651
|
-
# replace special character (特殊文字の置換)
|
|
652
|
-
content = content.gsub(@@pattern_escape, TABLE_FOR_ESCAPE_)
|
|
653
|
-
|
|
654
|
-
content
|
|
655
|
-
end
|
|
656
|
-
|
|
657
|
-
def escape_content(content, elm)
|
|
658
|
-
# replace special character (特殊文字の置換)
|
|
659
|
-
content = content.gsub(@@pattern_escape_content, TABLE_FOR_ESCAPE_CONTENT_)
|
|
660
|
-
|
|
661
|
-
content
|
|
662
|
-
end
|
|
663
|
-
|
|
664
|
-
private :escape
|
|
665
|
-
private :escape_content
|
|
666
|
-
|
|
667
|
-
def unescape(content)
|
|
668
|
-
# replace special character (特殊文字の置換)
|
|
669
|
-
# 「<」<-「<」
|
|
670
|
-
# 「>」<-「>」
|
|
671
|
-
# 「"」<-「"l」
|
|
672
|
-
# 「 」<-「 」
|
|
673
|
-
# 「&」<-「&」
|
|
674
|
-
content.gsub(@@pattern_unescape) do
|
|
675
|
-
case $1
|
|
676
|
-
when "amp"
|
|
677
|
-
"&"
|
|
678
|
-
when "quot"
|
|
679
|
-
"\""
|
|
680
|
-
when "apos"
|
|
681
|
-
"'"
|
|
682
|
-
when "gt"
|
|
683
|
-
">"
|
|
684
|
-
when "lt"
|
|
685
|
-
"<"
|
|
686
|
-
when "nbsp"
|
|
687
|
-
" "
|
|
688
|
-
end
|
|
689
|
-
end
|
|
690
|
-
|
|
691
|
-
content
|
|
692
|
-
end
|
|
693
|
-
|
|
694
|
-
private :unescape
|
|
695
|
-
|
|
696
|
-
def br_to_kaigyo(content)
|
|
697
|
-
if (elm.cx || !is_match(@@match_tag_2, elm.name)) && content.include?(BR)
|
|
698
|
-
# 「<br>」->「¥r?¥n」
|
|
699
|
-
content.gsub!(@@pattern_br_2, @root.kaigyo_code)
|
|
700
|
-
end
|
|
701
|
-
end
|
|
702
|
-
|
|
703
|
-
private :br_to_kaigyo
|
|
704
|
-
|
|
705
|
-
def unescape_content(content, elm)
|
|
706
|
-
content_ = unescape(content)
|
|
707
|
-
|
|
708
|
-
br_to_kaigyo(content_)
|
|
709
|
-
|
|
710
|
-
content_
|
|
711
|
-
end
|
|
712
|
-
|
|
713
|
-
private :unescape_content
|
|
714
619
|
end
|
|
715
620
|
end
|
|
716
621
|
end
|
|
@@ -8,13 +8,13 @@ module Meteor
|
|
|
8
8
|
# XHTML4 parser (XHTML4パーサ)
|
|
9
9
|
#
|
|
10
10
|
class ParserImpl < Meteor::Core::Kernel
|
|
11
|
-
|
|
12
11
|
# KAIGYO_CODE = "\r?\n|\r"
|
|
13
12
|
KAIGYO_CODE = ["\r\n", "\n", "\r"]
|
|
14
13
|
BR = "<br/>"
|
|
14
|
+
BR_RE = "<br\\/>"
|
|
15
15
|
|
|
16
16
|
# @@match_tag_2 = "textarea|option|pre"
|
|
17
|
-
#[Array] 改行を<br/>に変換する必要のない要素
|
|
17
|
+
#[Array] elements where line breaks do not need to be converted to <br> (改行を<br/>に変換する必要のない要素)
|
|
18
18
|
@@match_tag_2 = ["textarea", "option", "pre"]
|
|
19
19
|
|
|
20
20
|
#[Array] boolean attributes (論理値で指定する属性)
|
|
@@ -67,36 +67,6 @@ module Meteor
|
|
|
67
67
|
# @@pattern_match_tag = Regexp.new(@@match_tag)
|
|
68
68
|
# @@pattern_match_tag2 = Regexp.new(@@match_tag_2)
|
|
69
69
|
|
|
70
|
-
TABLE_FOR_ESCAPE_ = {
|
|
71
|
-
"&" => "&",
|
|
72
|
-
"\"" => """,
|
|
73
|
-
"'" => "'",
|
|
74
|
-
"<" => "<",
|
|
75
|
-
">" => ">",
|
|
76
|
-
" " => " "
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
TABLE_FOR_ESCAPE_CONTENT_ = {
|
|
80
|
-
"&" => "&",
|
|
81
|
-
"\"" => """,
|
|
82
|
-
"'" => "'",
|
|
83
|
-
"<" => "<",
|
|
84
|
-
">" => ">",
|
|
85
|
-
" " => " ",
|
|
86
|
-
"\r\n" => "<br/>",
|
|
87
|
-
"\r" => "<br/>",
|
|
88
|
-
"\n" => "<br/>"
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
PATTERN_ESCAPE = "[&\"'<> ]"
|
|
92
|
-
PATTERN_ESCAPE_CONTENT = "[&\"'<> \\n]"
|
|
93
|
-
@@pattern_escape = Regexp.new(PATTERN_ESCAPE)
|
|
94
|
-
@@pattern_escape_content = Regexp.new(PATTERN_ESCAPE_CONTENT)
|
|
95
|
-
|
|
96
|
-
PATTERN_UNESCAPE = "&(amp|quot|apos|gt|lt|nbsp);"
|
|
97
|
-
@@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
|
|
98
|
-
@@pattern_br_2 = Regexp.new("<br\\/>")
|
|
99
|
-
|
|
100
70
|
#
|
|
101
71
|
# initializer (イニシャライザ)
|
|
102
72
|
# @overload initialize
|
|
@@ -229,7 +199,7 @@ module Meteor
|
|
|
229
199
|
@res = match_p.match(elm.attributes)
|
|
230
200
|
|
|
231
201
|
if !@res
|
|
232
|
-
# add
|
|
202
|
+
# add an attribute to attributes (属性文字列の最後に新規の属性を追加する)
|
|
233
203
|
if elm.attributes != ""
|
|
234
204
|
elm.attributes = String.new("") << " " << elm.attributes.strip
|
|
235
205
|
# else
|
|
@@ -237,12 +207,12 @@ module Meteor
|
|
|
237
207
|
|
|
238
208
|
elm.attributes << " " << replace_update
|
|
239
209
|
else
|
|
240
|
-
#
|
|
210
|
+
# replace attribute (属性の置換)
|
|
241
211
|
elm.attributes.gsub!(replace_regex, replace_update)
|
|
242
212
|
end
|
|
243
213
|
elsif false.equal?(attr_value) || is_match("false", attr_value)
|
|
244
214
|
# delete if attribute_name attrubute exeists (attr_name属性が存在するなら削除)
|
|
245
|
-
#
|
|
215
|
+
# replace attribute (属性の置換)
|
|
246
216
|
elm.attributes.gsub!(replace_regex, "")
|
|
247
217
|
end
|
|
248
218
|
end
|
|
@@ -339,69 +309,6 @@ module Meteor
|
|
|
339
309
|
end
|
|
340
310
|
|
|
341
311
|
private :get_attr_map
|
|
342
|
-
|
|
343
|
-
def escape(content)
|
|
344
|
-
# replace special character (特殊文字の置換)
|
|
345
|
-
content = content.gsub(@@pattern_escape, TABLE_FOR_ESCAPE_)
|
|
346
|
-
|
|
347
|
-
content
|
|
348
|
-
end
|
|
349
|
-
|
|
350
|
-
def escape_content(content, elm)
|
|
351
|
-
# replace special character (特殊文字の置換)
|
|
352
|
-
content = content.gsub(@@pattern_escape_content, TABLE_FOR_ESCAPE_CONTENT_)
|
|
353
|
-
|
|
354
|
-
content
|
|
355
|
-
end
|
|
356
|
-
|
|
357
|
-
private :escape
|
|
358
|
-
private :escape_content
|
|
359
|
-
|
|
360
|
-
def unescape(content)
|
|
361
|
-
# replace special character (特殊文字の置換)
|
|
362
|
-
# 「<」<-「<」
|
|
363
|
-
# 「>」<-「>」
|
|
364
|
-
# 「"」<-「"l」
|
|
365
|
-
# 「 」<-「 」
|
|
366
|
-
# 「&」<-「&」
|
|
367
|
-
content.gsub(@@pattern_unescape) do
|
|
368
|
-
case $1
|
|
369
|
-
when "amp"
|
|
370
|
-
"&"
|
|
371
|
-
when "quot"
|
|
372
|
-
"\""
|
|
373
|
-
when "apos"
|
|
374
|
-
"'"
|
|
375
|
-
when "gt"
|
|
376
|
-
">"
|
|
377
|
-
when "lt"
|
|
378
|
-
"<"
|
|
379
|
-
when "nbsp"
|
|
380
|
-
" "
|
|
381
|
-
end
|
|
382
|
-
end
|
|
383
|
-
|
|
384
|
-
content
|
|
385
|
-
end
|
|
386
|
-
|
|
387
|
-
private :unescape
|
|
388
|
-
|
|
389
|
-
def br_to_kaigyo(content)
|
|
390
|
-
if (elm.cx || !is_match(@@match_tag_2, elm.name)) && content.include?(BR)
|
|
391
|
-
# 「<br>」->「¥r?¥n」
|
|
392
|
-
content.gsub!(@@pattern_br_2, @root.kaigyo_code)
|
|
393
|
-
end
|
|
394
|
-
end
|
|
395
|
-
|
|
396
|
-
def unescape_content(content, elm)
|
|
397
|
-
content_ = unescape(content)
|
|
398
|
-
|
|
399
|
-
br_to_kaigyo(content_)
|
|
400
|
-
|
|
401
|
-
content_
|
|
402
|
-
end
|
|
403
|
-
|
|
404
|
-
private :unescape_content
|
|
405
312
|
end
|
|
406
313
|
end
|
|
407
314
|
end
|
data/lib/meteor/parsers.rb
CHANGED
|
@@ -65,7 +65,7 @@ module Meteor
|
|
|
65
65
|
private :initialize_0
|
|
66
66
|
|
|
67
67
|
#
|
|
68
|
-
# イニシャライザ
|
|
68
|
+
# initializer (イニシャライザ)
|
|
69
69
|
# @param [String] root root directory (基準ディレクトリ)
|
|
70
70
|
#
|
|
71
71
|
def initialize_1(root)
|
|
@@ -75,7 +75,7 @@ module Meteor
|
|
|
75
75
|
private :initialize_1
|
|
76
76
|
|
|
77
77
|
#
|
|
78
|
-
# イニシャライザ
|
|
78
|
+
# initializer (イニシャライザ)
|
|
79
79
|
# @param [String] root root directory (基準ディレクトリ)
|
|
80
80
|
# @param [String] enc default character encoding (デフォルト文字エンコーディング)
|
|
81
81
|
#
|
|
@@ -88,7 +88,7 @@ module Meteor
|
|
|
88
88
|
private :initialize_2
|
|
89
89
|
|
|
90
90
|
#
|
|
91
|
-
# イニシャライザ
|
|
91
|
+
# initializer (イニシャライザ)
|
|
92
92
|
# @param [Integer,Symbol] type default type of parser (デフォルトのパーサ・タイプ)
|
|
93
93
|
# @param [String] root root directory (基準ディレクトリ)
|
|
94
94
|
# @param [String] enc default character encoding (デフォルト文字エンコーディング)
|
|
@@ -138,22 +138,22 @@ module Meteor
|
|
|
138
138
|
|
|
139
139
|
#
|
|
140
140
|
#@overload add(relative_path,enc)
|
|
141
|
-
#
|
|
141
|
+
# add parser (パーサを追加する)
|
|
142
142
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
143
143
|
# @param [String] enc character encoding (文字エンコーディング)
|
|
144
144
|
# @return [Meteor::Parser] parser (パーサ)
|
|
145
145
|
#@overload add(relative_path)
|
|
146
|
-
#
|
|
146
|
+
# add parser (パーサを追加する)
|
|
147
147
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
148
148
|
# @return [Meteor::Parser] parser (パーサ)
|
|
149
149
|
#@overload add(type,relative_path,enc)
|
|
150
|
-
#
|
|
150
|
+
# add parser (パーサを追加する)
|
|
151
151
|
# @param [Integer,Symbol] type type of parser (パーサ・タイプ)
|
|
152
152
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
153
153
|
# @param [String] enc character encoding (文字エンコーディング)
|
|
154
154
|
# @return [Meteor::Parser] parser (パーサ)
|
|
155
155
|
#@overload add(type,relative_path)
|
|
156
|
-
#
|
|
156
|
+
# add parser (パーサを追加する)
|
|
157
157
|
# @param [Integer,Symbol] type type of parser (パーサ・タイプ)
|
|
158
158
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
159
159
|
# @return [Meteor::Parser] parser (パーサ)
|
|
@@ -204,7 +204,7 @@ module Meteor
|
|
|
204
204
|
private :path_to_url
|
|
205
205
|
|
|
206
206
|
#
|
|
207
|
-
#
|
|
207
|
+
# add parser (パーサを追加する)
|
|
208
208
|
# @param [Integer,Symbol] type type of parser (パーサ・タイプ)
|
|
209
209
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
210
210
|
# @param [String] enc character encoding (文字エンコーディング)
|
|
@@ -221,7 +221,7 @@ module Meteor
|
|
|
221
221
|
private :add_3
|
|
222
222
|
|
|
223
223
|
#
|
|
224
|
-
#
|
|
224
|
+
# add parser (パーサを追加する)
|
|
225
225
|
# @param [Integer,Symbol] type type of parser(パーサ・タイプ)
|
|
226
226
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
227
227
|
# @return [Meteor::Parser] parser (パーサ)
|
|
@@ -233,7 +233,7 @@ module Meteor
|
|
|
233
233
|
private :add_2_n
|
|
234
234
|
|
|
235
235
|
#
|
|
236
|
-
#
|
|
236
|
+
# add parser (パーサを追加する)
|
|
237
237
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
238
238
|
# @param [String] enc character encoding (文字エンコーディング)
|
|
239
239
|
# @return [Meteor::Parser] parser (パーサ)
|
|
@@ -245,7 +245,7 @@ module Meteor
|
|
|
245
245
|
private :add_2_s
|
|
246
246
|
|
|
247
247
|
#
|
|
248
|
-
#
|
|
248
|
+
# add parser (パーサを追加する)
|
|
249
249
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
250
250
|
# @return [Meteor::Parser] parser (パーサ)
|
|
251
251
|
#
|
|
@@ -261,14 +261,14 @@ module Meteor
|
|
|
261
261
|
# @param [String,Symbol] key identifier (キー)
|
|
262
262
|
# @return [Meteor::Parser] parser (パーサ)
|
|
263
263
|
#@overload parser(type,relative_path,enc)
|
|
264
|
-
#
|
|
264
|
+
# add parser (パーサを追加する)
|
|
265
265
|
# @param [Integer] type type of parser (パーサ・タイプ)
|
|
266
266
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
267
267
|
# @param [String] enc character encoding (エンコーディング)
|
|
268
268
|
# @return [Meteor::Parser] parser (パーサ)
|
|
269
269
|
# @deprecated
|
|
270
270
|
#@overload parser(type,relative_path)
|
|
271
|
-
#
|
|
271
|
+
# add parser (パーサを追加する)
|
|
272
272
|
# @param [Integer] type type of parser (パーサ・タイプ)
|
|
273
273
|
# @param [String] relative_path relative file path (相対ファイルパス)
|
|
274
274
|
# @return [Meteor::Parser] parser (パーサ)
|
|
@@ -317,13 +317,13 @@ module Meteor
|
|
|
317
317
|
|
|
318
318
|
#
|
|
319
319
|
# @overload add_str(type, relative_url, doc)
|
|
320
|
-
#
|
|
320
|
+
# add parser (パーサを追加する)
|
|
321
321
|
# @param [Integer] type type of parser (パーサ・タイプ)
|
|
322
322
|
# @param [String] relative_url relative URL (相対URL)
|
|
323
323
|
# @param [String] doc document (ドキュメント)
|
|
324
324
|
# @return [Meteor::Parser] parser (パーサ)
|
|
325
325
|
# @overload add_str(relative_url, doc)
|
|
326
|
-
#
|
|
326
|
+
# add parser (パーサを追加する)
|
|
327
327
|
# @param [String] relative_url relative URL (相対URL)
|
|
328
328
|
# @param [String] doc document (ドキュメント)
|
|
329
329
|
# @return [Meteor::Parser] parser (パーサ)
|
|
@@ -340,7 +340,7 @@ module Meteor
|
|
|
340
340
|
end
|
|
341
341
|
|
|
342
342
|
#
|
|
343
|
-
#
|
|
343
|
+
# add parser (パーサを追加する)
|
|
344
344
|
# @param [Integer,Symbol] type type of parser (パーサ・タイプ)
|
|
345
345
|
# @param [String] relative_url relative URL (相対URL)
|
|
346
346
|
# @param [String] doc document (ドキュメント)
|
|
@@ -357,7 +357,7 @@ module Meteor
|
|
|
357
357
|
private :add_str_3
|
|
358
358
|
|
|
359
359
|
#
|
|
360
|
-
#
|
|
360
|
+
# add parser (パーサを追加する)
|
|
361
361
|
# @param [String] relative_url relative URL (相対URL)
|
|
362
362
|
# @param [String] doc document (ドキュメント)
|
|
363
363
|
# @return [Meteor::Parser] parser (パーサ)
|
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.22
|
|
40
40
|
#
|
|
41
41
|
|
|
42
42
|
module Meteor
|
|
43
|
-
VERSION = "0.9.
|
|
43
|
+
VERSION = "0.9.22"
|
|
44
44
|
|
|
45
45
|
# require 'fileutils'
|
|
46
46
|
|