#!/usr/bin/env ruby

require 'nkf'

def print_ucs2mb_one_char(ucs, mb)
    mblen = mb.length

    printf("<U%04X> ", ucs)
    for i in 0..(mblen-1)
        printf("\\x%02X", mb[i])
    end
    print "\n"
end

def dump_ucs2mb_plane(nkf_opt, plane)
    for u in 0..0xFFFF
        if plane == 0 && u >= 0xD800 && u <= 0xDFFF
            next
        end
        u = plane << 16 | u
        mb = NKF.nkf(nkf_opt, [u].pack('U'))
        if mb.length > 0
            print_ucs2mb_one_char(u, mb);
        end
    end
end

def dump_ucs2mb(codeset)
    nkf_opt = "-x --ic=UTF-8 --oc=" + codeset

    dump_ucs2mb_plane(nkf_opt, 0)
    dump_ucs2mb_plane(nkf_opt, 2)
end

if ARGV.size != 1
    STDERR.print "Usage: ucs2mb_ruby codeset\n";
    exit 1
else
    codeset = ARGV[0]
    dump_ucs2mb(codeset)
end

exit 0

