asip-meteor 0.9.0.4 → 0.9.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/meteor.rb +311 -173
  2. metadata +2 -2
data/lib/meteor.rb CHANGED
@@ -18,7 +18,7 @@
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.0.4
21
+ # @version 0.9.0.5
22
22
  #
23
23
  if RUBY_VERSION < '1.9.0' then
24
24
  require 'kconv'
@@ -27,7 +27,7 @@ end
27
27
 
28
28
  module Meteor
29
29
 
30
- VERSION = "0.9.0.4"
30
+ VERSION = "0.9.0.5"
31
31
 
32
32
  #
33
33
  # 要素クラス
@@ -720,6 +720,8 @@ module Meteor
720
720
  #PLUS_1 = "\\\+"
721
721
  #PLUS_2 = "\\\\\\+"
722
722
 
723
+ ESCAPE_ENTITY_REF = ''
724
+
723
725
  SUB_REGEX1 = "(\\\\*)\\\\([0-9]+)"
724
726
  SUB_REGEX2 = "\\1\\1\\\\\\\\\\2"
725
727
  SUB_REGEX3 = "\\1\\1\\1\\1\\\\\\\\\\\\\\\\\\2"
@@ -795,6 +797,9 @@ module Meteor
795
797
  #@pattern_cc_2 = nil
796
798
  #@pattern_cc_2_1 = nil
797
799
  #@pattern_cc_2_2 = nil
800
+ #@pattern_2 = nil
801
+ #@pattern_1 = nil
802
+ #@pattern_1b = nil
798
803
  #@cnt = 0
799
804
  #@position = 0
800
805
  #@position2 = 0
@@ -1219,6 +1224,9 @@ module Meteor
1219
1224
 
1220
1225
  @sbuf = '';
1221
1226
 
1227
+ @pattern_2 = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1228
+ @pattern_1b = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b);
1229
+
1222
1230
  if RUBY_VERSION >= '1.9.0' then
1223
1231
 
1224
1232
  @position = 0
@@ -1231,8 +1239,7 @@ module Meteor
1231
1239
 
1232
1240
  @position2 = @res.end(0)
1233
1241
 
1234
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1235
- @res = @pattern.match(@root.document,@position)
1242
+ @res = @pattern_2.match(@root.document,@position)
1236
1243
 
1237
1244
  if @res then
1238
1245
 
@@ -1289,8 +1296,7 @@ module Meteor
1289
1296
  end
1290
1297
  else
1291
1298
 
1292
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1293
- @res = @pattern.match(@root.document,@position)
1299
+ @res = @pattern_2.match(@root.document,@position)
1294
1300
 
1295
1301
  if @res then
1296
1302
  @cnt -= 1
@@ -1313,7 +1319,7 @@ module Meteor
1313
1319
  end
1314
1320
  end
1315
1321
 
1316
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b)
1322
+ @pattern = @pattern_1b
1317
1323
  end
1318
1324
  else
1319
1325
 
@@ -1326,9 +1332,8 @@ module Meteor
1326
1332
  if @cnt > 0 then
1327
1333
 
1328
1334
  @rx_document2 = @res.post_match
1329
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1330
1335
 
1331
- @res = @pattern.match(@rx_document)
1336
+ @res = @pattern_2.match(@rx_document)
1332
1337
 
1333
1338
  if @res then
1334
1339
 
@@ -1385,8 +1390,7 @@ module Meteor
1385
1390
  end
1386
1391
  else
1387
1392
 
1388
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1389
- @res = @pattern.match(@rx_document)
1393
+ @res = @pattern_2.match(@rx_document)
1390
1394
 
1391
1395
  if @res then
1392
1396
  @cnt -= 1
@@ -1409,7 +1413,7 @@ module Meteor
1409
1413
  end
1410
1414
  end
1411
1415
 
1412
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b)
1416
+ @pattern = @pattern_1b
1413
1417
  end
1414
1418
  end
1415
1419
 
@@ -1627,6 +1631,9 @@ module Meteor
1627
1631
 
1628
1632
  @sbuf = ''
1629
1633
 
1634
+ @pattern_2 = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1635
+ @pattern_1b = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b);
1636
+
1630
1637
  if RUBY_VERSION >= '1.9.0' then
1631
1638
 
1632
1639
  @position = 0
@@ -1639,8 +1646,7 @@ module Meteor
1639
1646
 
1640
1647
  @position2 = @res.end(0)
1641
1648
 
1642
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1643
- @res = @pattern.match(@root.document,@position)
1649
+ @res = @pattern_2.match(@root.document,@position)
1644
1650
 
1645
1651
  if @res then
1646
1652
 
@@ -1696,8 +1702,7 @@ module Meteor
1696
1702
  end
1697
1703
  else
1698
1704
 
1699
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1700
- @res = @pattern.match(@root.document,@position)
1705
+ @res = @pattern_2.match(@root.document,@position)
1701
1706
 
1702
1707
  if @res then
1703
1708
 
@@ -1721,7 +1726,7 @@ module Meteor
1721
1726
  end
1722
1727
  end
1723
1728
 
1724
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b)
1729
+ @pattern = @pattern_1b
1725
1730
  end
1726
1731
  else
1727
1732
 
@@ -1735,8 +1740,7 @@ module Meteor
1735
1740
 
1736
1741
  @rx_document2 = @res.post_match
1737
1742
 
1738
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1739
- @res = @pattern.match(@rx_document)
1743
+ @res = @pattern_2.match(@rx_document)
1740
1744
 
1741
1745
  if @res then
1742
1746
 
@@ -1792,8 +1796,7 @@ module Meteor
1792
1796
  end
1793
1797
  else
1794
1798
 
1795
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_2)
1796
- @res = @pattern.match(@rx_document)
1799
+ @res = @pattern_2.match(@rx_document)
1797
1800
 
1798
1801
  if @res then
1799
1802
 
@@ -1817,7 +1820,7 @@ module Meteor
1817
1820
  end
1818
1821
  end
1819
1822
 
1820
- @pattern = Meteor::Core::Util::PatternCache.get(@pattern_cc_1b)
1823
+ @pattern = @pattern_1b
1821
1824
  end
1822
1825
  end
1823
1826
 
@@ -2994,23 +2997,54 @@ module Meteor
2994
2997
 
2995
2998
  #@@pattern_true = Regexp.new(TRUE)
2996
2999
  #@@pattern_false = Regexp.new(FALSE)
2997
-
3000
+
2998
3001
  TYPE_L = 'type'
2999
3002
  TYPE_U = 'TYPE'
3000
-
3001
- @@pattern_and_1 = Regexp.new(AND_1)
3002
- @@pattern_lt_1 = Regexp.new(LT_1)
3003
- @@pattern_gt_1 = Regexp.new(GT_1)
3004
- @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION)
3005
- @@pattern_space_1 = Regexp.new(SPACE)
3006
- @@pattern_br_1 = Regexp.new(BR_1)
3007
- @@pattern_lt_2 = Regexp.new(LT_2)
3008
- @@pattern_gt_2 = Regexp.new(GT_2)
3009
- @@pattern_dq_2 = Regexp.new(QO_2)
3010
- @@pattern_space_2 = Regexp.new(NBSP_2)
3011
- @@pattern_and_2 = Regexp.new(AND_2)
3012
- @@pattern_br_2 = Regexp.new(BR_2)
3013
-
3003
+
3004
+ if RUBY_VERSION >= '1.9.0' then
3005
+ TABLE_FOR_ESCAPE_ = {
3006
+ '&' => '&amp;',
3007
+ '"' => '&quot;',
3008
+ '\'' => '&apos;',
3009
+ '<' => '&lt;',
3010
+ '>' => '&gt;',
3011
+ ' ' => '&nbsp;',
3012
+ }
3013
+
3014
+ TABLE_FOR_ESCAPE_CONTENT_ = {
3015
+ '&' => '&amp;',
3016
+ '"' => '&quot;',
3017
+ '\'' => '&apos;',
3018
+ '<' => '&lt;',
3019
+ '>' => '&gt;',
3020
+ ' ' => '&nbsp;',
3021
+ "\n" => '<br>',
3022
+ }
3023
+
3024
+ PATTERN_ESCAPE = "[&\"'<> ]"
3025
+ PATTERN_ESCAPE_CONTENT = "[&\"'<> \\n]"
3026
+
3027
+ @@pattern_escape = Regexp.new(PATTERN_ESCAPE)
3028
+ @@pattern_escape_content = Regexp.new(PATTERN_ESCAPE_CONTENT)
3029
+ else
3030
+ @@pattern_and_1 = Regexp.new(AND_1)
3031
+ @@pattern_lt_1 = Regexp.new(LT_1)
3032
+ @@pattern_gt_1 = Regexp.new(GT_1)
3033
+ @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION)
3034
+ @@pattern_space_1 = Regexp.new(SPACE)
3035
+ @@pattern_br_1 = Regexp.new(BR_1)
3036
+ @@pattern_lt_2 = Regexp.new(LT_2)
3037
+ @@pattern_gt_2 = Regexp.new(GT_2)
3038
+ @@pattern_dq_2 = Regexp.new(QO_2)
3039
+ @@pattern_space_2 = Regexp.new(NBSP_2)
3040
+ @@pattern_and_2 = Regexp.new(AND_2)
3041
+ @@pattern_br_2 = Regexp.new(BR_2)
3042
+ end
3043
+
3044
+
3045
+ PATTERN_UNESCAPE = '&(amp|quot|apos|gt|lt|nbsp);'
3046
+ @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
3047
+
3014
3048
  #@@pattern_match_tag = Regexp.new(MATCH_TAG)
3015
3049
  @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
3016
3050
  #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
@@ -3532,39 +3566,46 @@ module Meteor
3532
3566
 
3533
3567
  def escape(element)
3534
3568
  #特殊文字の置換
3535
- #「&」->「&amp;」
3536
- if element.include?(AND_1) then
3537
- element.gsub!(@@pattern_and_1,AND_2)
3538
- end
3539
- #「<」->「&lt;」
3540
- if element.include?(LT_1) then
3541
- element.gsub!(@@pattern_lt_1,LT_2)
3542
- end
3543
- #「>」->「&gt;」
3544
- if element.include?(GT_1) then
3545
- element.gsub!(@@pattern_gt_1,GT_2)
3546
- end
3547
- #「"」->「&quotl」
3548
- if element.include?(DOUBLE_QUATATION) then
3549
- element.gsub!(@@pattern_dq_1,QO_2)
3550
- end
3551
- #「 」->「&nbsp;」
3552
- if element.include?(SPACE) then
3553
- element.gsub!(@@pattern_space_1,NBSP_2)
3569
+ if RUBY_VERSION < '1.9.0' then
3570
+ #「&」->「&amp;」
3571
+ if element.include?(AND_1) then
3572
+ element.gsub!(@@pattern_and_1,AND_2)
3573
+ end
3574
+ #「<」->「&lt;」
3575
+ if element.include?(LT_1) then
3576
+ element.gsub!(@@pattern_lt_1,LT_2)
3577
+ end
3578
+ #「>」->「&gt;」
3579
+ if element.include?(GT_1) then
3580
+ element.gsub!(@@pattern_gt_1,GT_2)
3581
+ end
3582
+ #「"」->「&quotl」
3583
+ if element.include?(DOUBLE_QUATATION) then
3584
+ element.gsub!(@@pattern_dq_1,QO_2)
3585
+ end
3586
+ #「 」->「&nbsp;」
3587
+ if element.include?(SPACE) then
3588
+ element.gsub!(@@pattern_space_1,NBSP_2)
3589
+ end
3590
+ else
3591
+ element.gsub!(@@pattern_escape, TABLE_FOR_ESCAPE_)
3554
3592
  end
3555
-
3556
3593
  element
3557
3594
  end
3558
3595
  private :escape
3559
3596
 
3560
3597
  def escapeContent(element,elmName)
3561
- element = escape(element)
3562
-
3563
- if !isMatch(MATCH_TAG_2,elmName) then
3564
- #「¥r?¥n」->「<br>」
3565
- element.gsub!(@@pattern_br_1, BR_2)
3598
+ if RUBY_VERSION < '1.9.0' then
3599
+ element = escape(element)
3600
+
3601
+ if !isMatch(MATCH_TAG_2,elmName) then
3602
+ #「¥r?¥n」->「<br>」
3603
+ element.gsub!(@@pattern_br_1, BR_2)
3604
+ end
3605
+ else
3606
+ element.gsub!(@@pattern_escape_content, TABLE_FOR_ESCAPE_CONTENT_)
3566
3607
  end
3567
-
3608
+
3568
3609
  element
3569
3610
  end
3570
3611
  private :escapeContent
@@ -3572,25 +3613,36 @@ module Meteor
3572
3613
  def unescape(element)
3573
3614
  #特殊文字の置換
3574
3615
  #「<」<-「&lt;」
3575
- if element.include?(LT_2) then
3576
- element.gsub!(@@pattern_lt_2,LT_1)
3577
- end
3616
+ #if element.include?(LT_2) then
3617
+ # element.gsub!(@@pattern_lt_2,LT_1)
3618
+ #end
3578
3619
  #「>」<-「&gt;」
3579
- if element.include?(GT_2) then
3580
- element.gsub!(@@pattern_gt_2,GT_1)
3581
- end
3620
+ #if element.include?(GT_2) then
3621
+ # element.gsub!(@@pattern_gt_2,GT_1)
3622
+ #end
3582
3623
  #「"」<-「&quotl」
3583
- if element.include?(QO_2) then
3584
- element.gsub!(@@pattern_dq_2,DOUBLE_QUATATION)
3585
- end
3624
+ #if element.include?(QO_2) then
3625
+ # element.gsub!(@@pattern_dq_2,DOUBLE_QUATATION)
3626
+ #end
3586
3627
  #「 」<-「&nbsp;」
3587
- if element.include?(NBSP_2) then
3588
- element.gsub!(@@pattern_space_2,SPACE)
3589
- end
3628
+ #if element.include?(NBSP_2) then
3629
+ # element.gsub!(@@pattern_space_2,SPACE)
3630
+ #end
3590
3631
  #「&」<-「&amp;」
3591
- if element.include?(AND_2) then
3592
- element.gsub!(@@pattern_and_2,AND_1)
3593
- end
3632
+ #if element.include?(AND_2) then
3633
+ # element.gsub!(@@pattern_and_2,AND_1)
3634
+ #end
3635
+ element.gsub!(@@pattern_unescape){
3636
+ case $1
3637
+ when 'amp' then '&'
3638
+ when 'quot' then '"'
3639
+ when 'apos' then '\''
3640
+ when 'gt' then '>'
3641
+ when 'lt' then '<'
3642
+ when 'nbsp' then ' '
3643
+ end
3644
+ }
3645
+
3594
3646
  element
3595
3647
  end
3596
3648
  private :unescape
@@ -3707,19 +3759,53 @@ module Meteor
3707
3759
  TYPE_L = 'type'
3708
3760
  TYPE_U = 'TYPE'
3709
3761
 
3710
- @@pattern_and_1 = Regexp.new(AND_1)
3711
- @@pattern_lt_1 = Regexp.new(LT_1)
3712
- @@pattern_gt_1 = Regexp.new(GT_1)
3713
- @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION)
3714
- @@pattern_space_1 = Regexp.new(SPACE)
3715
- @@pattern_br_1 = Regexp.new(BR_1)
3716
- @@pattern_lt_2 = Regexp.new(LT_2)
3717
- @@pattern_gt_2 = Regexp.new(GT_2)
3718
- @@pattern_dq_2 = Regexp.new(QO_2)
3719
- @@pattern_space_2 = Regexp.new(NBSP_2)
3720
- @@pattern_and_2 = Regexp.new(AND_2)
3721
- @@pattern_br_2 = Regexp.new(BR_3)
3722
-
3762
+ if RUBY_VERSION >= '1.9.0' then
3763
+ TABLE_FOR_ESCAPE_ = {
3764
+ '&' => '&amp;',
3765
+ '"' => '&quot;',
3766
+ '\'' => '&apos;',
3767
+ '<' => '&lt;',
3768
+ '>' => '&gt;',
3769
+ ' ' => '&nbsp;',
3770
+ }
3771
+
3772
+ TABLE_FOR_ESCAPE_CONTENT_ = {
3773
+ '&' => '&amp;',
3774
+ '"' => '&quot;',
3775
+ '\'' => '&apos;',
3776
+ '<' => '&lt;',
3777
+ '>' => '&gt;',
3778
+ ' ' => '&nbsp;',
3779
+ "\n" => '<br/>',
3780
+ }
3781
+
3782
+ PATTERN_ESCAPE = "[&\"'<> ]"
3783
+ PATTERN_ESCAPE_CONTENT = "[&\"'<> \\n]"
3784
+ @@pattern_escape = Regexp.new(PATTERN_ESCAPE)
3785
+ @@pattern_escape_content = Regexp.new(PATTERN_ESCAPE_CONTENT)
3786
+
3787
+ else
3788
+
3789
+ @@pattern_and_1 = Regexp.new(AND_1)
3790
+ @@pattern_lt_1 = Regexp.new(LT_1)
3791
+ @@pattern_gt_1 = Regexp.new(GT_1)
3792
+ @@pattern_dq_1 = Regexp.new(DOUBLE_QUATATION)
3793
+ @@pattern_ap_1 = Regexp.new(AP_1)
3794
+ @@pattern_space_1 = Regexp.new(SPACE)
3795
+ @@pattern_br_1 = Regexp.new(BR_1)
3796
+ @@pattern_lt_2 = Regexp.new(LT_2)
3797
+ @@pattern_gt_2 = Regexp.new(GT_2)
3798
+ @@pattern_dq_2 = Regexp.new(QO_2)
3799
+ @@pattern_ap_2 = Regexp.new(AP_2)
3800
+ @@pattern_space_2 = Regexp.new(NBSP_2)
3801
+ @@pattern_and_2 = Regexp.new(AND_2)
3802
+ @@pattern_br_2 = Regexp.new(BR_3)
3803
+
3804
+ end
3805
+
3806
+ PATTERN_UNESCAPE = '&(amp|quot|apos|gt|lt|nbsp);'
3807
+ @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
3808
+
3723
3809
  #@@pattern_match_tag = Regexp.new(MATCH_TAG)
3724
3810
  @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
3725
3811
  #@@pattern_match_tag2 = Regexp.new(MATCH_TAG_2)
@@ -3990,39 +4076,51 @@ module Meteor
3990
4076
 
3991
4077
  def escape(element)
3992
4078
  #特殊文字の置換
3993
- #「&」->「&amp;」
3994
- if element.include?(AND_1) then
3995
- element.gsub!(@@pattern_and_1,AND_2)
3996
- end
3997
- #「<」->「&lt;」
3998
- if element.include?(LT_1) then
3999
- element.gsub!(@@pattern_lt_1,LT_2)
4000
- end
4001
- #「>」->「&gt;」
4002
- if element.include?(GT_1) then
4003
- element.gsub!(@@pattern_gt_1,GT_2)
4004
- end
4005
- #「"」->「&quotl」
4006
- if element.include?(DOUBLE_QUATATION) then
4007
- element.gsub!(@@pattern_dq_1,QO_2)
4008
- end
4009
- #「 」->「&nbsp;」
4010
- if element.include?(SPACE) then
4011
- element.gsub!(@@pattern_space_1,NBSP_2)
4079
+ if RUBY_VERSION < '1.9.0' then
4080
+ #「&」->「&amp;」
4081
+ if element.include?(AND_1) then
4082
+ element.gsub!(@@pattern_and_1,AND_2)
4083
+ end
4084
+ #「<」->「&lt;」
4085
+ if element.include?(LT_1) then
4086
+ element.gsub!(@@pattern_lt_1,LT_2)
4087
+ end
4088
+ #「>」->「&gt;」
4089
+ if element.include?(GT_1) then
4090
+ element.gsub!(@@pattern_gt_1,GT_2)
4091
+ end
4092
+ #「"」->「&quotl」
4093
+ if element.include?(DOUBLE_QUATATION) then
4094
+ element.gsub!(@@pattern_dq_1,QO_2)
4095
+ end
4096
+ #「'」->「&apos;」
4097
+ if element.include?(AP_1) then
4098
+ element.gsub!(@@pattern_ap_1,AP_2)
4099
+ end
4100
+ #「 」->「&nbsp;」
4101
+ if element.include?(SPACE) then
4102
+ element.gsub!(@@pattern_space_1,NBSP_2)
4103
+ end
4104
+ else
4105
+ element.gsub!(@@pattern_escape,TABLE_FOR_ESCAPE_)
4012
4106
  end
4013
-
4107
+
4014
4108
  element
4015
4109
  end
4016
4110
  private :escape
4017
4111
 
4018
4112
  def escapeContent(element,elmName)
4019
- element = escape(element)
4020
-
4021
- if !isMatch(MATCH_TAG_2,elmName) then
4022
- #「¥r?¥n」->「<br>」
4023
- element.gsub!(@@pattern_br_1, BR_2)
4113
+
4114
+ if RUBY_VERSION < '1.9.0' then
4115
+ element = escape(element)
4116
+
4117
+ if !isMatch(MATCH_TAG_2,elmName) then
4118
+ #「¥r?¥n」->「<br>」
4119
+ element.gsub!(@@pattern_br_1, BR_2)
4120
+ end
4121
+ else
4122
+ element.gsub!(@@pattern_escape_content, TABLE_FOR_ESCAPE_CONTENT_)
4024
4123
  end
4025
-
4026
4124
  element
4027
4125
  end
4028
4126
  private :escapeContent
@@ -4030,26 +4128,36 @@ module Meteor
4030
4128
  def unescape(element)
4031
4129
  #特殊文字の置換
4032
4130
  #「<」<-「&lt;」
4033
- if element.include?(LT_2) then
4034
- element.gsub!(@@pattern_lt_2,LT_1)
4035
- end
4131
+ #if element.include?(LT_2) then
4132
+ # element.gsub!(@@pattern_lt_2,LT_1)
4133
+ #end
4036
4134
  #「>」<-「&gt;」
4037
- if element.include?(GT_2) then
4038
- element.gsub!(@@pattern_gt_2,GT_1)
4039
- end
4135
+ #if element.include?(GT_2) then
4136
+ # element.gsub!(@@pattern_gt_2,GT_1)
4137
+ #end
4040
4138
  #「"」<-「&quotl」
4041
- if element.include?(QO_2) then
4042
- element.gsub!(@@pattern_dq_2,DOUBLE_QUATATION)
4043
- end
4139
+ #if element.include?(QO_2) then
4140
+ # element.gsub!(@@pattern_dq_2,DOUBLE_QUATATION)
4141
+ #end
4044
4142
  #「 」<-「&nbsp;」
4045
- if element.include?(NBSP_2) then
4046
- element.gsub!(@@pattern_space_2,SPACE)
4047
- end
4143
+ #if element.include?(NBSP_2) then
4144
+ # element.gsub!(@@pattern_space_2,SPACE)
4145
+ #end
4048
4146
  #「&」<-「&amp;」
4049
- if element.include?(AND_2) then
4050
- element.gsub!(@@pattern_and_2,AND_1)
4051
- end
4052
-
4147
+ #if element.include?(AND_2) then
4148
+ # element.gsub!(@@pattern_and_2,AND_1)
4149
+ #end
4150
+ element.gsub!(@@pattern_unescape){
4151
+ case $1
4152
+ when 'amp' then '&'
4153
+ when 'quot' then '"'
4154
+ when 'apos' then '\''
4155
+ when 'gt' then '>'
4156
+ when 'lt' then '<'
4157
+ when 'nbsp' then ' '
4158
+ end
4159
+ }
4160
+
4053
4161
  element
4054
4162
  end
4055
4163
  private :unescape
@@ -4078,6 +4186,17 @@ module Meteor
4078
4186
  #
4079
4187
  class ParserImpl < Meteor::Core::Kernel
4080
4188
 
4189
+ TABLE_FOR_ESCAPE_ = {
4190
+ '&' => '&amp;',
4191
+ '"' => '&quot;',
4192
+ '\'' => '&apos;',
4193
+ '<' => '&lt;',
4194
+ '>' => '&gt;',
4195
+ }
4196
+
4197
+ PATTERN_ESCAPE = "[&\"'<>]"
4198
+ PATTERN_UNESCAPE = '&(amp|quot|apos|gt|lt);'
4199
+
4081
4200
  @@pattern_and_1 = Regexp.new(AND_1)
4082
4201
  @@pattern_lt_1 = Regexp.new(LT_1)
4083
4202
  @@pattern_gt_1 = Regexp.new(GT_1)
@@ -4088,7 +4207,10 @@ module Meteor
4088
4207
  @@pattern_dq_2 = Regexp.new(QO_2)
4089
4208
  @@pattern_ap_2 = Regexp.new(AP_2)
4090
4209
  @@pattern_and_2 = Regexp.new(AND_2)
4091
-
4210
+
4211
+ @@pattern_escape = Regexp.new(PATTERN_ESCAPE)
4212
+ @@pattern_unescape = Regexp.new(PATTERN_UNESCAPE)
4213
+
4092
4214
  @@pattern_set_mono1 = Regexp.new(SET_MONO_1)
4093
4215
 
4094
4216
  #
@@ -4177,25 +4299,29 @@ module Meteor
4177
4299
 
4178
4300
  def escape(element)
4179
4301
  #特殊文字の置換
4180
- #「&」->「&amp;」
4181
- if element.include?(AND_1) then
4182
- element.gsub!(@@pattern_and_1,AND_2)
4183
- end
4184
- #「<」->「&lt;」
4185
- if element.include?(LT_1) then
4186
- element.gsub!(@@pattern_lt_1,LT_2)
4187
- end
4188
- #「>」->「&gt;」
4189
- if element.include?(GT_1) then
4190
- element.gsub!(@@pattern_gt_1,GT_2)
4191
- end
4192
- #「"」->「&quot;」
4193
- if element.include?(DOUBLE_QUATATION) then
4194
- element.gsub!(@@pattern_dq_1,QO_2)
4195
- end
4196
- #「'」->「&apos;」
4197
- if element.include?(AP_1) then
4198
- element.gsub!(@@pattern_ap_1,AP_2)
4302
+ if RUBY_VERSION < '1.9.0' then
4303
+ #「&」->「&amp;」
4304
+ if element.include?(AND_1) then
4305
+ element.gsub!(@@pattern_and_1,AND_2)
4306
+ end
4307
+ #「<」->「&lt;」
4308
+ if element.include?(LT_1) then
4309
+ element.gsub!(@@pattern_lt_1,LT_2)
4310
+ end
4311
+ #「>」->「&gt;」
4312
+ if element.include?(GT_1) then
4313
+ element.gsub!(@@pattern_gt_1,GT_2)
4314
+ end
4315
+ #「"」->「&quot;」
4316
+ if element.include?(DOUBLE_QUATATION) then
4317
+ element.gsub!(@@pattern_dq_1,QO_2)
4318
+ end
4319
+ #「'」->「&apos;」
4320
+ if element.include?(AP_1) then
4321
+ element.gsub!(@@pattern_ap_1,AP_2)
4322
+ end
4323
+ else
4324
+ element.gsub!(@@pattern_escape,TABLE_FOR_ESCAPE_)
4199
4325
  end
4200
4326
 
4201
4327
  element
@@ -4209,26 +4335,38 @@ module Meteor
4209
4335
 
4210
4336
  def unescape(element)
4211
4337
  #特殊文字の置換
4212
- #「<」<-「&lt;」
4213
- if element.include?(LT_2) then
4214
- element.gsub!(@@pattern_lt_2,LT_1)
4215
- end
4216
- #「>」<-「&gt;」
4217
- if element.include?(GT_2) then
4218
- element.gsub!(@@pattern_gt_2,GT_1)
4219
- end
4220
- #「"」<-「&quot;」
4221
- if element.include?(QO_2) then
4222
- element.gsub!(@@pattern_dq_2,DOUBLE_QUATATION)
4223
- end
4224
- #「'」<-「&apos;」
4225
- if element.include?(AP_2) then
4226
- element.gsub!(@@pattern_ap_2,AP_1)
4227
- end
4228
- #「&」<-「&amp;」
4229
- if element.include?(AND_2) then
4230
- element.gsub!(@@pattern_and_2,AND_1)
4231
- end
4338
+ #if RUBY_VERSION < '1.9.0' then
4339
+ # #「<」<-「&lt;」
4340
+ # if element.include?(LT_2) then
4341
+ # element.gsub!(@@pattern_lt_2,LT_1)
4342
+ # end
4343
+ # #「>」<-「&gt;」
4344
+ # if element.include?(GT_2) then
4345
+ # element.gsub!(@@pattern_gt_2,GT_1)
4346
+ # end
4347
+ # #「"」<-「&quot;」
4348
+ # if element.include?(QO_2) then
4349
+ # element.gsub!(@@pattern_dq_2,DOUBLE_QUATATION)
4350
+ # end
4351
+ # #「'」<-「&apos;」
4352
+ # if element.include?(AP_2) then
4353
+ # element.gsub!(@@pattern_ap_2,AP_1)
4354
+ # end
4355
+ # #「&」<-「&amp;」
4356
+ # if element.include?(AND_2) then
4357
+ # element.gsub!(@@pattern_and_2,AND_1)
4358
+ # end
4359
+ #else
4360
+ element.gsub!(@@pattern_unescape){
4361
+ case $1
4362
+ when 'amp' then '&'
4363
+ when 'quot' then '"'
4364
+ when 'apos' then '\''
4365
+ when 'gt' then '>'
4366
+ when 'lt' then '<'
4367
+ end
4368
+ }
4369
+ #end
4232
4370
 
4233
4371
  element
4234
4372
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asip-meteor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.4
4
+ version: 0.9.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - asip
@@ -9,7 +9,7 @@ autorequire: meteor
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-06 00:00:00 -07:00
12
+ date: 2008-11-15 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15