mail-iso-2022-jp 2.0.0.pre2 → 2.0.0.pre3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +6 -2
- data/lib/mail-iso-2022-jp.rb +4 -0
- data/lib/mail-iso-2022-jp/character_names.rb +12 -0
- data/lib/mail-iso-2022-jp/common_methods_for_field.rb +42 -0
- data/lib/mail-iso-2022-jp/field.rb +1 -1
- data/lib/mail-iso-2022-jp/field_with_iso_2022_jp_encoding.rb +3 -34
- data/lib/mail-iso-2022-jp/header.rb +1 -1
- data/lib/mail-iso-2022-jp/invalid_encoding_error.rb +3 -0
- data/lib/mail-iso-2022-jp/mail.rb +0 -6
- data/lib/mail-iso-2022-jp/message.rb +2 -0
- data/lib/mail-iso-2022-jp/ruby18/field_with_iso_2022_jp_encoding.rb +2 -27
- data/lib/mail-iso-2022-jp/ruby18/mail.rb +0 -8
- data/lib/mail-iso-2022-jp/ruby18/message.rb +2 -2
- data/lib/mail-iso-2022-jp/structured_fields.rb +1 -1
- data/lib/mail-iso-2022-jp/subject_field.rb +1 -1
- metadata +4 -1
data/README.md
CHANGED
@@ -118,8 +118,10 @@ Remarks
|
|
118
118
|
* (en)
|
119
119
|
* NEC special characters like `①` and IBM extended characters like `髙`, `﨑`
|
120
120
|
are allowed in the subject, recipient names and mail body.
|
121
|
-
*
|
122
|
-
*
|
121
|
+
* FULLWIDTH TILDE (U+FF5E) and WAVE DASH (U+301C) are converted to the fullwidth tilde `〜` (0x2141).
|
122
|
+
* FULLWIDTH HYPHEN MINUS (U+FF0D) and MINUS SIGN (U+2212) are converted to the fullwidth minus `−` (0x215d).
|
123
|
+
* EM DASH (U+2014) and HORIZONTAL BAR (U+2015) are converted to the dash sign `—` (0x213d).
|
124
|
+
* DOUBLE VERTICAL LINE (U+2016, '‖') and PARALLEL TO (U+2225, `∥`) to `‖` (0x2142).
|
123
125
|
* Halfwidth (Hankaku) katakanas are maintained intact.
|
124
126
|
* Characters that cannot be translated into iso-2022-jp encoding are substituted with question marks (`?`).
|
125
127
|
|
@@ -127,6 +129,8 @@ Remarks
|
|
127
129
|
* `①` などのNEC特殊文字や `髙` や `﨑` といったIBM拡張文字を件名、宛先、本文などに含めることができます。
|
128
130
|
* 全角チルダ(U+FF5E)と波ダッシュ(U+301C)は、全角チルダ(2141)に変換されます。
|
129
131
|
* 全角ハイフンマイナス(U+ff0D)とマイナス記号(U+2212)は、全角マイナス(215D)に変換されます。
|
132
|
+
* 長い(em)ダッシュ(U+2014)と水平線(U+2015)は、ダッシュ(213D)に変換されます。
|
133
|
+
* 二重縦線(U+2016, '‖')と平行記号(U+2225, `∥`)は、`‖` (0x2142)に変換されます。
|
130
134
|
* 半角カタカナはそのまま維持されます。
|
131
135
|
* 変換できない文字は疑問符(`?`)で置換されます。
|
132
136
|
|
data/lib/mail-iso-2022-jp.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Mail
|
4
|
+
WAVE_DASH = [0x301c].pack("U")
|
5
|
+
FULLWIDTH_TILDE = [0xff5e].pack("U")
|
6
|
+
MINUS_SIGN = [0x2212].pack("U")
|
7
|
+
FULLWIDTH_HYPHEN_MINUS = [0xff0d].pack("U")
|
8
|
+
EM_DASH = [0x2014].pack("U")
|
9
|
+
HORIZONTAL_BAR = [0x2015].pack("U")
|
10
|
+
DOUBLE_VERTICAL_LINE = [0x2016].pack("U")
|
11
|
+
PARALLEL_TO = [0x2225].pack("U")
|
12
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Mail
|
2
|
+
module CommonMethodsForField
|
3
|
+
private
|
4
|
+
def do_decode_with_iso_2022_jp_encoding
|
5
|
+
if charset.to_s.downcase == 'iso-2022-jp'
|
6
|
+
value
|
7
|
+
else
|
8
|
+
do_decode_without_iso_2022_jp_encoding
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def b_value_encode(string)
|
13
|
+
string.split(' ').map do |s|
|
14
|
+
if s =~ /\e/
|
15
|
+
encode64(s)
|
16
|
+
else
|
17
|
+
s
|
18
|
+
end
|
19
|
+
end.join(" ")
|
20
|
+
end
|
21
|
+
|
22
|
+
def encode(value)
|
23
|
+
if charset.to_s.downcase == 'iso-2022-jp'
|
24
|
+
value
|
25
|
+
else
|
26
|
+
super(value)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def encode64(string)
|
31
|
+
"=?ISO-2022-JP?B?#{Base64.encode64(string).gsub("\n", "")}?="
|
32
|
+
end
|
33
|
+
|
34
|
+
def preprocess(value)
|
35
|
+
value = value.to_s.gsub(/#{WAVE_DASH}/, FULLWIDTH_TILDE)
|
36
|
+
value = value.to_s.gsub(/#{MINUS_SIGN}/, FULLWIDTH_HYPHEN_MINUS)
|
37
|
+
value = value.to_s.gsub(/#{EM_DASH}/, HORIZONTAL_BAR)
|
38
|
+
value = value.to_s.gsub(/#{DOUBLE_VERTICAL_LINE}/, PARALLEL_TO)
|
39
|
+
value
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# coding:utf-8
|
1
|
+
# coding: utf-8
|
2
2
|
|
3
3
|
require 'mail'
|
4
4
|
require 'base64'
|
@@ -6,6 +6,7 @@ require 'base64'
|
|
6
6
|
module Mail
|
7
7
|
module FieldWithIso2022JpEncoding
|
8
8
|
def self.included(base)
|
9
|
+
base.send :include, Mail::CommonMethodsForField
|
9
10
|
base.send :alias_method, :initialize_without_iso_2022_jp_encoding, :initialize
|
10
11
|
base.send :alias_method, :initialize, :initialize_with_iso_2022_jp_encoding
|
11
12
|
base.send :alias_method, :do_decode_without_iso_2022_jp_encoding, :do_decode
|
@@ -24,51 +25,19 @@ module Mail
|
|
24
25
|
end
|
25
26
|
|
26
27
|
private
|
27
|
-
def do_decode_with_iso_2022_jp_encoding
|
28
|
-
if charset.to_s.downcase == 'iso-2022-jp'
|
29
|
-
value
|
30
|
-
else
|
31
|
-
do_decode_without_iso_2022_jp_encoding
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
28
|
def encode_with_iso_2022_jp(value, charset)
|
36
|
-
value = value
|
37
|
-
value = value.to_s.gsub(/#{MINUS_SIGN}/, FULLWIDTH_HYPHEN_MINUS)
|
29
|
+
value = preprocess(value)
|
38
30
|
value = Mail.encoding_to_charset(value, charset)
|
39
31
|
value.force_encoding('ascii-8bit')
|
40
32
|
value = b_value_encode(value)
|
41
33
|
value.force_encoding('ascii-8bit')
|
42
34
|
end
|
43
35
|
|
44
|
-
def b_value_encode(string)
|
45
|
-
string.split(' ').map do |s|
|
46
|
-
if s =~ /\e/
|
47
|
-
encode64(s)
|
48
|
-
else
|
49
|
-
s
|
50
|
-
end
|
51
|
-
end.join(" ")
|
52
|
-
end
|
53
|
-
|
54
|
-
private
|
55
|
-
def encode(value)
|
56
|
-
if charset.to_s.downcase == 'iso-2022-jp'
|
57
|
-
value
|
58
|
-
else
|
59
|
-
super(value)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
36
|
def encode_crlf(value)
|
64
37
|
if charset.to_s.downcase == 'iso-2022-jp'
|
65
38
|
value.force_encoding('ascii-8bit')
|
66
39
|
end
|
67
40
|
super(value)
|
68
41
|
end
|
69
|
-
|
70
|
-
def encode64(string)
|
71
|
-
"=?ISO-2022-JP?B?#{Base64.encode64(string).gsub("\n", "")}?="
|
72
|
-
end
|
73
42
|
end
|
74
43
|
end
|
@@ -2,15 +2,9 @@
|
|
2
2
|
|
3
3
|
# Patches for Mail on Ruby 1.9.3 or above
|
4
4
|
module Mail
|
5
|
-
WAVE_DASH = "〜" # U+301C
|
6
|
-
FULLWIDTH_TILDE = "~" # U+FF5E
|
7
|
-
MINUS_SIGN = [0x2212].pack("U")
|
8
|
-
FULLWIDTH_HYPHEN_MINUS = [0xff0d].pack("U")
|
9
5
|
ENCODE = { 'iso-2022-jp' => Encoding::CP50221 }
|
10
6
|
|
11
7
|
def self.encoding_to_charset(str, charset)
|
12
8
|
str.encode(ENCODE[charset.to_s.downcase] || charset, :undef => :replace).force_encoding(charset)
|
13
9
|
end
|
14
|
-
|
15
|
-
class InvalidEncodingError < StandardError; end
|
16
10
|
end
|
@@ -12,6 +12,8 @@ module Mail
|
|
12
12
|
"The mail body is not encoded in UTF-8 but in #{value.encoding}")
|
13
13
|
end
|
14
14
|
value = value.gsub(/#{MINUS_SIGN}/, FULLWIDTH_HYPHEN_MINUS)
|
15
|
+
value = value.gsub(/#{EM_DASH}/, HORIZONTAL_BAR)
|
16
|
+
value = value.gsub(/#{DOUBLE_VERTICAL_LINE}/, PARALLEL_TO)
|
15
17
|
end
|
16
18
|
self.body_without_iso_2022_jp_encoding = value
|
17
19
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
1
|
require 'mail'
|
4
2
|
require 'base64'
|
5
3
|
require 'nkf'
|
@@ -7,6 +5,7 @@ require 'nkf'
|
|
7
5
|
module Mail
|
8
6
|
module FieldWithIso2022JpEncoding
|
9
7
|
def self.included(base)
|
8
|
+
base.send :include, Mail::CommonMethodsForField
|
10
9
|
base.send :alias_method, :initialize_without_iso_2022_jp_encoding, :initialize
|
11
10
|
base.send :alias_method, :initialize, :initialize_with_iso_2022_jp_encoding
|
12
11
|
base.send :alias_method, :do_decode_without_iso_2022_jp_encoding, :do_decode
|
@@ -34,33 +33,9 @@ module Mail
|
|
34
33
|
end
|
35
34
|
|
36
35
|
def encode_with_iso_2022_jp(value)
|
37
|
-
value = value
|
38
|
-
value = value.to_s.gsub(/#{MINUS_SIGN}/, FULLWIDTH_HYPHEN_MINUS)
|
36
|
+
value = preprocess(value)
|
39
37
|
value = NKF.nkf(NKF_OPTIONS, value)
|
40
38
|
b_value_encode(value)
|
41
39
|
end
|
42
|
-
|
43
|
-
def b_value_encode(string)
|
44
|
-
string.split(' ').map do |s|
|
45
|
-
if s =~ /\e/
|
46
|
-
encode64(s)
|
47
|
-
else
|
48
|
-
s
|
49
|
-
end
|
50
|
-
end.join(" ")
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
def encode(value)
|
55
|
-
if charset.to_s.downcase == 'iso-2022-jp'
|
56
|
-
value
|
57
|
-
else
|
58
|
-
super(value)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def encode64(string)
|
63
|
-
"=?ISO-2022-JP?B?#{Base64.encode64(string).gsub("\n", "")}?="
|
64
|
-
end
|
65
40
|
end
|
66
41
|
end
|
@@ -1,12 +1,4 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
1
|
# Patches for Mail on Ruby 1.8.7
|
4
2
|
module Mail
|
5
|
-
WAVE_DASH = "〜" # U+301C
|
6
|
-
FULLWIDTH_TILDE = "~" # U+FF5E
|
7
|
-
MINUS_SIGN = [0x2212].pack("U")
|
8
|
-
FULLWIDTH_HYPHEN_MINUS = [0xff0d].pack("U")
|
9
3
|
NKF_OPTIONS = "--oc=CP50220 -xjW --fb-subchar"
|
10
|
-
|
11
|
-
class InvalidEncodingError < StandardError; end
|
12
4
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# coding:utf-8
|
2
|
-
|
3
1
|
require 'mail'
|
4
2
|
require 'nkf'
|
5
3
|
|
@@ -16,6 +14,8 @@ module Mail
|
|
16
14
|
if @charset.to_s.downcase == 'iso-2022-jp'
|
17
15
|
@body_raw = @body_raw.to_s.gsub(/#{WAVE_DASH}/, FULLWIDTH_TILDE)
|
18
16
|
@body_raw = @body_raw.to_s.gsub(/#{MINUS_SIGN}/, FULLWIDTH_HYPHEN_MINUS)
|
17
|
+
@body_raw = @body_raw.to_s.gsub(/#{EM_DASH}/, HORIZONTAL_BAR)
|
18
|
+
@body_raw = @body_raw.to_s.gsub(/#{DOUBLE_VERTICAL_LINE}/, PARALLEL_TO)
|
19
19
|
@body_raw = NKF.nkf(NKF_OPTIONS, @body_raw)
|
20
20
|
end
|
21
21
|
process_body_raw_without_iso_2022_jp_encoding
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail-iso-2022-jp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.pre3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -82,10 +82,13 @@ files:
|
|
82
82
|
- lib/mail-iso-2022-jp/ruby18/message.rb
|
83
83
|
- lib/mail-iso-2022-jp/ruby18/field_with_iso_2022_jp_encoding.rb
|
84
84
|
- lib/mail-iso-2022-jp/ruby18/mail.rb
|
85
|
+
- lib/mail-iso-2022-jp/common_methods_for_field.rb
|
85
86
|
- lib/mail-iso-2022-jp/field_with_iso_2022_jp_encoding.rb
|
86
87
|
- lib/mail-iso-2022-jp/subject_field.rb
|
87
88
|
- lib/mail-iso-2022-jp/structured_fields.rb
|
89
|
+
- lib/mail-iso-2022-jp/character_names.rb
|
88
90
|
- lib/mail-iso-2022-jp/header.rb
|
91
|
+
- lib/mail-iso-2022-jp/invalid_encoding_error.rb
|
89
92
|
- lib/mail-iso-2022-jp/mail.rb
|
90
93
|
- lib/mail-iso-2022-jp.rb
|
91
94
|
homepage: https://github.com/kuroda/mail-iso-2022-jp
|