- class UnicodeFilter
- def initialize(oenc, *iencs)
- o = oenc.dup
- o += '//ignore' if !o.include?('/')
- i = iencs[0].dup
- # i += '//ignore' if !i.include?('/')
- @iencs = iencs.dup
- @iconvs = @iencs.map { |_| Iconv.new('utf-8', _) }
- debug "*** o = #{o}, i = #{i}, iencs = #{iencs.inspect}"
- @default_in = Iconv.new('utf-8//ignore', i)
- @default_out = Iconv.new(o, 'utf-8//ignore')
- end
-
- def in(data)
- rv = nil
- @iconvs.each_with_index { |ic, idx|
- begin
- debug "trying #{@iencs[idx]}"
- rv = ic.iconv(data)
- break
- rescue
- end
- }
-
- rv = @default_in.iconv(data) if !rv
- debug ">> #{rv.inspect}"
- return rv
- end
-
- def out(data)
- rv = @default_out.iconv(data) rescue data # XXX: yeah, i know :/
- debug "<< #{rv}"
- rv
- end