def decode_mh # decode message header
gsub(/=\?([^?]+)\?(B|Q)\?([^?]+)\?=/i) {
$3.decode_ec($2).decode_cs('UTF-8', $1) #### now fixed utf-8
- }
+ }.gsub(/[\x00-\x1F]/, '^x')
end
def decode_ec(code) # decode encodings
@@snippers = {}
@@each_snippers = {}
@@current_snip_charset = 'UTF-8'
+# @@current_snip_charset = 'EUC-JP'
+# @@current_snip_charset = 'SHIFT_JIS'
def self.bind_snipper(charset)
@@snippers[charset] = Proc.new
#-----------------------------------------------------------
#
- # 端末の UTF-8 対応の不備を補う
+ # 端末の UTF-8 対応の不備(記号の幅)を補う
#
# http://ja.wikipedia.org/wiki/UTF-8
#
c + '_'
}
end
+
+ #-----------------------------------------------------------
+ #
+ # Re: をまとめる
+ #
+ def group_re(level = 0, re = 'Re')
+ base = self.dup
+ while(base =~ /^\s*#{re}\^?\d*:/i)
+ base.sub!(/^\s*#{re}\^?(\d*):\s*/i) {
+ level += ($1.to_i > 1 ? $1.to_i : 1)
+ ''
+ }
+ end
+ (level < 1 ? '' : "#{re}: ") + base
+# (level < 1 ? '' : "#{re}#{level < 2 ? '' : "^#{level}"}: ") + base # Re^3 表記
+ end
+
+ #-----------------------------------------------------------
+ #
+ # Fw: をまとめる
+ #
+ def group_fw(level = 0)
+ group_re(level, 'Fw')
+ end
end
#===============================================================================
end
def self.get_text(msgid)
- @@domains[@@current_domain][msgid] or msgid
+ @@domains[@@current_domain][msgid] || msgid
end
end
end
}
+String.bind_snipper('EUC-JP') {|str, n| #### 指定の長さに切り詰める
+ ws = str[0, n * 2].gsub(/[\x80-\xFF][\x80-\xFF]+/, "\xFF\xFF")[0, n]
+ wc = ws.count("\xFF")
+ str.slice(0, n + wc / 2 - wc % 2) + ' ' * (n - ws.length + wc % 2)
+}
+
+String.bind_each_snipper('EUC-JP') {|str, n, max, proc| #### 指定の長さに切り詰め、順に行を渡す
+ p = 0; while(p <= str.length) # '<': 改行文字のみの行は省略
+ break if((max -= 1) < 0)
+ ws = str[p, n * 2].gsub(/[\x80-\xFF][\x80-\xFF]+/, "\xFF\xFF")[0, n]
+ wc = ws.count("\xFF")
+ proc.call(str.slice(p, nn = n + wc / 2 - wc % 2) + ' ' * (n - ws.length + wc % 2))
+ p += nn
+ end
+}
+
#### TAB 対応
__END__