module Data.Char.Properties.PrivateData where
{
        import Prelude;

        handleOmittedRange :: a -> (Char -> a) -> Char -> a;
        handleOmittedRange def _ c | (c < '\x3400') = def;      -- optimisiation, catch about 99.9% of cases for non-CJK text
        handleOmittedRange _ f c | (c > '\x3400') && (c <= '\x4DB5') = f '\x3400';
        handleOmittedRange _ f c | (c > '\x4E00') && (c <= '\x9FA5') = f '\x4E00';
        handleOmittedRange _ f c | (c > '\xAC00') && (c <= '\xD7A3') = f '\xAC00';
        handleOmittedRange _ f c | (c > '\xD800') && (c <= '\xDB7F') = f '\xD800';
        handleOmittedRange _ f c | (c > '\xDB80') && (c <= '\xDBFF') = f '\xDB80';
        handleOmittedRange _ f c | (c > '\xDC00') && (c <= '\xDFFF') = f '\xDC00';
        handleOmittedRange _ f c | (c > '\xE000') && (c <= '\xF8FF') = f '\xE000';
        handleOmittedRange _ f c | (c > '\x20000') && (c <= '\x2A6D6') = f '\x20000';
        handleOmittedRange _ f c | (c > '\xF0000') && (c <= '\xFFFFD') = f '\xF0000';
        handleOmittedRange _ f c | (c > '\x100000') && (c <= '\x10FFFD') = f '\x100000';
        handleOmittedRange def _ _ = def; 
}
